好的,我先说我是蛋糕和 ACL 以及 MVC 架构的菜鸟。我正在关注其网站http://book.cakephp.org/2.0/en/tutorials-and-examples/simple-acl-controlled-application/part-two.html上的 cakephp 教程。我了解本教程的内容,但想知道将这个基于组的简单 ACL 提升到新水平的最简单方法。我搜索了SO无济于事。所以,继续这个问题。
例如,让我们对上述教程中的函数进行稍微修改的版本。它只是为 ACO 设置 ARO 权限。
有很多区,很多部门,每个都有很多用户。
关系如下:一个区有很多部门——一对多。一个地区有很多用户,用户可能有很多地区(只要他们属于那个地区的一个部门)。一个部门有AnBelongsToMany Users——多对多。
public function initDB() {
$group = $this->User->Group;
//Allow admins to everything
$group->id = 1;
$this->Acl->allow($group, 'controllers');
// issue 1) allow district managers to districts, departments, users
$group->id = 2;
$this->Acl->deny($group, 'controllers');
$this->Acl->allow($group, 'controllers/Districts');
$this->Acl->allow($group, 'controllers/Departments');
$this->Acl->allow($group, 'controllers/Users');
//issue 2) allow department managers to edit departments and users
$group->id = 3;
$this->Acl->deny($group, 'controllers');
$this->Acl->allow($group, 'controllers/Departments');
$this->Acl->allow($group, 'controllers/Users');
//we add an exit to avoid an ugly "missing views" error message
echo "all done";
exit;
}
好的,所以这些权限正在设置中,虽然它绝对方便,但确实解决了一小部分问题。就目前而言,我实际上只是阻止部门管理员执行区级职能。区管理员和部门管理员都可以不受限制地执行用户 CRUD
我想做的是将每个管理员类型 USER CRUD 的范围限制为仅居住在其部门或地区内的那些用户。例如,Department Admin Foo 不能删除另一个 Dept Admin 的用户,Dist Admin Bar 不能将所有另一个 Dist Admin 的用户名更改为 nancy。
哈哈。我对如何做到这一点感到非常茫然。
我想一种方法是获得管理员等级,例如 dist admin,然后找出他是哪个地区的用户。最后,将该地区的所有用户返回到变量 $userScope 中。同样,我是 cake php 的新手,并且不确定如何执行这个提案,即使这是一个好主意和处理这个问题的最佳方法。有什么建议么??提前致谢!!!
编辑:有用的答案,@nicolae。
但是,似乎我仍然可以编写一个函数来返回允许任何给定管理员(任何给定 aco)编辑的所有用户。对我来说似乎是这样,因为我假设管理员,他/她自己是返回的用户群的一部分。例如dist 9的dist admin,驻留在dist 9;同样,部门 1 的部门管理员驻留在部门 1 中。
could i write something like:
public getUserScope(){
$id = $this->Auth->user('id');
$dept = $this...
$dist = $this...
$access_level = $this->Session->read('Auth.User.group_id');
if($access_level == 3){
//get all users in this user's dept
} elseif($access_level == 2) {
//find all users in this user's dist
} elseif($access_level == 1) {
//find all users
}
}
哎哟。授予将这些信息组合在一起所涉及的所有连接表,这在实际输入时一定看起来像美杜莎的头发。你能看到我的逻辑吗?这对我来说有点难以表达。让我知道我是否应该进一步澄清任何事情。