Yii授权分配 - Yii在哪里获得ID?

时间:2014-09-09 13:08:55

标签: authentication yii rbac role-based-access-control

我正在尝试实施我的第一个RBAC系统:

我到达这个部分:

在官方文档中,他们有一个使用用户名的示例:

$auth->assign('adminRole', 'userA'); 
$auth->assign('adminRole', 'userB');

但是,我确实发现,在我的情况下,ID会起作用。

$auth->assign('adminRole', '8'); 
$auth->assign('adminRole', '9');

为什么ID工作,而不是用户名?我认为这是因为,在某个地方,我们覆盖了getId()的{​​{1}}方法。

但是,在继续遵循文档和 Yii 代码之后,我注意到UserIdentity方法不接受assign()的子项,它使用,{相反,{1}}界面。

然后我转到CUserIdentity,我注意到IWebUser方法有以下内容:

CWebUser

我一直关注这一点,最后我getId(),现在我很困惑。

那是什么id?我认为是我的用户数据库表的主键。

但是CWebUser如何知道我的用户数据库表(称为/** * Returns a value that uniquely represents the user. * @return mixed the unique identifier for the user. If null, it means the user is a guest. */ public function getId() { return $this->getState('__id'); } )btw。

我唯一的配置确实与用户有关,授权就是这个,在我的主配置文件中:

$_SESSION[$key]

Yii在tbl_site_user 第二个参数上获得了ID?

1 个答案:

答案 0 :(得分:1)

在您的代码中的某个时刻,您可以使用Yii::app()->user->login($identity);来调用CWebUser::login()

public function login($identity,$duration=0)
{
    $id=$identity->getId();
    $states=$identity->getPersistentStates();
    if($this->beforeLogin($id,$states,false))
    {
        $this->changeIdentity($id,$identity->getName(),$states);
...

此方法接受您的CUserIdentity对象,从中提取ID,然后调用CWebUser::changeIdentity()

protected function changeIdentity($id,$name,$states)
{
    Yii::app()->getSession()->regenerateID(true);
    $this->setId($id);
    $this->setName($name);
    $this->loadIdentityStates($states);
}

调用CWebUser::setId()的地方。

public function setId($value)
{
    $this->setState('__id',$value);
}

设置__id会话状态。