设置可以在CakePHP中访问哪些页面

时间:2013-04-02 14:56:48

标签: php cakephp authentication

我已经对此进行了大量挖掘,但我无法弄清楚最好的方法是什么。

我有一个员工管理系统,每个登录的人都是“员工”,“主管”或“经理”。

目前,我根据他们的排名来显示不同版本的页面。但是,如果手动输入URL,常规“员工”仍然可以访问不应该访问的页面。根据CakePHP的文档,它表示默认情况下所有页面都受到限制,您必须授予对每个页面的访问权限。但我没有授予访问权限,似乎所有页面都可以访问。

页面访问的最佳方法是什么? 谢谢!

编辑:以下是AppController的配置:

   public $components = array(
        'DebugKit.Toolbar',
        'Session',
        'Auth' => array(
            'authenticate' => array(
                'Form' => array(
                    'userModel' => 'Employee'
                )
            ),
            'loginAction' => array(
                'controller' => 'employees',
                'action' => 'login',
                //'plugin' => 'users'
            ),
            'loginRedirect' => array('controller' => 'employees', 'action' => 'dashboard'),
            'logoutRedirect' => array('controller' => 'employees', 'action' => 'login'),
            'authError' => 'You must be logged in to see that.'
        )
    );

然后有isAuthorized()方法,它总是被设置为返回false:

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

2 个答案:

答案 0 :(得分:0)

克里特在数据库中的两个表

  1. 资源(id,controller,action)(这将包含控制器名称和操作名称。)
  2. 权限(roll_id,resource_id)
  3. isAuthorized()函数

    1. 如果roll为admin,则返回true。
    2. 否则请检查以下内容。
    3. 使用$this->request->controller获取当前控制器名称。
    4. 使用$this->request->action获取当前操作名称。
    5. resource_id表中获取resources以获取当前控制器和操作。
    6. 检查permission表中resource_idroll_id的记录。
    7. 如果记录存在则返回true。
    8. 最后,默认情况下它返回false。

答案 1 :(得分:0)

AppController.php

中缺少此代码
    class AppController extends Controller {

    public function isAuthorized($user) {
        return true;
    }

    public function initialize() {
        parent::initialize();

        $this->loadComponent('RequestHandler');
        $this->loadComponent('Flash');
        $this->loadComponent('Auth', [
            'authenticate' => [
                'Form' => ['fields' => ['username' => 'email']]
            ],
            'authorize' => ['Controller'],
        ]);

        //some other code here    
    }