-1

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

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

目前,我会根据它们的排名来显示不同版本的页面。但是,如果他们手动输入 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.'
        )
    );

然后是始终设置为返回 false 的 isAuthorized() 方法:

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

2 回答 2

0

在数据库中创建两个表

  1. 资源(id、控制器、动作)(这将包含控制器名称和动作名称。)
  2. 权限(roll_id,resource_id)

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。
于 2013-04-03T05:11:18.507 回答
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    
    }
于 2017-04-30T04:38:33.070 回答