我一直在使用Cake的Auth / ACL组件。我已经阅读了文档并且我已经完成了本教程,但我仍然不满意我能用它实现的目标。我已经看到了couple other方法,但我不能说因为我真的有一个直接赢家。在我读过的任何教程/博客文章/文档中,“所有权”的用例并未完全涵盖。
我希望描述我的用例,如果有人可以建议一种方法,我很满意,否则我可能只需要尝试自己做一些事情; o)
这基本上模仿了一套简单的博士办公室。
对ARO来说很容易开始:
组和用户之间存在“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时刻。所以回答本杰明。
答案 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”。