2014-10-15 2 views

ответ

0

В соответствии с вашим стилем просто вставьте этот «пользователь/администратор/создайте».

look like http://url/index.php?r=user/admin/create 

Теперь на странице просмотра вы можете получить все роли вашей БД с помощью

$all_roles=new RAuthItemDataProvider('roles', array( 
'type'=>2, 
)); 
    $data=$all_roles->fetchData(); 

Затем создайте ниспадающее используя его. А и может создать пользователя на основе вашей роли

<div> 
    <label for="type_id">Type</label> 
    <?php echo CHtml::dropDownList("Type",'',CHtml::listData($data,'name','name'));? > 
</div> 

и назначить его в контроллере

$authorizer = Yii::app()->getModule("rights")->authorizer; 

$ authorizer-> authManager-> назначить ($ типа, $ модели-> ID);

0

Вы создаете роли для пользователей не наоборот (или, по крайней мере, это мой подход, если вы хотите слиться с ним).

Для ролей, которые вы можете посмотреть на этот вопрос: redirect Access rules with Yii

Наилучшим подходом является использование класса CAccessControlFilter, определенный в фреймворка, а также расширить это ваши роли/давая класс доступа.

метод

Вы ПРЕДФИЛЬТР будет выглядеть следующим образом:

protected function preFilter($filterChain) 
    { 
     $app=Yii::app(); 
     $request=$app->getRequest(); 
     $user=$app->getUser(); 
     $verb=$request->getRequestType(); 
     $ip=$request->getUserHostAddress(); 

     foreach($this->getRules() as $rule) 
     { 
      if(($allow=$rule->isUserAllowed($user,$filterChain->controller,$filterChain->action,$ip,$verb))>0) // allowed 
       break; 
      elseif($allow<0) // denied 
      { 
       if(isset($rule->deniedCallback)) 
        call_user_func($rule->deniedCallback, $rule); 
       else 
        $this->accessDenied($user,$this->resolveErrorMessage($rule)); 
       return false; 
      } 
     } 

     return true; 
    } 

И ваш класс WebUser будет выглядеть следующим образом:

class WebUser extends CWebUser { 

    // Store model to not repeat query. 
    private $_model; 


    // access it by Yii::app()->user->name 
    function getName(){ 
    $user = $this->loadUser(Yii::app()->user->id); 
    return $user['Name']; 
    } 


    // access it by Yii::app()->user->isAdmin() 
    function isAdmin(){ 
    $user = $this->loadUser(Yii::app()->user->id); 
    return intval($user['Type']) == 4; 
    } 

    function isEditor(){ 
    $user = $this->loadUser(Yii::app()->user->id); 
    return intval($user['Type']) == 3; 
    } 

    function isOrganizer(){ 
    $user = $this->loadUser(Yii::app()->user->id); 
    return intval($user['Type']) == 2; 
    } 

    function isNormal(){ 
    $user = $this->loadUser(Yii::app()->user->id); 
    return intval($user['Type']) == 1; 
    } 

    // Load user model. 
    protected function loadUser($id=null) 
    { 
     if($this->_model===null) 
     { 
      if($id!==null) 
       $this->_model=User::model()->findByPk($id); 
     } 
     return $this->_model; 
    } 
} 

Я использовал это с успехом в одном из моих университетских проектов https://github.com/RazvanADumitru/EventsPlanning

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