【问题标题】:How to assign role and checkaccess method in yii?如何在 yii 中分配角色和检查访问方法?
【发布时间】:2015-04-01 05:41:58
【问题描述】:

我是 yii 的角色管理新手,
我有 2 个角色,例如 Admin1、Admin2
我有 2 个控制器,其操作类似于

(1)UserController - 创建、更新、删除
(2)CategoryController - 查看、创建、更新

我想为 Admin1 提供 checkaccess 方法,例如
(1)UserController - 更新、删除
(2)CategoryController - 更新

我想为 Admin2 提供 checkaccess 方法,例如
(1)UserController - 创建、更新、删除
(2)CategoryController——创建、查看

如何为特定管理员授予这 2 个控制器的检查权限? 任何帮助将不胜感激。

这是我的 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;
    }

}

【问题讨论】:

    标签: php yii


    【解决方案1】:

    你应该使用yii access control filters

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

    【讨论】:

    • 谢谢,这对我有用,现在我想构建 checkaccess 方法,我添加了有问题的 checkaccess 代码,但它给了我类似““{parent}”或“DashboardIndex”之类的错误存在。”什么是问题?你能检查我的代码吗
    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 2013-11-28
    • 1970-01-01
    • 1970-01-01
    • 2013-05-08
    相关资源
    最近更新 更多