Cake的ACL组件和“所有权”的概念

时间:2010-08-06 05:25:31

标签: cakephp acl authentication

我一直在使用Cake的Auth / ACL组件。我已经阅读了文档并且我已经完成了本教程,但我仍然不满意我能用它实现的目标。我已经看到了couple other方法,但我不能说因为我真的有一个直接赢家。在我读过的任何教程/博客文章/文档中,“所有权”的用例并未完全涵盖。

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


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

对ARO来说很容易开始:

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

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

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

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

每位看护人都可以参加包括患者在内的诊所。这使看护人能够访问患者写的任何内容。除此之外,患者 ONLY 能够看到/编辑/等......他拥有的任何东西。我读过的任何文章都没有明确说明这一点。我知道使用文件系统类型的权限这是司空见惯的,但我甚至不想走那条路......

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

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

编辑:所以所有的答案都很棒,所以所有的答案都是如此。我强烈建议查看我找不到的帖子,由bancer提供,因为它最终指向了一些很酷的东西。但最终,答案被埋没在文档中,我只是第一次没有“得到它”。此外,当我阅读cakeqs链接时,有一个AHA时刻。所以回答本杰明。

2 个答案:

答案 0 :(得分:1)

也许这会给你一些灵感。它是我开发的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

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

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());
 ...

答案 1 :(得分:1)

我没有看到任何其他人链接到关于ACL的其他Stack Overflow问题,建议在actionMap中添加一个新条目“editown”。

editown