Exemplo n.º 1
0
 /**
  * @return \yii\db\ActiveQuery
  */
 public function getRbacUserRoles()
 {
     return $this->hasMany(RbacUserRole::className(), ['rbac_role_id' => 'id']);
 }
Exemplo n.º 2
0
 /**
  * Assign right to the current user
  */
 public function assignUserAuth()
 {
     $cacheKey = 'user_auth:' . $this->getId();
     $auth = Yii::$app->commonCache->get($cacheKey);
     if ($auth === false) {
         $rbacUserRoles = RbacUserRole::find()->where(['user_id' => $this->id])->with(['rbacRole' => function ($query) {
             $query->select(['id', 'name', 'rule_path']);
         }, 'rbacRole.rbacRolePermissions', 'rbacRole.rbacRolePermissions.rbacPermission'])->all();
         $auth = ['items' => [], 'rules' => []];
         foreach ($rbacUserRoles as $rbacUserRole) {
             $roleName = 'role.' . $rbacUserRole->rbacRole->name;
             if (!isset($auth['items'][$roleName])) {
                 $auth['items'][$roleName] = new Role(['name' => $roleName]);
                 if ($rbacUserRole->rbacRole->rule_path != '') {
                     $rule = new $rbacUserRole->rbacRole->rule_path();
                     if (!isset($auth['rules'][$rule->name])) {
                         $auth['rules'][$rule->name] = $rule;
                     }
                     $auth['items'][$roleName]->ruleName = $rule->name;
                     unset($rule);
                 }
             }
             if (isset($rbacUserRole->rbacRole->rbacRolePermissions)) {
                 foreach ($rbacUserRole->rbacRole->rbacRolePermissions as $rbacRolePermission) {
                     $permissionName = 'permission.' . $rbacRolePermission->rbacPermission->name;
                     if (!isset($auth['items'][$permissionName])) {
                         $auth['items'][$permissionName] = new Permission(['name' => $permissionName]);
                     }
                     if ($rbacRolePermission->rbacPermission->rule_path != '' && class_exists($rbacRolePermission->rbacPermission->rule_path)) {
                         $rule = new $rbacRolePermission->rbacPermission->rule_path();
                         if (!isset($auth['rules'][$rule->name])) {
                             $auth['rules'][$rule->name] = $rule;
                         }
                         $auth['items'][$permissionName]->ruleName = $rule->name;
                         unset($rule);
                     }
                 }
             }
         }
         Yii::$app->commonCache->set($cacheKey, $auth, $this->cacheDuration, new TagDependency(['tags' => [self::getCacheTag(), self::getCacheTag($this->id)]]));
     }
     $this->items = $auth['items'];
     $this->rules = $auth['rules'];
 }