我正在尝试使用Auth和Acl Components在我的cakePHP网站中实现身份验证/授权组合,但我的实现发生了一些奇怪的事情。我有正确的acos,aros和aros_acos表,它们似乎在某种程度上起作用。
我已按照以下方式绘制了我的行为:
$ this-> Auth-> mapActions(array('read'=> array('view'),'update'=> array('edit')));
我的acos表看起来像这样:
和aros表:
用户,编辑和管理员都是小组。 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消息。
我遗失了什么,我不知道是什么。我写过这个问题,希望在完成之前,我会自己想出解决方案......但没有运气。我仍然不知道发生了什么,我想这是控制器的事情......你有什么想法吗?
答案 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并且没有发现任何问题。