コード例 #1
0
 public function actionView($id)
 {
     $model = new AssignmentForm();
     $model->setScenario('auth');
     $permissions = [];
     $app = [];
     $authManager = Yii::$app->authManager;
     if ($model->load(Yii::$app->request->post()) && $model->validate()) {
         foreach ($model->getAttributes() as $key => $value) {
             if (empty($value)) {
                 $model->{$key} = [];
             }
         }
         //Revokes all roles from a user.
         try {
             $authManager->revokeAll($id);
             //角色
             if (is_array($model->roles)) {
                 foreach ($model->roles as $name) {
                     $item = $authManager->getRole($name);
                     $authManager->assign($item, $id);
                 }
             }
             //权限
             $roles = ArrayHelper::merge($model->permissions, $model->app);
             if (is_array($roles)) {
                 foreach ($roles as $name) {
                     $item = $authManager->getPermission($name);
                     $authManager->assign($item, $id);
                 }
             }
         } catch (\Exception $e) {
             Yii::$app->session->setFlash('fail', $e->getMessage());
             $this->refresh();
             Yii::$app->end();
         }
         Yii::$app->session->setFlash('success', '授权成功');
         $this->redirect(['index']);
     }
     $roles = $authManager->getRoles();
     $roles = ArrayHelper::map($roles, 'name', 'name');
     foreach ($authManager->getPermissions() as $name => $role) {
         if ($role->name[0] == '/') {
             $permissions[$name] = $role->description;
         } elseif (substr($role->name, 0, 3) == 'app') {
             $app[$name] = $role->description;
         }
     }
     foreach ($authManager->getAssignments($id) as $name => $item) {
         if ($name[0] == '/') {
             $model->permissions[$authManager->getPermission($name)->description] = $name;
         } elseif (substr($name, 0, 3) == 'app') {
             $model->app[$name] = $name;
         } else {
             $model->roles[$name] = $name;
         }
     }
     $permissions = Tools::serializeRoutes($permissions);
     return $this->render('view', ['model' => $model, 'roles' => $roles, 'permissions' => $permissions, 'app' => $app]);
 }
コード例 #2
0
 public function actionView($id)
 {
     $model = new AuthPermissionForm();
     $model->setScenario('auth');
     $result = ['Platforms' => [], 'App' => [], 'Permissions' => [], 'Routes' => []];
     $authManager = Yii::$app->authManager;
     $parent = $authManager->getPermission($id);
     if ($model->load(Yii::$app->request->post()) && $model->validate()) {
         $authManager->removeChildren($parent);
         try {
             if (is_array($model->permissions)) {
                 foreach ($model->permissions as $item) {
                     if ($item == $id) {
                         continue;
                     }
                     $child = $authManager->getPermission($item);
                     $authManager->addChild($parent, $child);
                 }
             }
             if (is_array($model->routes)) {
                 foreach ($model->routes as $item) {
                     $child = $authManager->getPermission($item);
                     $authManager->addChild($parent, $child);
                 }
             }
             if (is_array($model->app)) {
                 foreach ($model->app as $item) {
                     $child = $authManager->getPermission($item);
                     $authManager->addChild($parent, $child);
                 }
             }
             if (is_array($model->platforms)) {
                 foreach ($model->platforms as $item) {
                     $child = $authManager->getPermission($item);
                     $authManager->addChild($parent, $child);
                 }
             }
         } catch (\Exception $e) {
             Yii::$app->session->setFlash('fail', $e->getMessage());
             $this->refresh();
             Yii::$app->end();
         }
         Yii::$app->session->setFlash('success', '授权成功');
         $this->redirect(['index']);
     }
     foreach ($authManager->getPermissions() as $name => $role) {
         if ($name === $id) {
             continue;
         }
         if (empty($term) or strpos($name, $term) !== false) {
             if (substr($name, 0, 3) === 'app') {
                 $result['App'][$name] = $role->description;
             } elseif ($name[0] === '/') {
                 $result['Routes'][$name] = $role->description;
             } elseif (substr($name, 0, 8) === 'platform') {
                 $result['Platforms'][$name] = $role->description;
             } else {
                 $result['Permissions'][$name] = $role->description;
             }
         }
     }
     foreach ($authManager->getChildren($id) as $name => $item) {
         if (substr($name, 0, 3) === 'app') {
             $model->app[$name] = $name;
         } elseif ($name[0] === '/') {
             $model->routes[$name] = $name;
         } elseif (substr($name, 0, 8) === 'platform') {
             $model->platforms[$name] = $name;
         } else {
             $model->permissions = $name;
         }
     }
     $routes = Tools::serializeRoutes($result['Routes']);
     return $this->render('view', ['model' => $model, 'routes' => $routes, 'permissions' => $result['Permissions'], 'app' => $result['App'], 'platforms' => $result['Platforms']]);
 }
コード例 #3
0
 public function actionView($id, $term = '')
 {
     $model = new RoleAuthForm();
     $model->roles = [$id => $id];
     $model->setScenario('auth');
     if ($model->load(Yii::$app->request->post()) && $model->validate()) {
         foreach ($model->getAttributes() as $key => $value) {
             if (empty($value)) {
                 $model->{$key} = [];
             }
         }
         $roles = ArrayHelper::merge($model->roles, $model->routes, $model->permissions, $model->app, $model->platforms);
         $manager = Yii::$app->getAuthManager();
         $parent = $manager->getRole($id);
         $manager->removeChildren($parent);
         foreach ($roles as $role) {
             if ($role == $id) {
                 continue;
             }
             $child = $manager->getRole($role);
             $child = $child ?: $manager->getPermission($role);
             $manager->addChild($parent, $child);
         }
         Yii::$app->session->setFlash('success', "修改 {$id} 权限成功");
         $this->redirect(['index']);
     }
     $result = ['Roles' => [], 'Permissions' => [], 'Routes' => [], 'App' => [], 'Platforms' => []];
     $authManager = Yii::$app->authManager;
     $children = array_keys($authManager->getChildren($id));
     if (empty($children)) {
         throw new ErrorException('cannot find id ' . $id);
     }
     $children[] = $id;
     foreach ($authManager->getRoles() as $name => $role) {
         if (empty($term) or strpos($name, $term) !== false) {
             $result['Roles'][$name] = $name;
             //角色权限
         }
     }
     foreach ($authManager->getPermissions() as $name => $role) {
         if (empty($term) or strpos($name, $term) !== false) {
             if (substr($name, 0, 3) === 'app') {
                 //游戏权限
                 $result['App'][$name] = $role->description;
             } elseif ($name[0] === '/') {
                 //路由权限
                 $result['Routes'][$name] = $role->description;
             } elseif (substr($name, 0, 8) === 'platform') {
                 //地区权限
                 $result['Platforms'][$name] = $role->description;
             } else {
                 //权限组
                 $result['Permissions'][$name] = $role->description;
             }
         }
     }
     foreach ($authManager->getChildren($id) as $name => $child) {
         if (empty($term) or strpos($name, $term) !== false) {
             if ($child->type == Item::TYPE_ROLE) {
                 $model->roles[$name] = $name;
             } else {
                 if (substr($name, 0, 3) === 'app') {
                     $model->app[$name] = $name;
                 } elseif ($name[0] === '/') {
                     $model->routes[$name] = $name;
                 } elseif (substr($name, 0, 8) === 'platform') {
                     $model->platforms[$name] = $name;
                 } else {
                     $model->permissions = $name;
                 }
             }
         }
     }
     $routes = Tools::serializeRoutes($result['Routes']);
     return $this->render('view', ['result' => $result, 'model' => $model, 'routes' => $routes]);
 }