我在互联网上看到了一些代码,为了检查访问具体操作的权限,他们以这种方式使用Configure::read
函数:
public function action1(){
if(!Configure::read('isAdmin')){
$this->redirect(array('controller' => 'depots', 'action' => 'status'));
}
//whatever
}
我想知道,为此目的使用Configure::read
和Configure:write
并使用$this->Session->read()
和$this->Session->write()
之间的区别是什么?
哪种方式更好检查?
感谢。
答案 0 :(得分:2)
如果您使用内置AuthComponent,CakePHP将在会话中存储当前登录用户的详细信息。
登录后,您可以通过AuthComponent访问Used(例如role_id)的信息。这可以在任何地方完成(如果需要,也可以在视图或模型中);
例如;
if (123 === AuthComponent::user('role_id')) {
debug('hello admin user');
}
或者,在控制器内部:
if (123 === $this->Auth->user('role_id')) {
debug('hello admin user');
}
但是,不必在任何地方重复组ID,最好为此创建一个方法(例如在AppController中);
/**
* Checks if the currently logged in user is an admin
*
* @return bool true if the current user is an admin
*/
protected function isAdmin()
{
// probably best to make the id configurable (Configure::write())?
return (123 === $this->Auth->user('role_id'));
}
使用简单的'授权,您可以在Controller中创建自己的isAuthorized()
操作,这将允许您根据当前登录用户的属性阻止对特定操作的访问;
答案 1 :(得分:0)
我不明白为什么要将用户角色放在Configure数组中,因为它旨在包含应用程序范围的设置。
Personaly我的数据库中有一个包含角色的表。虽然可以添加一些角色,但有些角色我从不修改(通常是管理员角色)。 这允许我将其值作为应用程序参数存储在Configure中,并在以后检查它:
bootstrap.php中
Configure :: write('administrator.role_id', 1);
的TestController:
if($this->Auth->user('role_id') == Configure :: read('administrator.role_id'))
{
//do things specific to admin role
}
如果用户角色在Configure中以某种方式动态存储,它可能也可以正常工作,但这可能不是更优雅的解决方案。