2014-06-10 2 views
2

Yii::app()->user->login($identity, 0);으로 로그인 한 후 어떻게 사용자의 역할을 설정할 수 있습니까?Yii의 사용자 역할 (관리자/사용자) 설정

사용자가 로그인했는지 (@)이 규칙이 어떻게 수행되고 관리자 (admin)인지 묻는 것은 무엇입니까? 임의의 컨트롤러

코드 :

public function accessRules() 
{ 
    return array(
     array('allow', 
      'actions'=>array('users','user'), 
      'users'=>array('@'), 
     ), 
     array('allow', 
      'actions'=>array('admin','delete'), 
      'users'=>array('admin'), 
     ), 
     array('deny', 
      'users'=>array('*'), 
     ), 
    ); 
} 

답변

1

나는 사용자의 역할을 설정할 수 있습니다 내가 YII :: 응용 프로그램()로 그/그녀의 로그인 후에 방법 -> 사용자 -> 로그인 ($ 정체성, 0); .

class WebUser extends CWebUser { 
    private $_model = null; 

    function getRole() { 
     if($user = $this->getModel()) { 

      return $user->role; 
     } 
    } 

    private function getModel(){ 
     if (!$this->isGuest && $this->_model === null){ 
      $this->_model = User::model()->findByPk($this->id, array('select' => 'role')); 
     } 
     return $this->_model; 
    } 
} 

그런 다음

'user'=>array(
    'class' => 'WebUser', 
    // … 
), 

그럼 예를 들어 내가 PhpAuthManager를 사용합니다 (AuthManager 클래스를 추가 설정에 사용자 구성 요소를 구성하지 : 당신의 WEBUSER 클래스에서

이 같은 방법 getRole 추가 구성 파일에서 사용자 구성 요소 구성을 잊어 버림)

class PhpAuthManager extends CPhpAuthManager{ 
    public function init(){ 
     // auth.php in config directory consist your roles 
     if($this->authFile===null){ 
      $this->authFile=Yii::getPathOfAlias('application.config.auth').'.php'; 
     } 

     parent::init(); 

     if(!Yii::app()->user->isGuest){ 
      $this->assign(Yii::app()->user->role, Yii::app()->user->id); 
     } 
    } 
} 
이 같은

귀하의 auth.php :

return array(
    'guest' => array(
     'type' => CAuthItem::TYPE_ROLE, 
     'description' => 'Guest', 
     'bizRule' => null, 
     'data' => null 
    ), 
    'admin' => array(
     'type' => CAuthItem::TYPE_ROLE, 
     'description' => 'User', 
     'children' => array(
      'guest', // extend all permission form guest user 
     ), 
     'bizRule' => null, 
     'data' => null 
    ), 

);

그런 다음 컨트롤러 필터에 사용

public function accessRules() 
{ 
    return array(
     array('allow', 
      'actions'=>array('admin', 'onlyAdmin'), 
      // use roles key not user 
      'roles'=>array('admin'), 
     ), 
    ); 
} 

당신의 행동이나 templtes에 :

if(Yii::app()->user->checkAccess('admin')){ 
    echo "hello, I'm administrator"; 
} 

이 더보기 : Seydamet 말했듯이 http://www.yiiframework.com/wiki/65

2

글쎄, 그건입니다 Yii 사용자를위한 아주 좋은 자습서. 귀하의 경우

'users'=>array('admin'), 

실제 사용자 이름이 admin 인 사용자를 의미합니다.

저는 역할을 사용하려고합니다. 이 경우 여전히 위의 링크가 완벽합니다.

당신의 loggin에이 http://www.yiiframework.com/wiki/65#hh3을 수행 할 수 있습니다 후, 바로 그런 당신이

public function accessRules() 
{ 
    return array(
     array('allow', // allow bob role only access to the view file 
      'actions'=>array('view'), 
      'roles'=>array('bob') 
     ), 

     array('deny', // deny everybody else 
      'users' => array('*') 
     ) 
    ); 
} 
을 할 수

 if(!$auth->isAssigned('bob',$this->_id)) 
     { 
      if($auth->assign('bob',$this->_id)) 
      { 
       Yii::app()->authManager->save(); 
      } 
     } 

같은 역할을 할당