我尝试在CakePHP Auth组件中使用角色。角色可以是user、admin、super-admin等。我在根据用户角色在每个控制器中放置条件时遇到了困难。我尝试了以下方法,但没有成功:
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等),并根据用户角色,给予不同的权限。
2条答案
按热度按时间oug3syen1#
将此逻辑放在
AppController
类的beforeFilter()
中应该可以实现此目的。我的另一个想法是,也许您应该考虑将Acl组件与Auth组件结合使用。Acl组件将为您提供对每个控制器中的每个操作的开箱即用的粒度控制。如果使用正确,您只需要为每个角色的操作设置权限,您当前尝试执行的访问控制检查类型将自动执行。
这本书有一个很好的教程如何使这一工作。我正在我的应用程序中使用它,它是非常值得的时间投入到安装和了解它是如何工作的。参考下面。
CakePHP Book :: Simple Acl controlled Application
hgc7kmma2#
我不知道这是不是你的问题,但是如果你想允许每一个动作,你必须使用
*
而不是什么都不使用:如果您想为每个控制器设置这些权限,最好将其放在AppController中,这样它将影响所有内容。