public function actionIndex()
 {
     $this->view->title = $this->getConfig('system.name');
     $user = [];
     $urls = [];
     if (!Yii::$app->user->isGuest) {
         $groupNames = $this->identity->getGroupNames();
         $user = ['username' => $this->identity->username, 'nickname' => $this->identity->nickname, 'isSuper' => $this->identity->is_super, 'groupName' => join(',', $groupNames)];
         $urls = DpAdminMenu::getUrlsByParentId($this->identity->is_super, $this->menuIdList, 0);
     }
     return $this->renderPartial('index', ['isGuest' => Yii::$app->user->isGuest, 'loading_text' => $this->getConfig('system.loadingText'), 'config' => $this->config, 'user' => $user, 'urls' => $urls]);
 }
 public function actionIndex()
 {
     $this->view->title = $this->getConfig('system.name');
     $user = [];
     $urls = ['admin.public.login' => Url::toRoute('/admin/public/login'), 'admin.public.logout' => Url::toRoute('/admin/public/logout'), 'admin.common.tree' => Url::toRoute('/admin/common/tree'), 'admin.common.urls' => Url::toRoute('/admin/common/urls')];
     if (!Yii::$app->user->isGuest) {
         $groupNames = $this->identity->getGroupNames();
         $user = ['username' => $this->identity->username, 'nickname' => $this->identity->nickname, 'isSuper' => $this->identity->is_super, 'groupName' => join(',', $groupNames)];
         $urls = array_merge($urls, ['admin.config.save' => Url::toRoute('/admin/config/save'), 'admin.config.options' => Url::toRoute('/admin/config/options')], DpAdminMenu::getUrlsByParentId($this->identity->is_super, $this->menuIdList, 0));
     }
     return $this->renderPartial('index', ['isGuest' => Yii::$app->user->isGuest, 'loading_text' => $this->getConfig('system.loading_text'), 'config' => $this->config, 'user' => $user, 'urls' => $urls, 'extJs' => $this->extJs]);
 }
 /**
  * 获取指定用户的所有菜单id记录
  *
  * @param int $userId 用户id
  * @return array
  */
 public static function getAllMenuIdArrByUserId($userId)
 {
     $data = static::find()->findByUserId($userId)->asArray()->all();
     $menuIdArr = [];
     foreach ($data as $item) {
         $menu = DpAdminMenu::find()->findByMenuId($item['menu_id'])->asArray()->one();
         if ($menu) {
             $menuIdArr[] = $item['menu_id'];
         }
     }
     return $menuIdArr;
 }
Beispiel #4
0
 public function run()
 {
     /* @var $controller \wsl\rbac\base\Controller */
     /* @var $identity \wsl\rbac\models\DpAdminUser */
     $controller = $this->controller;
     $view = Yii::$app->getView();
     $identity = Yii::$app->user->identity;
     $view->title = $controller->getConfig('system.name');
     $user = [];
     $urls = [];
     if (!Yii::$app->user->isGuest) {
         $groupNames = $identity->getGroupNames();
         $user = ['username' => $identity->username, 'nickname' => $identity->nickname, 'isSuper' => $identity->is_super, 'groupName' => join(',', $groupNames)];
         $urls = DpAdminMenu::getUrlsByParentId($identity->is_super, $controller->menuIdList, 0);
     }
     $params = ['isGuest' => Yii::$app->user->isGuest, 'loadingText' => $controller->getConfig('system.loadingText'), 'config' => $controller->config, 'user' => $user, 'urls' => $urls];
     $viewPath = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'views' . DIRECTORY_SEPARATOR;
     return $view->renderFile($viewPath . 'index.php', $params, $this->controller);
 }
 /**
  * 保存数据
  *
  * @return array
  */
 public function actionSave()
 {
     $group_id = \Yii::$app->request->post('group_id');
     $menu_ids = \Yii::$app->request->post('menu_ids');
     $name = \Yii::$app->request->post('name');
     $is_system = \Yii::$app->request->post('is_system');
     $note = \Yii::$app->request->post('note');
     $status = \Yii::$app->request->post('status');
     $saveData = ['name' => $name, 'is_system' => $is_system, 'note' => $note, 'status' => $status];
     if ($group_id) {
         $obj = DpAdminGroup::find()->findByGroupId($group_id)->one();
         if (!$obj) {
             return $this->renderError('保存失败,记录不存在!');
         }
     } else {
         $obj = new DpAdminGroup();
     }
     $obj->setAttributes($saveData);
     if (!$obj->save()) {
         foreach ($obj->getErrors() as $error) {
             foreach ($error as $message) {
                 return ['success' => false, 'msg' => $message];
             }
         }
     }
     // 用户组关联的菜单权限更新
     DpAdminGroupMenuRelation::deleteByGroupId($obj->group_id);
     if ($menu_ids) {
         $menuIdArr = array_filter(StringHelper::explode($menu_ids, ',', true, true), function ($menuId) {
             return DpAdminMenu::getByMenuId($menuId);
         });
         if ($menuIdArr) {
             foreach ($menuIdArr as $menuId) {
                 $linkObj = new DpAdminGroupMenuRelation();
                 $linkObj->setAttributes(['group_id' => $obj->group_id, 'menu_id' => $menuId]);
                 $linkObj->save();
             }
         }
     }
     return $this->renderSuccess('保存成功');
 }
 /**
  * @return \yii\db\ActiveQuery
  */
 public function getMenus()
 {
     return $this->hasMany(DpAdminMenu::className(), ['menu_id' => 'menu_id'])->viaTable('{{%admin_user_menu_relation}}', ['user_id' => 'user_id']);
 }
 /**
  * 保存数据
  *
  * @return array
  */
 public function actionSave()
 {
     $user_id = \Yii::$app->request->post('user_id');
     $menu_ids = \Yii::$app->request->post('menu_ids');
     $username = \Yii::$app->request->post('username');
     $nickname = \Yii::$app->request->post('nickname');
     $source_password = \Yii::$app->request->post('source_password');
     $group_ids = (array) \Yii::$app->request->post('group_ids');
     $is_group_access = \Yii::$app->request->post('is_group_access');
     $is_user_access = \Yii::$app->request->post('is_user_access');
     $is_system = \Yii::$app->request->post('is_system');
     $note = \Yii::$app->request->post('note');
     $status = \Yii::$app->request->post('status');
     $groupIdsStr = '';
     if ($group_ids) {
         $groupIdsStr = join(',', array_filter($group_ids, function ($groupId) {
             return DpAdminGroup::getByGroupId($groupId);
         }));
     }
     $saveData = ['username' => $username, 'nickname' => $nickname, 'source_password' => $source_password, 'group_ids' => $groupIdsStr, 'is_group_access' => $is_group_access, 'is_user_access' => $is_user_access, 'is_system' => $is_system, 'note' => $note, 'status' => $status];
     if ($user_id) {
         $obj = DpAdminUser::find()->where(['user_id' => $user_id])->one();
         if (!$obj) {
             return $this->renderError('保存失败,记录不存在!');
         }
     } else {
         $obj = new DpAdminUser();
     }
     $obj->setAttributes($saveData);
     if (!$obj->save()) {
         foreach ($obj->getErrors() as $error) {
             foreach ($error as $message) {
                 return ['success' => false, 'msg' => $message];
             }
         }
     }
     // 用户关联的菜单权限更新
     DpAdminUserMenuRelation::deleteByUserId($obj->user_id);
     if ($menu_ids) {
         $menuIdArr = array_filter(StringHelper::explode($menu_ids, ',', true, true), function ($menuId) {
             return DpAdminMenu::getByMenuId($menuId);
         });
         if ($menuIdArr) {
             foreach ($menuIdArr as $menuId) {
                 $linkObj = new DpAdminUserMenuRelation();
                 $linkObj->setAttributes(['user_id' => $obj->user_id, 'menu_id' => $menuId]);
                 $linkObj->save();
             }
         }
     }
     return $this->renderSuccess('保存成功');
 }
 /**
  * 更新状态
  *
  * @return array
  */
 public function actionUpdateStatus()
 {
     $ids = Yii::$app->request->post('ids');
     $status = intval(Yii::$app->request->post('status'));
     if ($status != 0) {
         $status = 1;
     }
     foreach (StringHelper::explode($ids, ',', true, true) as $id) {
         $obj = DpAdminMenu::find()->findByMenuId($id)->one();
         if ($obj) {
             $obj->status = $status;
             $obj->save();
         }
     }
     return $this->renderSuccess('状态更新成功');
 }
 /**
  * 保存数据
  *
  * @return array
  */
 public function actionSave()
 {
     $url_id = \Yii::$app->request->post('url_id');
     $menu_id = \Yii::$app->request->post('menu_id');
     $name = \Yii::$app->request->post('name');
     $alias = \Yii::$app->request->post('alias');
     $route = \Yii::$app->request->post('route');
     $method = \Yii::$app->request->post('method');
     $host = \Yii::$app->request->post('host');
     $enable_rule = \Yii::$app->request->post('enable_rule');
     $note = \Yii::$app->request->post('note');
     $status = \Yii::$app->request->post('status');
     if (!$alias) {
         // 自动生成别名
         if (strpos($route, '/') === 0) {
             $tempRoute = substr($route, 1, strlen($route));
         } else {
             $tempRoute = $route;
         }
         $alias = join('.', StringHelper::explode($tempRoute, '/', true, true));
     }
     $methodStr = '';
     if (is_array($method)) {
         $method = array_filter($method, function ($value) {
             return in_array($value, ['GET', 'HEAD', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS']);
         });
         $methodStr = join(',', $method);
     }
     $saveData = ['name' => $name, 'alias' => $alias, 'route' => $route, 'method' => $methodStr, 'host' => $host, 'enable_rule' => $enable_rule, 'note' => $note, 'status' => $status];
     $obj = null;
     if ($url_id) {
         $obj = DpAdminMenuUrl::find()->findByUrlId($url_id)->one();
         if (!$obj) {
             return $this->renderError('保存失败,记录不存在!');
         }
     } else {
         if ($alias) {
             $obj = DpAdminMenuUrl::find()->findByAlias($alias)->one();
         }
         if (!$obj) {
             $obj = new DpAdminMenuUrl();
         }
     }
     $obj->setAttributes($saveData);
     if (!$obj->save()) {
         foreach ($obj->getErrors() as $error) {
             foreach ($error as $message) {
                 return ['success' => false, 'msg' => $message];
             }
         }
     }
     if ($menu_id) {
         if (!DpAdminMenu::getByMenuId($menu_id)) {
             return $this->renderError('菜单不存在');
         } else {
             $linkObj = new DpAdminMenuUrlRelation();
             $linkObj->setAttributes(['menu_id' => $menu_id, 'url_id' => $obj->url_id, 'status' => DpAdminMenuUrlRelation::STATUS_ACTIVE]);
             if (!$linkObj->save()) {
                 foreach ($obj->getErrors() as $error) {
                     foreach ($error as $message) {
                         return ['success' => false, 'msg' => $message];
                     }
                 }
             }
         }
     }
     return $this->renderSuccess('保存成功');
 }
 /**
  * 更新排序
  *
  * @return bool
  */
 public function updateSort()
 {
     if ($this->validate()) {
         $srcMenuModels = DpAdminMenu::find()->andFilterWhere(['in', 'menu_id', $this->menu_ids])->orderBy([new Expression('field(menu_id, ' . join(',', $this->menu_ids) . ')')])->all();
         $targetMenuModel = DpAdminMenu::find()->findByMenuId($this->target_menu_id)->one();
         $menuModels = DpAdminMenu::find()->findByParentId($targetMenuModel->parent_id)->defaultOrder()->all();
         $srcMenuIds = ArrayHelper::getColumn($srcMenuModels, 'menu_id');
         if ($srcMenuModels && $targetMenuModel && $menuModels) {
             if (static::POSITION_BEFORE == $this->position) {
                 $displayOrder = -1;
                 $transaction = Yii::$app->db->beginTransaction();
                 foreach ($menuModels as $itemMenuModel) {
                     if (in_array($itemMenuModel->menu_id, $srcMenuIds)) {
                         continue;
                     }
                     $displayOrder++;
                     if ($targetMenuModel->menu_id == $itemMenuModel->menu_id) {
                         // before
                         foreach ($srcMenuModels as $itemSrcMenuMode) {
                             $itemSrcMenuMode->display_order = $displayOrder;
                             $itemSrcMenuMode->parent_id = $targetMenuModel->parent_id;
                             if (!$itemSrcMenuMode->save()) {
                                 $transaction->rollBack();
                                 $this->addErrors($itemSrcMenuMode->errors);
                                 return false;
                             }
                             $displayOrder++;
                         }
                         // target
                         $targetMenuModel->display_order = $displayOrder;
                         if (!$targetMenuModel->save()) {
                             $transaction->rollBack();
                             $this->addErrors($targetMenuModel->errors);
                             return false;
                         }
                         continue;
                     }
                     $itemMenuModel->display_order = $displayOrder;
                     if (!$itemMenuModel->save()) {
                         $transaction->rollBack();
                         $this->addErrors($itemMenuModel->errors);
                         return false;
                     }
                 }
                 $transaction->commit();
                 return true;
             } elseif (static::POSITION_AFTER == $this->position) {
                 $displayOrder = -1;
                 $transaction = Yii::$app->db->beginTransaction();
                 foreach ($menuModels as $itemMenuModel) {
                     if (in_array($itemMenuModel->menu_id, $srcMenuIds)) {
                         continue;
                     }
                     $displayOrder++;
                     if ($targetMenuModel->menu_id == $itemMenuModel->menu_id) {
                         // target
                         $targetMenuModel->display_order = $displayOrder;
                         if (!$targetMenuModel->save()) {
                             $transaction->rollBack();
                             $this->addErrors($targetMenuModel->errors);
                             return false;
                         }
                         $displayOrder++;
                         // after
                         foreach ($srcMenuModels as $itemSrcMenuMode) {
                             $itemSrcMenuMode->display_order = $displayOrder;
                             $itemSrcMenuMode->parent_id = $targetMenuModel->parent_id;
                             if (!$itemSrcMenuMode->save()) {
                                 $transaction->rollBack();
                                 $this->addErrors($itemSrcMenuMode->errors);
                                 return false;
                             }
                             $displayOrder++;
                         }
                         continue;
                     }
                     $itemMenuModel->display_order = $displayOrder;
                     if (!$itemMenuModel->save()) {
                         $transaction->rollBack();
                         $this->addErrors($itemMenuModel->errors);
                         return false;
                     }
                 }
                 $transaction->commit();
                 return true;
             } elseif (static::POSITION_APPEND == $this->position) {
                 $menuModels = DpAdminMenu::find()->findByParentId($targetMenuModel->menu_id)->defaultOrder()->all();
                 if ($menuModels) {
                     // 将目标菜单设置成该目标元素下的最后一个元素
                     $targetParentMenuModels = DpAdminMenu::find()->findByParentId($targetMenuModel->menu_id)->defaultOrder()->all();
                     $targetMenuModel = array_pop($targetParentMenuModels);
                     $displayOrder = -1;
                     $transaction = Yii::$app->db->beginTransaction();
                     foreach ($menuModels as $itemMenuModel) {
                         if (in_array($itemMenuModel->menu_id, $srcMenuIds)) {
                             continue;
                         }
                         $displayOrder++;
                         if ($targetMenuModel->menu_id == $itemMenuModel->menu_id) {
                             // target
                             $targetMenuModel->display_order = $displayOrder;
                             if (!$targetMenuModel->save()) {
                                 $transaction->rollBack();
                                 $this->addErrors($targetMenuModel->errors);
                                 return false;
                             }
                             $displayOrder++;
                             // after
                             foreach ($srcMenuModels as $itemSrcMenuMode) {
                                 $itemSrcMenuMode->display_order = $displayOrder;
                                 $itemSrcMenuMode->parent_id = $targetMenuModel->parent_id;
                                 if (!$itemSrcMenuMode->save()) {
                                     $transaction->rollBack();
                                     $this->addErrors($itemSrcMenuMode->errors);
                                     return false;
                                 }
                                 $displayOrder++;
                             }
                             continue;
                         }
                         $itemMenuModel->display_order = $displayOrder;
                         if (!$itemMenuModel->save()) {
                             $transaction->rollBack();
                             $this->addErrors($itemMenuModel->errors);
                             return false;
                         }
                     }
                 } else {
                     $displayOrder = 0;
                     // 菜单没有节点时
                     $transaction = Yii::$app->db->beginTransaction();
                     foreach ($srcMenuModels as $itemSrcMenuMode) {
                         $itemSrcMenuMode->display_order = $displayOrder;
                         $itemSrcMenuMode->parent_id = $targetMenuModel->menu_id;
                         if (!$itemSrcMenuMode->save()) {
                             $transaction->rollBack();
                             $this->addErrors($itemSrcMenuMode->errors);
                             return false;
                         }
                         $displayOrder++;
                     }
                 }
                 $transaction->commit();
                 return true;
             }
         }
     }
     return false;
 }
 /**
  * 拖拽排序
  *
  * @return bool
  */
 public function dragSort()
 {
     if ($this->validate()) {
         $menuModel = DpAdminMenu::find()->findByMenuId($this->target_menu_id)->one();
         // 调整排序的菜单id
         $dropMenuIdArr = array_filter(StringHelper::explode($this->menu_ids, ',', true, true), function ($value) {
             return is_numeric($value) && DpAdminMenu::find()->findByMenuId($value)->exists();
         });
         // 调整排序菜单数量
         $dropCount = count($dropMenuIdArr);
         if (static::POSITION_BEFORE == $this->position) {
             // 节点之前
             $menuAllObj = DpAdminMenu::find()->findByParentId($menuModel->parent_id)->orderBy('display_order asc')->all();
             // 将要插入的菜单前面的排序向前移动
             // 插入的开始排序号
             $startOrder = $menuModel->display_order - 1;
             $otherStartOrder = $startOrder - $dropCount;
             foreach ($menuAllObj as $menuObj) {
                 if ($menuObj->menu_id == $menuModel->menu_id) {
                     break;
                 }
                 $menuObj->display_order = $otherStartOrder--;
                 $menuObj->save();
             }
             $dropStartOrder = $menuModel->display_order - $dropCount;
             foreach ($dropMenuIdArr as $menuId) {
                 $dropMenu = DpAdminMenu::find()->findByMenuId($menuId)->one();
                 if ($dropMenu) {
                     $dropMenu->parent_id = $menuModel->parent_id;
                     $dropMenu->display_order = $dropStartOrder++;
                     $dropMenu->save();
                 }
             }
             return true;
         } elseif (static::POSITION_AFTER == $this->position) {
             // 节点之后
             // 在菜单后插入
             $menuAllObj = DpAdminMenu::find()->findByParentId($menuModel->parent_id)->andWhere('menu_id not in (' . join(',', $dropMenuIdArr) . ')')->all();
             // 将要插入的菜单后面的排序向后移动
             // 插入的开始排序号
             $isStartOrder = false;
             $startOrder = $menuModel->display_order + 1;
             $otherStartOrder = $startOrder + $dropCount;
             foreach ($menuAllObj as $menuObj) {
                 if ($menuObj->menu_id == $menuModel->menu_id) {
                     $isStartOrder = true;
                     continue;
                 }
                 if (!$isStartOrder) {
                     continue;
                 }
                 $menuObj->display_order = $otherStartOrder++;
                 $menuObj->save();
             }
             foreach ($dropMenuIdArr as $menuId) {
                 $dropMenu = DpAdminMenu::find()->findByMenuId($menuId)->one();
                 if ($dropMenu) {
                     $dropMenu->parent_id = $menuModel->parent_id;
                     $dropMenu->display_order = $startOrder++;
                     $dropMenu->save();
                 }
             }
             return true;
         } elseif (static::POSITION_APPEND == $this->position) {
             // 节点内
             // 添加为子节点
             $maxDisplayOrder = DpAdminMenu::find()->findByParentId($menuModel->menu_id)->max('display_order');
             foreach ($dropMenuIdArr as $menuId) {
                 $dropMenu = DpAdminMenu::find()->findByMenuId($menuId)->one();
                 if ($dropMenu) {
                     $dropMenu->parent_id = $menuModel->menu_id;
                     $dropMenu->display_order = ++$maxDisplayOrder;
                     $dropMenu->save();
                 }
             }
             return true;
         }
     }
     return false;
 }
 /**
  * @inheritDoc
  */
 public function rules()
 {
     return [[['menu_ids', 'position', 'target_menu_id'], 'required'], [['menu_ids', 'position'], 'string'], [['target_menu_id'], 'integer'], [['target_menu_id'], 'exist', 'targetClass' => DpAdminMenu::className()]];
 }
 /**
  * 所有拥有权限的url别名对应url数据
  *
  * @return array
  */
 public function actionUrls()
 {
     $urls = DpAdminMenu::getUrlsByParentId($this->identity->is_super, $this->menuIdList, null);
     $urls = array_merge($urls, ['admin.public.login' => Url::toRoute('/admin/public/login'), 'admin.public.logout' => Url::toRoute('/admin/public/logout'), 'admin.common.tree' => Url::toRoute('/admin/common/tree'), 'admin.common.urls' => Url::toRoute('/admin/common/urls'), 'admin.config.save' => Url::toRoute('/admin/config/save'), 'admin.config.options' => Url::toRoute('/admin/config/options'), 'admin.group.save' => Url::toRoute('/admin/group/save'), 'admin.group.update-status' => Url::toRoute('/admin/group/update-status'), 'admin.group.del' => Url::toRoute('/admin/group/del'), 'admin.user.save' => Url::toRoute('/admin/user/save'), 'admin.user.update-status' => Url::toRoute('/admin/user/update-status'), 'admin.user.del' => Url::toRoute('/admin/user/del'), 'admin.menu.save' => Url::toRoute('/admin/menu/save'), 'admin.menu.update-status' => Url::toRoute('/admin/menu/update-status'), 'admin.menu.del' => Url::toRoute('/admin/menu/del'), 'admin.menu-url.save' => Url::toRoute('/admin/menu-url/save'), 'admin.menu-url.update-status' => Url::toRoute('/admin/menu-url/update-status'), 'admin.menu-url.del' => Url::toRoute('/admin/menu-url/del'), 'admin.menu-url-link.save' => Url::toRoute('/admin/menu-url-link/save'), 'admin.menu-url-link.update-status' => Url::toRoute('/admin/menu-url-link/update-status'), 'admin.menu-url-link.del' => Url::toRoute('/admin/menu-url-link/del'), 'admin.menu-url-rule.save' => Url::toRoute('/admin/menu-url-rule/save'), 'admin.menu-url-rule.update-status' => Url::toRoute('/admin/menu-url-rule/update-status'), 'admin.menu-url-rule.del' => Url::toRoute('/admin/menu-url-rule/del')], DpAdminMenu::getUrlsByParentId($this->identity->is_super, $this->menuIdList, null));
     return ['data' => $urls];
 }