【问题标题】:Setting user role (admin/user) in Yii在 Yii 中设置用户角色(管理员/用户)
【发布时间】:2014-06-14 16:35:55
【问题描述】:

使用Yii::app()->user->login($identity, 0);登录后如何设置用户角色?

我要问的是此规则如何/如何检查用户是否已登录 (@) 并且是管理员 (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('*'),
        ),
    );
}

【问题讨论】:

    标签: php yii


    【解决方案1】:

    嗯,就像 Seydamet 所说,这是一个非常适合 Yii 用户编写的教程。你的情况

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

    表示实际用户名为 admin 的用户。

    我相信您正在尝试使用角色。在那种情况下,上面的链接仍然是完美的。

    登录后你可以这样做http://www.yiiframework.com/wiki/65#hh3,只需分配一个角色

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

    然后你可以做一个

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

    【讨论】:

      【解决方案2】:

      登录后如何设置用户角色 Yii::app()->user->login($identity, 0);?

      在您的 WebUser 类中添加方法 getRole,如下所示:

      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;
          }
      }
      

      然后在config中配置你的用户组件

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

      然后添加您的 AuthManager 类(例如我使用 PhpAuthManager。不要忘记在您的配置文件中配置用户组件)

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

      在你的行动或模板中:

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

      查看更多内容: http://www.yiiframework.com/wiki/65

      【讨论】:

        猜你喜欢
        • 2016-01-24
        • 2017-02-15
        • 2021-12-31
        • 1970-01-01
        • 2013-11-30
        • 1970-01-01
        • 1970-01-01
        • 2011-01-05
        • 1970-01-01
        相关资源
        最近更新 更多