CakePHP上的会话与配置

时间:2013-03-27 14:44:02

标签: php cakephp cakephp-2.0 cakephp-2.2 cakephp-2.3

我在互联网上看到了一些代码,为了检查访问具体操作的权限,他们以这种方式使用Configure::read函数:

public function action1(){
    if(!Configure::read('isAdmin')){
        $this->redirect(array('controller' => 'depots', 'action' => 'status'));
    }

    //whatever
}

我想知道,为此目的使用Configure::readConfigure:write并使用$this->Session->read()$this->Session->write()之间的区别是什么?

哪种方式更好检查?

感谢。

2 个答案:

答案 0 :(得分:2)

使用AuthComponent

如果您使用内置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');
}

Accessing the logged in 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()操作,这将允许您根据当前登录用户的属性阻止对特定操作的访问;

Using ControllerAuthorize

答案 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中以某种方式动态存储,它可能也可以正常工作,但这可能不是更优雅的解决方案。