我们正在开展一个有4个角色的项目。但是在cakephp 3.x中,Auth组件使用
Auth.User 索引来验证会话中的用户数据。 $this->Auth->setUser($user);
由于这个原因,我们无法出于某种目的从管理面板访问前端用户帐户,因为当我们从管理面板登录前端用户时,前端登录操作执行并覆盖会话值
因此,如果有任何处理方法,请建议我们。
提前谢谢。
答案 0 :(得分:2)
我也明白你没有使用前缀来管理后端和前端用户,那么你可能会使用单独的文件夹结构来管理后端,我可以吗?
你是对的,$this->Auth->setUser($user);
始终拥有Auth.User
索引的会话。所以你需要为后端编写不同的会话索引,你可以这样做:
对于后端用户身份验证: **
$this->loadComponent('Auth', [
'authorize' => ['Controller'], // Added this line
'loginRedirect' => [
'controller' => 'Users',
'action' => 'dashboard',
'prefix' => 'admin_panel'
],
'logoutRedirect' => [
'controller' => 'Users',
'action' => 'login',
'prefix' => 'admin_panel'
],
'storage' => [
'className' => 'Session',
'key' => 'Auth.Admin',
]
]);
**
在这里,您可以在'storage'数组键值中传递所需的索引。 我认为这对你有用。
答案 1 :(得分:0)
查看此CakePHP插件策划列表中的Authentication and Authorization部分。
例如,您可以使用dereuromarks TinyAuth Plugin来授权您的用户并配置他们能够看到的内容。
通过这种方式,您可以使用相同的身份验证(了解differences between Authentication and Authorization)和相同的用户表,这将阻止{{1}你提到的冲突。
答案 2 :(得分:0)
Auth组件覆盖了上一个会话,因为它始终将会话存储在Auth.users中,因此我们必须更改不同角色的会话密钥。
如果您使用URL前缀来访问不同的角色,那么您可以这样做。
AppController.php
public function beforeFilter(Event $event)
{
if($this->request->params['prefix']){
$this->Auth->config('storage', [
'key'=>'Auth.'.$this->request->params['prefix'],
'className'=>'Session'
]);
}
return parent::beforeFilter($event); // TODO: Change the autogenerated stub
}
这将根据您的需要在Auth中创建不同的角色。 会议将是这样的
[
'Auth'=>[
'User'=>['id'=>''],
'Admin'=>['id'=>''],
]
]
经过测试,对我很有帮助。