简体   繁体   English

如何在yii中分配角色和checkaccess方法?

[英]How to assign role and checkaccess method in yii?

I am new in yii for Role Management, 我是yii的角色管理新手,
I have 2 Role like Admin1,Admin2 我有2个角色,例如Admin1,Admin2
I have 2 controllers and it's action like 我有2个控制器,动作类似

(1)UserController - create,update,delete (1)UserController-创建,更新,删除
(2)CategoryController - view,create,update (2)CategoryController-查看,创建,更新

I want to give checkaccess method for Admin1 like 我想给Admin1提供checkcheck方法
(1)UserController - update,delete (1)UserController-更新,删除
(2)CategoryController - update (2)CategoryController-更新

I want to give checkaccess method for Admin2 like 我想为Admin2提供checkaccess方法,例如
(1)UserController - create,update,delete (1)UserController-创建,更新,删除
(2)CategoryController - create,view (2)CategoryController-创建,查看

How can i give checkpermission for this 2 controller for particular admin ? 如何为特定管理员提供此2控制器的checkpermission? Any help will be really appreciated. 任何帮助将不胜感激。

Here is my checkaccess method but it gives me error 这是我的checkaccess方法,但给我错误

class UserIdentity extends CUserIdentity
{
    private $_id;
        public $role;
        public $roleName;

    /**
     * Authenticates a user.
     * @return boolean whether authentication succeeds.
     */
    public function authenticate()
    {
        $username = $this->username;
        $password = md5($this->password);
        $user=Login_User::model()->findByAttributes(array('Email'=>$username,'Password'=>$password,'Status'=>'1'));
        if(empty($user))
        {
            $this->errorCode=self::ERROR_USERNAME_INVALID;
        }
        elseif($password != $user->Password)
        {
            $this->errorCode=self::ERROR_PASSWORD_INVALID;
        }
        else
        {
            $this->_id=$user->UserID;
            $this->username=$user->Email;
                        $this->role=$user->RoleID;

                        $roleQuery = "SELECT * FROM role WHERE RoleID = ".$user->RoleID." ";
                        $roleData = Yii::app()->db->createCommand($roleQuery)->queryAll();

                        if(isset($roleData[0]['Title']) && $roleData[0]['Title'] != '') {
                            $this->roleName = $roleData[0]['Title'];
                        }  

                        if($user->RoleID != '') {
                            $query = "SELECT * FROM rolepermission WHERE RoleID = ".$user->RoleID." AND Status = 1 ";
                            $permissionData = Yii::app()->db->createCommand($query)->queryAll();
                        }

                        $auth=Yii::app()->authManager;
                        $rolePemirssion=$auth->createRole($this->roleName);
                        foreach($permissionData as $key => $value) {
                            $rolePemirssion->addChild($value['Controller'].$value['Action']);
                        }
            $this->errorCode=self::ERROR_NONE;
        }
        return $this->errorCode==self::ERROR_NONE;
    }

}

You should use yii access control filters 您应该使用yii访问控制过滤器

 class UserController extends CController
 {
   …
   public function accessRules()
   {
       return array(
           ...
           array('allow',
               'actions'=>array('update', 'delete'),
               'roles'=>array('admin1'),
           ),
           array('allow',
               'actions'=>array('update'),
               'roles'=>array('admin2'),
           ),
           ...
       );
   }
 }
 class CategoryController extends CController
 {
   …
   public function accessRules()
   {
       return array(
           ...
           array('allow',
               'actions'=>array('create', 'update', 'delete' ),
               'roles'=>array('admin1'),
           ),
           array('allow',
               'actions'=>array('create', 'view'),
               'roles'=>array('admin2'),
           ),
           ...
       );
   }
 }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM