cakephp acl aros_acos paradox

时间:2009-09-08 22:52:52

标签: cakephp permissions acl authentication

我正在尝试使用Auth和Acl Components在我的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 admins
  • 1.1.1.1 admin_name
  • 1.2 regular_user

用户,编辑和管理员都是小组。 Admin_name是管理员用户,admins组的成员,regular_user是用户组的成员。

现在,在aros_acos表中,如果我给'用户'组一个'页面'的CRUD权限,如下所示:0 1 1 0(这使他们有权阅读和更新)然后一切正常(至少用于“查看”和“编辑”操作)。但是如果我把0 1 0 0(只有读取的权利)然后我被重定向到'/',并且我注意到的一个特别的事情是它不会调用app_controller或者至少调用beforeFilter()函数app_controller。

此外,我写了beforeFilter(),这样当用户无法访问crud时,给他一个$ this-> flash消息,让他知道他“未经授权”(I必须这样做,因为$ this-> Auth-> authError似乎不起作用)。因此,考虑到这一点,我现在为这样的用户组重写aros_acos表:0 0 1 0(仅允许更新)这次我在访问'view'动作时得到flash消息(这是正确的)因为我没有权限访问它,但是当我尝试访问“编辑”动作时,我也收到了flash消息。

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

1 个答案:

答案 0 :(得分: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并且没有发现任何问题。