【问题标题】:Cake's ACL component and the concept of "ownership"Cake的ACL组件和“所有权”的概念
【发布时间】:2010-08-06 05:25:30
【问题描述】:

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

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


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

对于 ARO 来说,开始很容易:

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

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

现在我们使用像 Aidan Lister considers 这样的树状结构 ACO:

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

每位看护人都可以参加包括他的患者在内的诊所。这使看护人可以访问患者所写的任何内容。最重要的是,患者将能够看到/编辑/等...他拥有的任何东西。这在我读过的任何著作中都没有具体涉及。我知道对于文件系统类型的权限,这是司空见惯的,但我什至不想走这条路……

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

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

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

【问题讨论】:

  • 答案是here
  • 感谢各位的回答(刚刚登录查看)。我会测试一些并再次查看其中一些文档,然后让大家知道我发现了什么。

标签: cakephp acl authentication


【解决方案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());
 ...

【讨论】:

  • 当然,您必须编写一些代码来创建 acos 并打开和关闭它们。
  • 这是一个很棒的摘录。这不是完全我的想法,但绝对是当我的大脑更多地了解基础知识时我会研究的东西。
【解决方案2】:

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

editown

【讨论】:

  • 这也是一个很好的选择。我将不得不研究这对我的具体情况有何帮助,但我认为这样的事情会很有用。
猜你喜欢
  • 1970-01-01
  • 2016-09-30
  • 2020-06-03
  • 2021-07-26
  • 1970-01-01
  • 1970-01-01
  • 2012-09-27
  • 2013-03-29
  • 1970-01-01
相关资源
最近更新 更多