2013-02-11 3 views
1

Я просто установить мой RBAC hierarchie как это (используя CPhpAuthManager)Основы RBAC для Yii Framework

   $auth = Yii::app()->authManager; 

       $auth->createOperation('create', 'add new data'); 
       $auth->createOperation('read', 'read data'); 
       $auth->createOperation('update', 'update data'); 
       $auth->createOperation('delete', 'delete data'); 

       $teammember = $auth->createRole('teammember'); 
       $teammember->addChild('create'); 
       $teammember->addChild('read'); 
       $teammember->addChild('update'); 
       $teammember->addChild('delete'); 

       $auth->save(); 

И обновить мой LoginForm класс модели, как это:

public function login() 
    { 
      if($this->_identity===null) 
      { 
        $this->_identity=new UserIdentity($this->username,$this->password); 
        $this->_identity->authenticate(); 
      } 
      if($this->_identity->errorCode===UserIdentity::ERROR_NONE) 
      { 
        $duration=$this->rememberMe ? 3600*24*30 : 0; // 30 days 
        Yii::app()->user->login($this->_identity,$duration); 
        ***Yii::app()->authManager->assign('teammember', Yii::app()->user->id); 
        return true; 
      } 
      else 
        return false; 
    } 

(Посмотрите на строку с 3 звезды ***) (Yii::app()->user->id возвращает идентификатор пользователя как целое)

Он должен хорошо работать. Я входе пользователя в систему (with Yii::app()->user->login()), а затем (Yii::app()->authManager->assign())

Теперь я проверяю с этим:

public function actionTest() 
{ 
     if(Yii::app()->user->checkAccess('create')) 
     { 
       echo "YOU CAN DO THIS"; 
     } 
     else 
     { 
       echo "YOU CAN'T DO THIS"; 
     } 
} 

Но выход вы не можете сделать это. Я что-то упускаю? В чем проблема?

ДОПОЛНИТЕЛЬНЫЕ

Результат

var_dump(Yii::app()->authManager->getRoles()); 

:

хорошеет версия here

array(1) { ["teammember"]=> object(CAuthItem)#25 (8) { ["_auth":"CAuthItem":private]=> object(CPhpAuthManager)#20 (10) { ["authFile"]=> string(50) "/var/www/WingSplitDatabase/protected/data/auth.php" ["_items":"CPhpAuthManager":private]=> array(5) { ["create"]=> object(CAuthItem)#21 (8) { ["_auth":"CAuthItem":private]=> *RECURSION* ["_type":"CAuthItem":private]=> int(0) ["_name":"CAuthItem":private]=> string(6) "create" ["_description":"CAuthItem":private]=> string(12) "add new data" ["_bizRule":"CAuthItem":private]=> NULL ["_data":"CAuthItem":private]=> NULL ["_e":"CComponent":private]=> NULL ["_m":"CComponent":private]=> NULL } ["read"]=> object(CAuthItem)#22 (8) { ["_auth":"CAuthItem":private]=> *RECURSION* ["_type":"CAuthItem":private]=> int(0) ["_name":"CAuthItem":private]=> string(4) "read" ["_description":"CAuthItem":private]=> string(9) "read data" ["_bizRule":"CAuthItem":private]=> NULL ["_data":"CAuthItem":private]=> NULL ["_e":"CComponent":private]=> NULL ["_m":"CComponent":private]=> NULL } ["update"]=> object(CAuthItem)#23 (8) { ["_auth":"CAuthItem":private]=> *RECURSION* ["_type":"CAuthItem":private]=> int(0) ["_name":"CAuthItem":private]=> string(6) "update" ["_description":"CAuthItem":private]=> string(11) "update data" ["_bizRule":"CAuthItem":private]=> NULL ["_data":"CAuthItem":private]=> NULL ["_e":"CComponent":private]=> NULL ["_m":"CComponent":private]=> NULL } ["delete"]=> object(CAuthItem)#24 (8) { ["_auth":"CAuthItem":private]=> *RECURSION* ["_type":"CAuthItem":private]=> int(0) ["_name":"CAuthItem":private]=> string(6) "delete" ["_description":"CAuthItem":private]=> string(11) "delete data" ["_bizRule":"CAuthItem":private]=> NULL ["_data":"CAuthItem":private]=> NULL ["_e":"CComponent":private]=> NULL ["_m":"CComponent":private]=> NULL } ["teammember"]=> *RECURSION* } ["_children":"CPhpAuthManager":private]=> array(1) { ["teammember"]=> array(4) { ["create"]=> object(CAuthItem)#21 (8) { ["_auth":"CAuthItem":private]=> *RECURSION* ["_type":"CAuthItem":private]=> int(0) ["_name":"CAuthItem":private]=> string(6) "create" ["_description":"CAuthItem":private]=> string(12) "add new data" ["_bizRule":"CAuthItem":private]=> NULL ["_data":"CAuthItem":private]=> NULL ["_e":"CComponent":private]=> NULL ["_m":"CComponent":private]=> NULL } ["read"]=> object(CAuthItem)#22 (8) { ["_auth":"CAuthItem":private]=> *RECURSION* ["_type":"CAuthItem":private]=> int(0) ["_name":"CAuthItem":private]=> string(4) "read" ["_description":"CAuthItem":private]=> string(9) "read data" ["_bizRule":"CAuthItem":private]=> NULL ["_data":"CAuthItem":private]=> NULL ["_e":"CComponent":private]=> NULL ["_m":"CComponent":private]=> NULL } ["update"]=> object(CAuthItem)#23 (8) { ["_auth":"CAuthItem":private]=> *RECURSION* ["_type":"CAuthItem":private]=> int(0) ["_name":"CAuthItem":private]=> string(6) "update" ["_description":"CAuthItem":private]=> string(11) "update data" ["_bizRule":"CAuthItem":private]=> NULL ["_data":"CAuthItem":private]=> NULL ["_e":"CComponent":private]=> NULL ["_m":"CComponent":private]=> NULL } ["delete"]=> object(CAuthItem)#24 (8) { ["_auth":"CAuthItem":private]=> *RECURSION* ["_type":"CAuthItem":private]=> int(0) ["_name":"CAuthItem":private]=> string(6) "delete" ["_description":"CAuthItem":private]=> string(11) "delete data" ["_bizRule":"CAuthItem":private]=> NULL ["_data":"CAuthItem":private]=> NULL ["_e":"CComponent":private]=> NULL ["_m":"CComponent":private]=> NULL } } } ["_assignments":"CPhpAuthManager":private]=> array(0) { } ["showErrors"]=> bool(false) ["defaultRoles"]=> array(1) { [0]=> string(9) "ziyaretci" } ["behaviors"]=> array(0) { } ["_initialized":"CApplicationComponent":private]=> bool(true) ["_e":"CComponent":private]=> NULL ["_m":"CComponent":private]=> NULL } ["_type":"CAuthItem":private]=> int(2) ["_name":"CAuthItem":private]=> string(10) "teammember" ["_description":"CAuthItem":private]=> string(0) "" ["_bizRule":"CAuthItem":private]=> NULL ["_data":"CAuthItem":private]=> NULL ["_e":"CComponent":private]=> NULL ["_m":"CComponent":private]=> NULL } } 
+0

Downvote? действительно? Зачем??! – Eray

+1

Попробуйте добавить 'Yii :: app() -> authManager-> save();' к строке после строки с 3 звездами. –

+0

OMG было очень просто, я не ожидал этого. @WillemRenzema, пожалуйста, отправьте этот комментарий в качестве ответа. – Eray

ответ

2

Любые изменения в настройках Идент должна быть сохранена, так что просто добавьте следующий lin e после вашего назначения:

Yii::app()->authManager->save();

Смежные вопросы