默认情况下,CakeDC admin可由各种用户/角色访问,使其安全

时间:2013-05-25 18:12:23

标签: cakephp cakephp-2.3 cakedc

我已经安装了CakeDC用户插件,我发现roleis_admin默认情况下不起作用。如果我使用常规用户名role = registeredis_admin = 0登录,我仍然可以转到/admin/users/add/。为什么有两种类型的支票roleis_admin,如果role = administratoris_admin = 0,反之亦然?

我正在寻找这个问题的首选解决方案,因此我可以保护管理部分并在不同页面上使用用户角色。仍然无法理解为什么is_admin存在,role = administrator可以解决所有问题。

2 个答案:

答案 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不允许您拥有角色。这两个领域都涵盖了不同的场景。同样,该插件被认为是一个启动和基础,你可以建立。这就是你想要自定义它时你必须做的事情。

有一个例子可以显示如何使用你需要的任何东西:

http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html#using-controllerauthorize

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;
}

}