我完全不知道如何做到这一点。我有 3 个不同的角色:管理员、员工和捐赠者。我的问题是,如果未经授权的用户尝试从 URL 访问操作,它确实会混淆(无论如何对我来说)权限和适当的重定向。
在我的 UsersController 中,我有以下操作
- 管理索引
- 管理员添加
- admin_edit
- 管理员视图
- 管理员删除
无前缀动作
- 登录
- 登出
- 看法
- 添加
- 编辑
应该允许管理员访问所有以管理员为前缀的操作以及登录和注销,而工作人员和捐助者应该只能访问后者 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 我也不完全理解 hwo $this->Auth->allow(), works.. 如果在我的捐助者控制器中我想根据角色控制对控制器操作的访问,我该怎么做?例如,如果我的捐助者控制器中有“删除”操作,我将如何允许工作人员用户同时拒绝捐助者用户访问删除操作。我相信 beforeFilter 是解决方案,但找不到怎么做!任何指针?谢谢