|
|
@@ -0,0 +1,304 @@
|
|
|
+<?php
|
|
|
+// +----------------------------------------------------------------------
|
|
|
+// | LARAVEL8.0 框架 [ LARAVEL ][ RXThinkCMF ]
|
|
|
+// +----------------------------------------------------------------------
|
|
|
+// | 版权所有 2017~2021 LARAVEL研发中心
|
|
|
+// +----------------------------------------------------------------------
|
|
|
+// | 官方网站: http://www.laravel.cn
|
|
|
+// +----------------------------------------------------------------------
|
|
|
+// | Author: laravel开发员 <laravel.qq.com>
|
|
|
+// +----------------------------------------------------------------------
|
|
|
+
|
|
|
+namespace App\Services\Common;
|
|
|
+
|
|
|
+
|
|
|
+use App\Models\MenuModel;
|
|
|
+use App\Services\BaseService;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 菜单管理-服务类
|
|
|
+ * @author laravel开发员
|
|
|
+ * @since 2020/11/10
|
|
|
+ * Class MenuService
|
|
|
+ * @package App\Services\Common
|
|
|
+ */
|
|
|
+class MenuService extends BaseService
|
|
|
+{
|
|
|
+ /**
|
|
|
+ * 构造函数
|
|
|
+ * @author laravel开发员
|
|
|
+ * @since 2020/11/11
|
|
|
+ * MenuService constructor.
|
|
|
+ */
|
|
|
+ public function __construct()
|
|
|
+ {
|
|
|
+ $this->model = new MenuModel();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取数据列表
|
|
|
+ * @return array
|
|
|
+ * @since 2020/11/11
|
|
|
+ * @author laravel开发员
|
|
|
+ */
|
|
|
+ public function getList()
|
|
|
+ {
|
|
|
+ $param = request()->all();
|
|
|
+
|
|
|
+ // 查询条件
|
|
|
+ $map = [];
|
|
|
+ // 上级ID
|
|
|
+ $pid = intval(getter($param, 'pid', 0));
|
|
|
+ if (!$pid) {
|
|
|
+ $map[] = ['pid', '=', 0];
|
|
|
+ } else {
|
|
|
+ $map[] = ['pid', '=', $pid];
|
|
|
+ }
|
|
|
+
|
|
|
+ // 菜单标题
|
|
|
+ $title = getter($param, "title");
|
|
|
+ if ($title) {
|
|
|
+ $map[] = ['title', 'like', "%{$title}%"];
|
|
|
+ }
|
|
|
+ $list = $this->model->getList($map, [['sort', 'asc']]);
|
|
|
+ if (!empty($list)) {
|
|
|
+ foreach ($list as &$val) {
|
|
|
+ if ($val['type'] == 0) {
|
|
|
+ $val['hasChildren'] = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return message("操作成功", true, $list);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取菜单详情
|
|
|
+ * @return array
|
|
|
+ * @since 2021/4/10
|
|
|
+ * @author laravel开发员
|
|
|
+ */
|
|
|
+ public function info()
|
|
|
+ {
|
|
|
+ // 记录ID
|
|
|
+ $id = request()->input("id", 0);
|
|
|
+ $info = [];
|
|
|
+ if ($id) {
|
|
|
+ $info = $this->model->getInfo($id);
|
|
|
+ }
|
|
|
+ // 获取权限节点
|
|
|
+ $checkedList = array();
|
|
|
+ if ($info['type'] == 0) {
|
|
|
+ $permissionList = $this->model
|
|
|
+ ->select("sort")
|
|
|
+ ->where("pid", "=", $info['id'])
|
|
|
+ ->where("mark", "=", 1)
|
|
|
+ ->get()
|
|
|
+ ->toArray();
|
|
|
+ if (is_array($permissionList)) {
|
|
|
+ $checkedList = array_key_value($permissionList, "sort");
|
|
|
+ }
|
|
|
+ $info['checkedList'] = $checkedList;
|
|
|
+ }
|
|
|
+ return message(MESSAGE_OK, true, $info);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 添加或编辑
|
|
|
+ * @return array
|
|
|
+ * @since 2021/4/10
|
|
|
+ * @author laravel开发员
|
|
|
+ */
|
|
|
+ public function edit()
|
|
|
+ {
|
|
|
+ // 参数
|
|
|
+ $param = request()->all();
|
|
|
+ // 权限节点
|
|
|
+ $checkedList = isset($param['checkedList']) ? $param['checkedList'] : array();
|
|
|
+ unset($param['checkedList']);
|
|
|
+ // 保存数据
|
|
|
+ $result = $this->model->edit($param);
|
|
|
+ if (!$result) {
|
|
|
+ return message("操作失败", false);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 设置权限节点
|
|
|
+ if ($param['type'] == 0 && !empty($param['path']) && !empty($checkedList)) {
|
|
|
+ $item = explode("/", $param['path']);
|
|
|
+ // 模块名称
|
|
|
+ $moduleName = $item[count($item) - 1];
|
|
|
+ // 模块标题
|
|
|
+ $moduleTitle = str_replace("管理", "", $param['title']);
|
|
|
+ // 遍历权限节点
|
|
|
+ foreach ($checkedList as $val) {
|
|
|
+ $data = [];
|
|
|
+ $data['pid'] = $result;
|
|
|
+ $data['type'] = 1;
|
|
|
+ $data['status'] = 1;
|
|
|
+ $data['sort'] = intval($val);
|
|
|
+ $data['target'] = $param['target'];
|
|
|
+
|
|
|
+ // 判断当前节点是否已存在
|
|
|
+ $permissionInfo = $this->model
|
|
|
+ ->where("pid", "=", $result)
|
|
|
+ ->where("type", "=", 1)
|
|
|
+ ->where("sort", "=", $val)
|
|
|
+ ->where("mark", "=", 1)
|
|
|
+ ->first();
|
|
|
+ if ($permissionInfo) {
|
|
|
+ $data['id'] = $permissionInfo['id'];
|
|
|
+ }
|
|
|
+ if ($val == 1) {
|
|
|
+ // 查询
|
|
|
+ $data['title'] = "查询" . $moduleTitle;
|
|
|
+ $data['permission'] = "sys:{$moduleName}:index";
|
|
|
+ } else if ($val == 5) {
|
|
|
+ // 添加
|
|
|
+ $data['title'] = "添加" . $moduleTitle;
|
|
|
+ $data['permission'] = "sys:{$moduleName}:add";
|
|
|
+ } else if ($val == 10) {
|
|
|
+ // 修改
|
|
|
+ $data['title'] = "修改" . $moduleTitle;
|
|
|
+ $data['permission'] = "sys:{$moduleName}:edit";
|
|
|
+ } else if ($val == 15) {
|
|
|
+ // 删除
|
|
|
+ $data['title'] = "删除" . $moduleTitle;
|
|
|
+ $data['permission'] = "sys:{$moduleName}:delete";
|
|
|
+ } else if ($val == 20) {
|
|
|
+ // 状态
|
|
|
+ $data['title'] = "设置状态";
|
|
|
+ $data['permission'] = "sys:{$moduleName}:status";
|
|
|
+ } else if ($val == 25) {
|
|
|
+ // 批量删除
|
|
|
+ $data['title'] = "批量删除";
|
|
|
+ $data['permission'] = "sys:{$moduleName}:dall";
|
|
|
+ } else if ($val == 30) {
|
|
|
+ // 全部展开
|
|
|
+ $data['title'] = "全部展开";
|
|
|
+ $data['permission'] = "sys:{$moduleName}:expand";
|
|
|
+ } else if ($val == 35) {
|
|
|
+ // 全部折叠
|
|
|
+ $data['title'] = "全部折叠";
|
|
|
+ $data['permission'] = "sys:{$moduleName}:collapse";
|
|
|
+ } else if ($val == 40) {
|
|
|
+ // 添加子级
|
|
|
+ $data['title'] = "添加子级";
|
|
|
+ $data['permission'] = "sys:{$moduleName}:addz";
|
|
|
+ } else if ($val == 45) {
|
|
|
+ // 导出数据
|
|
|
+ $data['title'] = "导出数据";
|
|
|
+ $data['permission'] = "sys:{$moduleName}:export";
|
|
|
+ } else if ($val == 50) {
|
|
|
+ // 导入数据
|
|
|
+ $data['title'] = "导入数据";
|
|
|
+ $data['permission'] = "sys:{$moduleName}:import";
|
|
|
+ } else if ($val == 55) {
|
|
|
+ // 分配权限
|
|
|
+ $data['title'] = "分配权限";
|
|
|
+ $data['permission'] = "sys:{$moduleName}:permission";
|
|
|
+ }
|
|
|
+ if (empty($data['title'])) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ $menuModel = new MenuModel();
|
|
|
+ $menuModel->edit($data);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return message();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取权限菜单列表
|
|
|
+ * @param $userId
|
|
|
+ * @return array
|
|
|
+ * @author laravel开发员
|
|
|
+ * @since 2020/11/11
|
|
|
+ */
|
|
|
+ public function getPermissionList($userId)
|
|
|
+ {
|
|
|
+ $list = [];
|
|
|
+ if ($userId == 1) {
|
|
|
+ // 管理员拥有全部权限
|
|
|
+ $list = $this->model->getChilds(0);
|
|
|
+ } else {
|
|
|
+ // 其他角色
|
|
|
+ $list = $this->getPermissionMenu($userId, 0);
|
|
|
+ }
|
|
|
+ return message("操作成功", true, $list);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取菜单权限列表
|
|
|
+ * @param $userId 用户ID
|
|
|
+ * @param $pid 上级ID
|
|
|
+ * @return mixed
|
|
|
+ * @since 2020/11/14
|
|
|
+ * @author laravel开发员
|
|
|
+ */
|
|
|
+ public function getPermissionMenu($userId, $pid = 0)
|
|
|
+ {
|
|
|
+ $menuModel = new MenuModel();
|
|
|
+ $menuList = $menuModel::from("menu as m")
|
|
|
+ ->select('m.*')
|
|
|
+ ->join('role_menu as rm', 'rm.menu_id', '=', 'm.id')
|
|
|
+ ->join('user_role as ur', 'ur.role_id', '=', 'rm.role_id')
|
|
|
+ ->distinct(true)
|
|
|
+ ->where('ur.user_id', '=', $userId)
|
|
|
+ ->where('m.type', '=', 0)
|
|
|
+ ->where('m.pid', '=', $pid)
|
|
|
+ ->where('m.status', '=', 1)
|
|
|
+ ->where('m.mark', '=', 1)
|
|
|
+ ->orderBy('m.pid')
|
|
|
+ ->orderBy('m.sort')
|
|
|
+ ->get()->toArray();
|
|
|
+ if (!empty($menuList)) {
|
|
|
+ foreach ($menuList as &$val) {
|
|
|
+ $childList = $this->getPermissionMenu($userId, $val['id']);
|
|
|
+ if (is_array($childList) && !empty($childList)) {
|
|
|
+ $val['children'] = $childList;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return $menuList;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取权限节点
|
|
|
+ * @param $userId 用户ID
|
|
|
+ * @return array
|
|
|
+ * @author laravel开发员
|
|
|
+ * @since 2021/4/9
|
|
|
+ */
|
|
|
+ public function getPermissionsList($userId)
|
|
|
+ {
|
|
|
+ $list = [];
|
|
|
+ if ($userId == 1) {
|
|
|
+ // 管理员拥有全部权限
|
|
|
+ $permissionList = $this->model
|
|
|
+ ->select("permission")
|
|
|
+ ->where("type", "=", 1)
|
|
|
+ ->where("mark", "=", 1)
|
|
|
+ ->get()
|
|
|
+ ->toArray();
|
|
|
+ $list = empty($permissionList) ? array() : array_key_value($permissionList, 'permission');
|
|
|
+ } else {
|
|
|
+ // 其他角色
|
|
|
+ $menuModel = new MenuModel();
|
|
|
+ $permissionList = $menuModel::from("menu as m")
|
|
|
+ ->select('m.permission')
|
|
|
+ ->join('role_menu as rm', 'rm.menu_id', '=', 'm.id')
|
|
|
+ ->join('user_role as ur', 'ur.role_id', '=', 'rm.role_id')
|
|
|
+ ->distinct(true)
|
|
|
+ ->where('ur.user_id', '=', $userId)
|
|
|
+ ->where('m.type', '=', 1)
|
|
|
+ ->where('m.status', '=', 1)
|
|
|
+ ->where('m.mark', '=', 1)
|
|
|
+ ->orderBy('m.pid')
|
|
|
+ ->orderBy('m.sort')
|
|
|
+ ->get()
|
|
|
+ ->toArray();
|
|
|
+ $list = empty($permissionList) ? array() : array_key_value($permissionList, 'permission');
|
|
|
+ }
|
|
|
+ return array_filter(array_values($list));
|
|
|
+ }
|
|
|
+
|
|
|
+}
|