我完全彻底失去了如何做到这一点。我有3个不同的角色:管理员,员工和捐助者。我的问题是,如果未经授权的用户尝试访问来自URL的操作,那么它确实会让人感到困惑(对我来说),并具有权限以及适当的重定向。cakePHP-角色授权和路由
在我UsersController我有下列行为
- admin_index
- admin_add
- admin_edit
- admin_view
- admin_delete
不带前缀的行动
- 登录
- 注销
- 视图
- 添加
- 编辑
管理员应允许访问所有管理前缀的行动以及登录和注销,而工作人员并且捐助者 应该只能访问后者5.还要注意,所有用户都使用相同的登录表单。
在我AppControlles的组成部分,我有以下:
'Auth' => array(
'loginRedirect' => array(
'controller' => 'donors',
'action' => 'index'
),
'logoutRedirect' => array(
'controller' => 'users',
'action' => 'login'
),
'authorize' => array('Controller')
)
然而,在我的登录操作我检查用户角色相应地更改loginRedirect:
if($this->request->is('post')){
if($this->Auth->login()){
switch($this->Auth->user('role')){
case 'admin':
$this->Auth->loginRedirect = array('controller'=>'users','action'=>'admin_index','prefix'=>'admin','admin'=>true);
break;
case 'donor':
...
break;
case .....
}
}
}
问题1 现在,如果具有捐助者角色的当前用户登录并尝试访问localhost/sitename/admin/users/add
,那么他将被重定向到admin/donors
而不仅仅是/donors
。那么我怎样才能删除管理员前缀?
问题2 此外,我不完全理解藿$这个 - > Auth->允许()的作品。如果在我donorsController我想控制访问根据角色控制器动作,我该怎么办它?例如,如果在我的donorsController中有'删除'操作,我将如何允许员工用户同时拒绝授权用户访问删除操作。我相信beforeFilter是解决方案,但无法找到如何去做!任何指针? 谢谢
你应该总是提到你正在使用的确切cakephp版本。提示:不要在这里创建巨大的控制器代码开销,而应该使用简单的/登录表单和[Tiny](http://www.dereuromark.de/2011/12/18/tinyauth-the-fastest-和-easy-authorization-for-cake2 /)作为Auth方法。通过这种方式,每个动作都被明确定义,并且在没有访问权限的情况下,所有动作都将重定向到/登录为中央登录表单。 – mark
感谢您的答复!我浏览了你的博客,看起来很干净。但是我没有这个设置,因为这些角色在用户的表中被定义为一个字段,而不是一个模型。此外,我仍然有理解$ this-> Auth-allow()的工作原理,以及我希望能够使用我已有的设置来恢复的问题。谢谢! – LogixMaster
只是用户表字段的作品,以及。阅读文档。不一定是模特。 – mark