0

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

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

    //whatever
}

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

哪种检查方法更好?

谢谢。

4

2 回答 2

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');
}

访问已登录的用户

但是,为了不必在任何地方重复 group-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'));
}

访问控制

要使用“简单”授权,您可以在控制器中创建自己的isAuthorized()操作,这将允许您根据当前登录用户的属性阻止对特定操作的访问;

使用控制器授权

于 2013-03-27T19:45:02.417 回答
0

我不明白为什么要将用户角色放在 Configure 数组中,因为它旨在包含应用程序范围的设置。

Personaly 我的数据库中有一个包含角色的表。虽然可能会添加一些角色,但有一些我从不修改(通常是管理员角色)。这允许我将其值存储为配置中的应用程序参数并稍后检查它:

引导程序.php

Configure :: write('administrator.role_id', 1);

测试控制器:

if($this->Auth->user('role_id') == Configure :: read('administrator.role_id'))
{
    //do things specific to admin role
}

也就是说,如果用户角色在配置中以一种或另一种方式动态存储,它可能也可以工作,但这可能不是更优雅的解决方案。

于 2013-03-27T16:10:34.927 回答