我正在使用客户也可以从前端登录的应用程序。 它可以正常工作,但问题是在这种情况下客户还可以看到后端功能。 反之亦然,当我登录后端时,我也会自动登录fronend。 它给我带来了麻烦。
任何人都建议我为网站中的管理员和客户实施单独的登录。
还是有其他方法可以做到这一点? 请提出建议。
您不需要单独的登录,只需要使用角色(或它们的某些变体)。
基本思想是,当某人登录时,您可以检查其“角色”,然后采取相应的措施。
因此,如果某人登录并且是“用户”,请将其发送到用户个人资料页面。 如果他们是“管理员”,请将其发送到管理控制台。
然后,在用户执行操作之前,使用某种形式的检查来验证访问权限。
一个示例是在AppController中设置isAuthorized()
方法。 在CakePHP书中查看更多详细信息 。
这将使您能够比较他们试图访问的控制器/操作,它们的角色和URL前缀(如果您使用/ admin / ...作为示例),并确定是否应授予他们访问权限。
有很多方法可以处理这种情况,但是基本思想就在那里。 找出他们是谁,以及他们是什么角色,并建立您的逻辑以确定1)应该去哪里,以及2)被允许去哪里。
您可以通过在cakephp appcontroller中的beforeFilter函数中添加以下代码来实现。
if($ this-> params ['prefix'] =='admin'){
$this->layout = 'admin';
AuthComponent::$sessionKey = 'Auth.Admin';
$this->Auth->authenticate = array(
'Form' => array(
'fields' => array('username' => 'email'),
'scope' => array ('User.role_id' => '1', 'User.status' => 1),
)
);
$this->Auth->loginAction = array('controller' => 'users','action' => 'login','admin' => true);
$this->Auth->loginRedirect = array('controller' => 'users','action' => 'dashboard','admin' => true);
$this->Auth->logoutRedirect = array('controller' => 'users','action' => 'login','admin' => true);
}else{
AuthComponent::$sessionKey = 'Auth.User';
$this->Auth->authenticate = array(
'Form' => array(
'fields' => array('username' => 'email'),
'scope' => array ('User.role_id >' => '2','User.status' => 1),
)
);
$this->Auth->loginAction = array('controller' => 'users','action' => 'login');
$this->Auth->loginRedirect = array('controller' => 'users','action' => 'dashboard');
if($this->Session->read('Auth.User.role_id') == CORPORATE){
$this->Auth->logoutRedirect = array('controller' => 'users','action' => 'corporate_login');
}else{
$this->Auth->logoutRedirect = array('controller' => 'users','action' => 'login');
}
}
如果您没有角色,则可以将其从作用域中删除。