【发布时间】:2015-10-15 06:45:20
【问题描述】:
我可以使用ACL 控制我的应用程序,一切都完美无缺,应用程序使用ACL 和Auth 运行顺畅。
现在的问题是:
我有两张桌子,users 和 posts。没有RBAC(基于角色的访问控制)。
我正在为每个用户设置deny 和allow,如下所示。
//allow User1 to do everything
$user->id=1;
$this->ACL->allow($user,'controllers');
//allow User2 to add, edit and view the posts
$user->id=2;
$this->Acl->deny($user, 'controllers');
$this->Acl->allow($user, 'controllers/Posts');
但我遇到了一个问题:
user2 正在访问edit 的posts user1。
示例:
User1 创建了一个post1。
现在User2 登录现在他可以编辑User1 的帖子(即post1- /localhost/myApp/posts/edit/1)
问题:这个问题如何设置ACL权限,帖子的所有者只能编辑帖子,其他人不能。
我可以在控制器级别实现这一点,只需检查
if($_SESSION['Auth']['User']['id'] == $Post['Post']['user_id']){
// you're the owner, so u can edit
}else{
//u cant edit, this is not ur post
}
但我需要ACL 才能在这里工作,可以吗?请帮忙
谢谢
【问题讨论】:
-
如果它是一个 javascript 问题,我会立即得到结果,但我运气不好,这个 cakephp。非常糟糕,:(
-
不确定它是否有效,您是否尝试过类似以下的想法:
$this->Acl->allow($user, 'controllers/Posts'/edit/1)等等? -
@arilia ,感谢您的评论我试过了,不工作你能建议任何其他解决方案吗:)
-
我从未如此深入地使用 ACL,但我认为您必须首先将您的帖子设置为 acos
public $actsAs = array('Acl' => array('type' => 'controlled'));并为每个帖子创建一个节点,就像为每个用户创建一个节点一样 -
阅读文档似乎可以为每个帖子创建一个 ACO 并为其设置用户级别的权限。但是您仍然需要使用
$this->Acl->check(...)来检查权限。 ACL 授权处理程序只是在操作级别检查权限。见manual