0

我正在尝试使用 Auth 和 Acl 组件在我的 cakePHP 站点中实现身份验证/授权组合,但是我的实现发生了一些奇怪的事情。我有正确的 acos、aros 和 aros_acos 表,它们似乎在某种程度上可以工作。

我已经像这样映射了我的操作:

$this->Auth->mapActions(array('read' => array('view'), 'update' => array('edit')));

我的 acos 表如下所示:

    1. 地点
  • 1.1 页面
  • 1.2 用户
  • 1.3 组
  • 1.4 管理员

和 aros 表:

    1. 用户
  • 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 消息。

我错过了一些东西,我不知道是什么。我已经写了这个问题,希望在完成之前,我会自己想出解决方案......但没有运气。我仍然不知道发生了什么,我想这是一些控制器的事情......你有什么想法吗?

4

1 回答 1

1

想法 1 -> 在视图页面的某个地方,您是否偶然有一个 requestAction 到另一个页面?它可能来自视图页面或视图页面上的元素。

想法 2 -> 构建完整的 mapActions。这可能不是问题,但最好从这里开始。

$this->Auth->mapActions(array(
'read'=>array('index','view','admin_index'),
'create'=>array('add','admin_add'),
'update'=>array('edit','admin_edit'),
'delete'=>array('delete','admin_delete')));

如有必要,不要害怕将代码一直跟踪到 Auth 组件。只需 pr() 直到找到它的重定向位置。具体找出导致问题的原因。

确保您的会话是正确的,并且在此过程中不会被更改。

想法 3 -> 你是否正确地“重建”了 acl 表?可能是数据问题。我建议您使用 createAco()、createAro() 和 $this->Acl->allow() 函数来确保数据正确且所有键都正确。(检查永远不会痛)

这是您必须逐步跟踪应用程序的问题之一。我正在使用当前稳定的 CakePHP 并没有发现任何问题。

于 2009-09-09T00:41:32.890 回答