CakePHP复杂的身份验证(特定控制器/区域的特定用户角色)

时间:2013-01-25 18:11:14

标签: cakephp-2.0

我正在尝试构建一个包含多个区域的小型网络应用程序:

  1. 用户区
  2. 管理员区域
  3. 我正在使用Auth组件并在登录Auth->user('role')后进行检查,但这不会阻止“普通用户”在URL中键入管理路径并访问它(他已登录)。当然,管理员应该能够访问任何区域,但这不是我当前的问题:)

    管理并更重要的是实现这些权限/身份验证的最佳方式是什么?

    谢谢!

2 个答案:

答案 0 :(得分:1)

有ACL。但是,如果他们可以远离它,我会阻止任何人使用ACL。角色基础身份验证当然很好并且易于实现。他们开始的方式是正确的,但是,您需要在admin routing文件中启用core.php

Configure::write('Routing.prefixes', array('admin'));

完成后,即可准确设置编码并进行身份验证,只有admin角色的用户才能访问任何管理部分,例如http://www.yoursite.com/admin/users

角色基础身份验证成功的最大魔力是在AppController类中完成的。

为了举个例子,我会以这种方式设置AppController.php文件:

public $components = array(
    'Cookie',
    'Session',
    'Auth' => array(
        'authenticate' => array(
            'Form' => array(
                'userModel' => 'User',
                'fields' => array(
                    'username' => 'username',
                    'password' => 'password'
                )
            )
        ),
        'logoutRedirect' => array('controller' => 'pages', 'action' => 'home'),
        'authorize' => array('Controller')
    )
);


public function isAuthorized($user){        
    if(isset($user['role']) && $user['role'] === 'admin'){
        return true;
    }
    return false;
}

如果您想要admin布局和members总体布局,可以在beforeFilter()beforeRender()函数中执行此操作。

答案 1 :(得分:0)

我会在您的控制器中使用isAuthorized功能

这样的样本:

class PostsController extends AppController {

    public function isAuthorized() {
        if($this->Auth->user('role_id' != '1')) return false;
    }
}

并在AppController beforeFilter()添加

    $this->Auth->authorize = 'Controller';