我试图在CakePHP Auth组件中使用角色。角色将是用户,管理员,超级管理员等。我很难根据用户角色在每个控制器中放置条件。我尝试了以下内容并且它没有工作:
function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow('add');
if($this->Auth->user('roles') == 'admin') {
$this->Auth->allow('index', 'add', 'edit', 'delete');
}
elseif($this->Auth->user('roles') == 'super-admin') {
$this->Auth->allow('index', 'add', 'edit', 'delete', 'make_super_admin', 'privileges'); //Note difference in superadmin priviledges
}
问题在于有条件的。我希望函数进入每个控制器(UsersController,PatientsController,AdmissionsController等)并基于用户角色,给予不同的权限。
答案 0 :(得分:1)
将此逻辑放在beforeFilter()
类的AppController
中应该可以解决问题。
我的另一个想法是,您可能应该考虑将Acl组件与Auth组件结合使用。 Acl组件将为您提供对每个控制器中每个操作的开箱即用的精细控制。如果使用正确,您只需要为每个角色的操作设置权限,并且您当前尝试执行的访问控制检查的类型将自动执行。
这本书有一个关于如何使这项工作的优秀教程。我在我的应用程序中使用它,非常值得投入时间来设置和理解它是如何工作的。参考下文。
答案 1 :(得分:0)
我不知道这是不是你的问题,但是如果你想让每一个动作都使用*
而不是什么:
function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow('add');
if($this->Auth->user('roles') == 'admin') {
$this->Auth->allow('*');
} elseif($this->Auth->user('roles') == 'super-admin') {
$this->Auth->allow('*');
}
}
如果你想为每个控制器设置这些权限,最好将它放在你的AppController中,这样就会影响一切。