cakephp acl aros_acos悖论

cakephp acl aros_acos悖论,cakephp,permissions,acl,authentication,Cakephp,Permissions,Acl,Authentication,我试图使用Auth和Acl组件在cakePHP站点中实现一个身份验证/授权组合,但我的实现中出现了一些奇怪的情况。我有正确的acos、aros和aros_acos表,它们似乎在某种程度上起作用 我已将我的行为映射如下: $this->Auth->mapActions(数组('read'=>array('view'),'update'=>array('edit')) 我的acos表如下所示: 场地 1.1页 1.2用户 1.3组 1.4管理 和aros表: 使用者 1.1编辑 1.1

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

我已将我的行为映射如下:

$this->Auth->mapActions(数组('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是Admin用户,是admins组的成员,而regular_用户是users组的成员

现在,在aros_acos表中,如果我给“用户”组这样的“页面”CRUD权限:0 1 1 0(这给了他们阅读和更新的权限),那么一切都正常(至少对于“查看”和“编辑”操作)。但是如果我将0 1 0 0(只有读取权限)放入,那么我会被重定向到“/”,我注意到的一点是,它不会调用app_控制器,或者至少不会调用app_控制器中的beforeFilter()函数

此外,我还编写了beforeFilter(),这样当用户无法访问crud时,可以给他一条$this->flash消息,让他知道自己“未经授权”(我必须这样做,因为$this->Auth->authror似乎不起作用)。因此,考虑到这一点,我现在为users组重写aros_acos表,如下所示:0 0 1 0(仅允许更新),这次我在访问“查看”操作时收到flash消息(这是正确的,因为我没有访问它的权限),但在尝试访问“编辑”操作时也会收到flash消息


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

思想1->在查看页面的某个地方,你是否有一个到另一个页面的请求操作?它可能来自视图页或视图页上的元素

想法2->构建完整的地图行动。这可能不是一个问题,但最好从这里开始

$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,没有发现任何问题。

谢谢您的回复。最近几天我一直在努力寻找我的问题,但我没有找到它。所以,毕竟,我只是用一条布线线路来修复它。现在我将“/”路由到登录页面。它似乎起作用了。我不知道我的解决方案是否合适,事实上我很确定它不合适,但无论如何,我有一个截止日期,这个解决方案在每个级别都有效(我测试过的)。现在,如果用户试图访问未经授权的crud,那么他将被发送到登录页面,并在该页面上收到$this->Auth->authror通知。无论如何,谢谢你的支持。