2014-09-09 13 views
1

Я пытаюсь осуществить свою первую систему RBAC:Yii Authorization Assignment - Где Yii получает идентификатор?

Я получаю эту часть:

В Официальной документации, они есть пример с именем:

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

Однако, Я обнаружил, что в моем случае вместо этого ID будет работать.

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

Почему идентификационную работу, а не имя пользователя? Я предположил, что это произошло потому, что где-то мы перезаписываем метод getId() от UserIdentity.

Однако, после того, как сохранить после документации, а Yii код, я заметил, что метод assign(), не принимает ребенка CUserIdentity, он использует, IWebUser интерфейс, вместо этого.

Я затем перейти к CWebUser и я замечаю, метод getId() имеет следующее:

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

Я держу вслед за этим, и я в конечном итоге на $_SESSION[$key] и теперь я запутался.

Что это такое? Я предполагаю, что это первичный ключ моей таблицы базы данных пользователей.

Но как CWebUser знает о моей таблице базы данных пользователей (это называется tbl_site_user).

Единственная конфигурация у меня есть, что делать связывает пользователя и авторизация это, на мой основной конфигурационный файл:

'authManager'=>array(
      'class'=>'CDbAuthManager', 
      'connectionID'=>'db', 
     ), 

Где Yii получил идентификатор на $auth->assignвторой аргумент?

ответ

1

В какой-то момент вашего кода вы звоните CWebUser::login(), возможно, с Yii::app()->user->login($identity);.

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, извлекает идентификатор из него, и называет 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.

+0

Я ищу установку по умолчанию Yii. Нет модулей, ничего. У меня есть логин действия на моем контроллере сайта. Единственный логин, который у меня есть. Он не принимает никакой CUserIdentity. Тем не менее, у меня есть метод аутентификации под моделью «LoginForm». Но призыв к changeIdentity не требуется. Поэтому, к сожалению, я не могу следовать вашим шагам. :( – MEM

+0

Вам просто нужно найти 'CWebUser :: login()', поскольку это вызывает 'CWebUser :: changeIdentity' и все последующие шаги.' Yii :: app-> user' является объектом 'CWebUser' (по умолчанию) ,Если вы не внесли существенные изменения в код по умолчанию, 'Yii :: app() -> user-> login()' должен появиться где-то в классе LoginForm. –

+0

Найдите его. ;) Все чисто. Большое спасибо за то, что нашли время, чтобы углубиться в него. – MEM