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