我已经对此进行了大量挖掘,但我无法弄清楚最好的方法是什么。
我有一个员工管理系统,每个登录的人都是“员工”,“主管”或“经理”。
目前,我根据他们的排名来显示不同版本的页面。但是,如果手动输入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;
}
答案 0 :(得分:0)
克里特在数据库中的两个表
在isAuthorized()
函数
admin
,则返回true。$this->request->controller
获取当前控制器名称。$this->request->action
获取当前操作名称。resource_id
表中获取resources
以获取当前控制器和操作。permission
表中resource_id
和roll_id
的记录。答案 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
}