2017-05-03 47 views
1

我们正在开发一个项目,其中有4个角色。但在CakePHP的3.x的验证组件保存使用在cakephp 3.x中为前端用户和管理员单独验证

$this->Auth->setUser($user);

这个由于我们无法从管理面板访问前端用户帐户Auth.User索引验证会话的用户数据出于某种目的,因为当我们从管理面板登录到前端用户时,前端登录操作会执行和重写会话值。

所以,如果有任何过程来处理这个问题,请给我们建议。

预先感谢您。

+0

选中此http:// stackoverflow。com/questions/39645441/authorize-users-based-roles-in-cakephp-3#answer-39647402 –

+0

@AmanRawat提供的链接的答案将只允许行动,这不会对我的问题起作用 – user7738665

+0

@AmanRawat我的问题与此完全不同 – user7738665

回答

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'数组键值中传递所需的索引。 我认为它会适合你。

+0

谢谢@克里希纳古普塔,它适合我。而你的回答完全满足了我的要求。干得好,再次非常感谢你。 – user7738665

+0

欢迎您... –

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'=>[ 
     'User'=>['id'=>''], 
     'Admin'=>['id'=>''], 
    ] 
] 

测试它,工作对我很好。

+0

我们不使用管理面板的前缀 – user7738665

+0

那么你在使用什么,你如何管理访问? –

相关问题