我正在尝试使用 Auth 和 Acl 组件在我的 cakePHP 站点中实现身份验证/授权组合,但是我的实现发生了一些奇怪的事情。我有正确的 acos、aros 和 aros_acos 表,它们似乎在某种程度上可以工作。
我已经像这样映射了我的操作:
$this->Auth->mapActions(array('read' => array('view'), 'update' => array('edit')));
我的 acos 表如下所示:
- 地点
- 1.1 页面
- 1.2 用户
- 1.3 组
- 1.4 管理员
和 aros 表:
- 用户
- 1.1 编辑
- 1.1.1 管理员
- 1.1.1.1 管理员名称
- 1.2 普通用户
用户、编辑者和管理员是组。admin_name 是管理员用户,admins 组的成员,regular_user 是 users 组的成员。
现在,在 aros_acos 表中,如果我给“用户”组这样的“页面”的 CRUD 权限:0 1 1 0(这赋予他们阅读和更新的权利)那么一切正常(至少对于“查看”和“编辑”操作)。但是如果我输入 0 1 0 0(只有阅读权),那么我会被重定向到“/”,我注意到的一件特别的事情是它没有调用 app_controller 或至少没有调用 beforeFilter() 函数app_controller。
此外,我编写了 beforeFilter() 以便当用户无法访问 crud 时,给他一个 $this->flash 消息,让他知道他是“未授权的”(我必须这样做,因为 $this->Auth->authError 似乎不起作用)。因此,考虑到这一点,我现在为用户组重写 aros_acos 表,如下所示:0 0 1 0(仅允许更新),这一次我在访问“查看”操作时收到 Flash 消息(这是正确的因为我没有访问它的权限),但是当我尝试访问“编辑”操作时,我也会收到 Flash 消息。
我错过了一些东西,我不知道是什么。我已经写了这个问题,希望在完成之前,我会自己想出解决方案......但没有运气。我仍然不知道发生了什么,我想这是一些控制器的事情......你有什么想法吗?