cakephp - Cake的ACL组件及 "ownership"的概念

标签 cakephp acl authentication

我一直在研究 Cake 的 Auth/ACL 组件。我已经阅读了文档并完成了教程,但我仍然对我实际可以完成的事情不满意。我见过coupleother接近,但我不能说,因为我确实有一个直接的赢家。在我读过的任何教程/博客文章/文档中,“所有权”的用例都没有得到充分的涵盖。

我希望描述我的用例,如果有人可以建议一种方法,我洗耳恭听,否则我可能只能尝试自己做一些事情;o)

<小时/>

这基本上模仿了一组简单的博士办公室。

对于 ARO 来说开始很容易:

  • 第 1 组:管理员(当然)
  • 第 2 组:看护者
  • 第 3 组:成员

组和用户之间存在“hasOne”关系(即一个用户只能属于一个组)。

现在我们使用树形结构的 ACO,如 Aidan Lister considers :

/root
    /practice
        /practice_profile
        /practice_updates
        /patients
            /entries
            /profiles
            /other_things

每个护理人员都可以参与包括其患者在内的实践。这使得看护者可以访问患者写的任何内容。最重要的是,患者将只能能够看到/编辑/等等......他拥有的任何东西。我读过的任何文章中都没有具体涉及这一点。我知道对于文件系统类型的权限来说,这是很常见的,但我什至不想走这条路......

在 Cake 的核心中使用 Auth/ACL,它并没有真正获得这样的权限。它似乎在说“好吧,如果你是 X 组的一部分,那么你就可以执行 Y 功能。”因此,似乎属于 members 组的任何用户都可以访问所有其他成员的内容,并且所有管理员都可以访问所有实践。

还有其他人遇到过这种用例吗?有进一步阅读的建议吗?有已知的解决方案吗?

编辑:所以所有的答案都很棒,所以大家都赞成。我强烈建议您查看由 bancer 提供的我没有找到的帖子,因为它最终向我指出了一些很酷的东西。但最终,答案都隐藏在文档中,我只是第一次没有完全“明白”。另外,当我读到 cakeqs 时,我顿时恍然大悟。关联。所以答案交给本杰明。

最佳答案

也许这会给你一些启发。这是我开发的 CMS 的 acos 表的摘录。通过使用其他明显未使用的 model 列,我获得了额外的控制层,可以让我设置页面的可访问性。

 id    parent_id  model  foreign_key  alias          lft  rght
 1462  1176       page   NULL         about-us       285  286 #display page url
 1515  1176       page   NULL         leo-test       291  292 #display page url
 1195  1176       NULL   NULL         ajaxSetStatus  261  262 #function
 1194  1176       NULL   NULL         walkTree       259  260 #function

然后我在 Controller 中执行类似的操作,以查看当前用户是否有权查看请求的页面(如果未登录,用户默认为匿名):

function view($url=null)
{
    $nD = $this->NodeDescriptor->findByUrl($url);
    if(!$nD) $this->redirect(array('action'=>'error'));
    $user = ($this->Auth->user())?$this->Auth->user():'Anonymous';
    if(!$this->Acl->check($user,"{$url}"))
        $this->redirect($this->referer());
 ...

关于cakephp - Cake的ACL组件及 "ownership"的概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3421197/

相关文章:

php - CodeIgniter 中的字段级 ACL

java - 更改分配给 Documentum 中 ACL 的组的 r_accessor_permit

java - Android 应用程序登录屏幕未加载

java - Tomcat6 中的基本身份验证不适用于目录

jquery - 如何在cakephp上实现类似facebook的通知?

php - Cakephp 3 中带有子查询的 mysql FROM 子句

cakephp - 强制 cakephp 3 auth->user() 显示虚拟字段

php - 在 CakePHP 中将变量从 beforeDelete 传递到 afterDelete()

acl - RabbitMQ 中的动态 ACL

apache - 仅在访问特定域时使用 HTTP Auth