我已经安装了CakeDC用户插件,我发现role
,is_admin
默认情况下不起作用。如果我使用常规用户名role
= registered
和is_admin
= 0
登录,我仍然可以转到/admin/users/add/
。为什么有两种类型的支票role
和is_admin
,如果role
= administrator
和is_admin
= 0
,反之亦然?
我正在寻找这个问题的首选解决方案,因此我可以保护管理部分并在不同页面上使用用户角色。仍然无法理解为什么is_admin
存在,role
= administrator
可以解决所有问题。
答案 0 :(得分:4)
我通过在方法“beforeFilter()”中的“app / Controller / AppController.php”中添加以下代码解决了同样的问题:
if (isset($this->params['prefix']) && $this->params['prefix'] == 'admin') {
if ($this->Session->check('Auth.User.role') and 'admin' !== $this->Session->read('Auth.User.role')) {
$this->Auth->deny('*');
return $this->flash('Non admin access unauthorized', '/');
}
}
虽然我承认这个解决方案并不是最佳的,但它确实可以解决问题!
答案 1 :(得分:3)
这是不插件的问题:你必须自己实现你的auth应用程序。该插件只是为您提供基础知识,但不根据客户的要求自定义应用程序。我建议你阅读本章http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html
is_admin检查AND角色字段有多种原因:您的用户可以拥有任何角色,但只有在检查了is_admin后才能访问管理区域。仅is_admin不允许您拥有角色。这两个领域都涵盖了不同的场景。同样,该插件被认为是一个启动和基础,你可以建立。这就是你想要自定义它时你必须做的事情。
有一个例子可以显示如何使用你需要的任何东西:
class AppController extends Controller {
public $components = array(
'Auth' => array('authorize' => 'Controller'),
);
public function isAuthorized($user = null) {
// Any registered user can access public functions
if (empty($this->request->params['admin'])) {
return true;
}
// Only admins can access admin functions
if (isset($this->request->params['admin'])) {
return (bool)($user['role'] === 'admin');
}
// Default deny
return false;
}
}