diff --git a/ant-design-vue-jeecg/src/views/system/DataPermissionList.vue b/ant-design-vue-jeecg/src/views/system/DataPermissionList.vue index 59969eb..2a2b2c9 100644 --- a/ant-design-vue-jeecg/src/views/system/DataPermissionList.vue +++ b/ant-design-vue-jeecg/src/views/system/DataPermissionList.vue @@ -44,7 +44,7 @@ <a href="javascript:" @click="handleDetail(record)">详情</a> </a-menu-item> <a-menu-item v-has="'permission:addChildren'"> - <a href="javascript:" @click="handleAddSub(record)">添加下级</a> + <a href="javascript:" v-if="record.type === 0" @click="handleAddSub(record)">添加下级</a> </a-menu-item> <a-menu-item v-has="'permission:delete'"> <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)"> @@ -170,7 +170,7 @@ export default { handleAddSub(record) { this.$refs.modalForm.title = '添加子数据权限' this.$refs.modalForm.disableSubmit = false - this.$refs.modalForm.edit({ status: '1', permsType: '1', route: true, 'parentId': record.id, type: 1 }) + this.$refs.modalForm.edit({ status: '1', type: 1, parentId: record.id, perms: record.perms + ":" }) }, handleExpandedRowsChange(expandedRows) { this.expandedRowKeys = expandedRows @@ -191,7 +191,7 @@ export default { color = 'red' } return color - }, + } } } </script> diff --git a/ant-design-vue-jeecg/src/views/system/modules/DataPermissionModal.vue b/ant-design-vue-jeecg/src/views/system/modules/DataPermissionModal.vue index 6f05424..ccd590b 100644 --- a/ant-design-vue-jeecg/src/views/system/modules/DataPermissionModal.vue +++ b/ant-design-vue-jeecg/src/views/system/modules/DataPermissionModal.vue @@ -12,8 +12,8 @@ <a-form-model-item label="资源类型" :labelCol="labelCol" :wrapperCol="wrapperCol"> <a-radio-group v-model="model.type"> - <a-radio :value="0">标识</a-radio> - <a-radio :value="1">权限</a-radio> + <a-radio v-if="model.type === 0" :value="0">标识</a-radio> + <a-radio v-if="model.type === 1" :value="1">权限</a-radio> </a-radio-group> </a-form-model-item> @@ -118,7 +118,7 @@ export default { validatorRules: function() { return { name: [{ required: true, message: '请输入权限标题!' }], - perms: [{ required: false, message: '请输入授权标识!' }, { validator: this.validatePerms }] + perms: [{ required: true, message: '请输入授权标识!' }, { validator: this.validatePerms }] } } }, @@ -146,6 +146,7 @@ export default { edit(record) { this.resetScreenSize() // 调用此方法,根据屏幕宽度自适应调整抽屉的宽度 this.model = { ...record } + debugger; if (this.model.type === 0) { // 如果资源类型是标识,则没有状态 this.model.status = null @@ -164,7 +165,7 @@ export default { // 触发表单验证 this.$refs.form.validate(valid => { if (valid) { - if ((this.model.type === 1 || this.model.type === 2) && !this.model.parentId) { + if (this.model.type === 1 && !this.model.parentId) { that.validateStatus = 'error' that.$message.error('请检查你填的类型以及信息是否正确!') return @@ -201,7 +202,7 @@ export default { if (value && value.length > 0) { //校验授权标识是否存在 let params = { - tableName: 'sys_permission', + tableName: 'sys_data_permission', fieldName: 'perms', fieldVal: value, dataId: this.model.id diff --git a/ant-design-vue-jeecg/src/views/system/modules/UserRoleModal.vue b/ant-design-vue-jeecg/src/views/system/modules/UserRoleModal.vue index 29326e3..b6ac4cc 100644 --- a/ant-design-vue-jeecg/src/views/system/modules/UserRoleModal.vue +++ b/ant-design-vue-jeecg/src/views/system/modules/UserRoleModal.vue @@ -38,7 +38,6 @@ :checkedKeys="dataCheckedKeys" :treeData="dataTreeData" @expand="dataOnExpand" - @select="dataOnTreeNodeSelect" :selectedKeys="dataSelectedKeys" :expandedKeys="dataExpandedKeys" :checkStrictly="dataCheckStrictly"> @@ -80,7 +79,7 @@ </template> <script> -import { queryDataTreeListForRole, queryRoleDataPermission, queryRolePermission, queryTreeListForRole, saveRolePermission } from '@/api/api' +import { queryRolePermission, queryTreeListForRole, saveRolePermission } from '@/api/api' import RoleDataruleModal from './RoleDataruleModal.vue' export default { @@ -122,12 +121,6 @@ export default { } this.$refs.datarule.show(this.selectedKeys[0], this.roleId) }, - dataOnTreeNodeSelect(id) { - if (id && id.length > 0) { - this.dataSelectedKeys = id - } - this.$refs.datarule.show(this.dataSelectedKeys[0], this.roleId) - }, onCheck(o) { if (this.checkStrictly) { this.checkedKeys = o.checked diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/system/controller/SysDataPermissionController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/system/controller/SysDataPermissionController.java index c58dc66..d537ba8 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/system/controller/SysDataPermissionController.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/system/controller/SysDataPermissionController.java @@ -1,24 +1,26 @@ package org.jeecg.modules.system.controller; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.jeecg.common.api.vo.Result; import org.jeecg.common.constant.CommonConstant; -import org.jeecg.common.constant.enums.RoleIndexConfigEnum; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.common.util.oConvertUtils; import org.jeecg.config.JeeccgBaseConfig; -import org.jeecg.modules.system.entity.*; +import org.jeecg.modules.system.entity.SysDataPermission; +import org.jeecg.modules.system.entity.SysRoleDataPermission; +import org.jeecg.modules.system.entity.SysRolePermission; import org.jeecg.modules.system.model.SysDataPermissionTree; import org.jeecg.modules.system.model.TreeModel; import org.jeecg.modules.system.service.*; -import org.jeecg.modules.system.util.DataPermissionDataUtil; +import org.jeecg.utils.constant.QuantityConstant; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -27,7 +29,7 @@ import java.util.stream.Collectors; /** * <p> - * 菜单权限表 前端控制器 + * 数据权限表 前端控制器 * </p> * * @Author scott @@ -54,9 +56,6 @@ public class SysDataPermissionController { private ISysDepartPermissionService sysDepartPermissionService; @Autowired - private ISysUserService sysUserService; - - @Autowired private JeeccgBaseConfig jeeccgBaseConfig; /** @@ -77,17 +76,17 @@ public class SysDataPermissionController { getTreeList(treeList, list, null); result.setResult(treeList); result.setSuccess(true); - log.info("======获取全部菜单数据=====耗时:" + (System.currentTimeMillis() - start) + "毫秒"); + log.info("======获取全部数据权限=====耗时:{}毫秒", System.currentTimeMillis() - start); } catch (Exception e) { log.error(e.getMessage(), e); } return result; } - /* update_begin author:wuxianquan date:20190908 for:先查询一级菜单,当用户点击展开菜单时加载子菜单 */ + /* update_begin author:wuxianquan date:20190908 for:先查询一级数据,当用户点击展开数据时加载子数据 */ /** - * 系统菜单列表(一级菜单) + * 系统数据列表(一级数据) * * @return */ @@ -111,12 +110,12 @@ public class SysDataPermissionController { } catch (Exception e) { log.error(e.getMessage(), e); } - log.info("======获取一级菜单数据=====耗时:" + (System.currentTimeMillis() - start) + "毫秒"); + log.info("======获取一级数据权限=====耗时:{}毫秒", System.currentTimeMillis() - start); return result; } /** - * 查询子菜单 + * 查询子权限 * * @param parentId * @return @@ -142,12 +141,12 @@ public class SysDataPermissionController { } return result; } - /* update_end author:wuxianquan date:20190908 for:先查询一级菜单,当用户点击展开菜单时加载子菜单 */ + /* update_end author:wuxianquan date:20190908 for:先查询一级权限,当用户点击展开权限时加载子权限 */ - // update_begin author:sunjianlei date:20200108 for: 新增批量根据父ID查询子级菜单的接口 ------------- + // update_begin author:sunjianlei date:20200108 for: 新增批量根据父ID查询子级权限的接口 ------------- /** - * 查询子菜单 + * 查询子权限 * * @param parentIds 父ID(多个采用半角逗号分割) * @return 返回 key-value 的 Map @@ -176,41 +175,19 @@ public class SysDataPermissionController { return Result.ok(listMap); } catch (Exception e) { log.error(e.getMessage(), e); - return Result.error("批量查询子菜单失败:" + e.getMessage()); + return Result.error("批量查询子权限失败:" + e.getMessage()); } } - // update_end author:sunjianlei date:20200108 for: 新增批量根据父ID查询子级菜单的接口 ------------- - -// /** -// * 查询用户拥有的菜单权限和按钮权限(根据用户账号) -// * -// * @return -// */ -// @RequestMapping(value = "/queryByUser", method = RequestMethod.GET) -// public Result<JSONArray> queryByUser(HttpServletRequest req) { -// Result<JSONArray> result = new Result<>(); -// try { -// String username = req.getParameter("username"); -// List<sysDataPermission> metaList = sysDataPermissionService.queryByUser(username); -// JSONArray jsonArray = new JSONArray(); -// this.getPermissionJsonArray(jsonArray, metaList, null); -// result.setResult(jsonArray); -// result.success("查询成功"); -// } catch (Exception e) { -// result.error500("查询失败:" + e.getMessage()); -// log.error(e.getMessage(), e); -// } -// return result; -// } + // update_end author:sunjianlei date:20200108 for: 新增批量根据父ID查询子级权限的接口 ------------- /** - * 查询用户拥有的菜单权限和按钮权限 + * 查询用户拥有的数据权限 * * @return */ - @RequestMapping(value = "/getUserPermissionByToken", method = RequestMethod.GET) + @RequestMapping(value = "/getDataPermissionByToken", method = RequestMethod.GET) public Result<?> getUserPermissionByToken() { - Result<JSONObject> result = new Result<JSONObject>(); + Result<JSONArray> result = new Result<>(); try { // 直接获取当前用户不适用前端token LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); @@ -218,45 +195,18 @@ public class SysDataPermissionController { return Result.error("请登录系统!"); } List<SysDataPermission> metaList = sysDataPermissionService.queryByUser(loginUser.getUsername()); - // 添加首页路由 - // update-begin-author:taoyan date:20200211 for: TASK #3368 【路由缓存】首页的缓存设置有问题,需要根据后台的路由配置来实现是否缓存 - if (!DataPermissionDataUtil.hasIndexPage(metaList)) { - SysDataPermission indexMenu = sysDataPermissionService.list(new LambdaQueryWrapper<SysDataPermission>().eq(SysDataPermission::getName, "首页")).get(0); - metaList.add(0, indexMenu); - } - // update-end-author:taoyan date:20200211 for: TASK #3368 【路由缓存】首页的缓存设置有问题,需要根据后台的路由配置来实现是否缓存 - - // update-begin--Author:liusq Date:20210624 for:自定义首页地址LOWCOD-1578 - List<String> roles = sysUserService.getRole(loginUser.getUsername()); - String compUrl = RoleIndexConfigEnum.getIndexByRoles(roles); - if (StringUtils.isNotBlank(compUrl)) { - List<SysDataPermission> menus = metaList.stream().filter(sysDataPermission -> "首页".equals(sysDataPermission.getName())).collect(Collectors.toList()); - } // update-end--Author:liusq Date:20210624 for:自定义首页地址LOWCOD-1578 - JSONObject json = new JSONObject(); - JSONArray menujsonArray = new JSONArray(); - this.getPermissionJsonArray(menujsonArray, metaList, null); - // 一级菜单下的子菜单全部是隐藏路由,则一级菜单不显示 - this.handleFirstLevelMenuHidden(menujsonArray); + //JSONObject json = new JSONObject(); JSONArray authjsonArray = new JSONArray(); this.getAuthJsonArray(authjsonArray, metaList); // 查询所有的权限 LambdaQueryWrapper<SysDataPermission> query = new LambdaQueryWrapper<>(); - query.eq(SysDataPermission::getDelFlag, CommonConstant.DEL_FLAG_0); - query.eq(SysDataPermission::getType, CommonConstant.MENU_TYPE_2); - // query.eq(sysDataPermission::getStatus, "1"); - List<SysDataPermission> allAuthList = sysDataPermissionService.list(query); - JSONArray allauthjsonArray = new JSONArray(); - this.getAllAuthJsonArray(allauthjsonArray, allAuthList); - // 路由菜单 - json.put("menu", menujsonArray); - // 按钮权限(用户拥有的权限集合) - json.put("auth", authjsonArray); - // 全部权限配置集合(按钮权限,访问权限) - json.put("allAuth", allauthjsonArray); - json.put("sysSafeMode", jeeccgBaseConfig.getSafeMode()); - result.setResult(json); + query.eq(SysDataPermission::getDelFlag, CommonConstant.DEL_FLAG_0) + .eq(SysDataPermission::getType, CommonConstant.MENU_TYPE_1) + .eq(SysDataPermission::getStatus, QuantityConstant.STATUS_ENABLE); + //json.put("sysSafeMode", jeeccgBaseConfig.getSafeMode()); + result.setResult(authjsonArray); } catch (Exception e) { result.error500("查询失败:" + e.getMessage()); log.error(e.getMessage(), e); @@ -267,7 +217,7 @@ public class SysDataPermissionController { /** * 【vue3专用】获取 * 1、查询用户拥有的按钮/表单访问权限 - * 2、所有权限 (菜单权限配置) + * 2、所有权限 (数据权限配置) * 3、系统安全模式 (开启则online报表的数据源必填) */ @RequestMapping(value = "/getPermCode", method = RequestMethod.GET) @@ -311,7 +261,7 @@ public class SysDataPermissionController { } /** - * 添加菜单 + * 添加数据权限 * * @param permission * @return @@ -322,7 +272,6 @@ public class SysDataPermissionController { public Result<SysDataPermission> add(@RequestBody SysDataPermission permission) { Result<SysDataPermission> result = new Result<>(); try { - permission = DataPermissionDataUtil.intelligentProcessData(permission); sysDataPermissionService.addPermission(permission); result.success("添加成功!"); } catch (Exception e) { @@ -333,7 +282,7 @@ public class SysDataPermissionController { } /** - * 编辑菜单 + * 编辑数据权限 * * @param permission * @return @@ -344,7 +293,6 @@ public class SysDataPermissionController { public Result<SysDataPermission> edit(@RequestBody SysDataPermission permission) { Result<SysDataPermission> result = new Result<>(); try { - permission = DataPermissionDataUtil.intelligentProcessData(permission); sysDataPermissionService.editPermission(permission); result.success("修改成功!"); } catch (Exception e) { @@ -355,7 +303,7 @@ public class SysDataPermissionController { } /** - * 删除菜单 + * 删除数据权限 * * @param id * @return @@ -376,7 +324,7 @@ public class SysDataPermissionController { } /** - * 批量删除菜单 + * 批量删除数据权限 * * @param ids * @return @@ -443,7 +391,7 @@ public class SysDataPermissionController { Result<List<TreeModel>> result = new Result<>(); try { List<TreeModel> list = sysDataPermissionService.queryListByParentId(parentId); - if (list == null || list.size() <= 0) { + if (list == null || list.isEmpty()) { result.error500("未找到角色信息"); } else { result.setResult(list); @@ -452,7 +400,6 @@ public class SysDataPermissionController { } catch (Exception e) { log.error(e.getMessage(), e); } - return result; } @@ -480,30 +427,6 @@ public class SysDataPermissionController { return result; } - /** - * 保存角色授权 - * - * @return - */ - /*@RequestMapping(value = "/saveRolePermission", method = RequestMethod.POST) - // @RequiresRoles({ "admin" }) - public Result<String> saveRolePermission(@RequestBody JSONObject json) { - long start = System.currentTimeMillis(); - Result<String> result = new Result<>(); - try { - String roleId = json.getString("roleId"); - String permissionIds = json.getString("permissionIds"); - String lastPermissionIds = json.getString("lastpermissionIds"); - this.sysRolePermissionService.saveRolePermission(roleId, permissionIds, lastPermissionIds); - result.success("保存成功!"); - log.info("======角色授权成功=====耗时:" + (System.currentTimeMillis() - start) + "毫秒"); - } catch (Exception e) { - result.error500("授权失败!"); - log.error(e.getMessage(), e); - } - return result; - }*/ - private void getTreeList(List<SysDataPermissionTree> treeList, List<SysDataPermission> metaList, SysDataPermissionTree temp) { for (SysDataPermission permission : metaList) { String tempPid = String.valueOf(permission.getParentId()); @@ -519,7 +442,6 @@ public class SysDataPermissionController { getTreeList(treeList, metaList, tree); } } - } } @@ -543,43 +465,19 @@ public class SysDataPermissionController { } /** - * 一级菜单的子菜单全部是隐藏路由,则一级菜单不显示 - * - * @param jsonArray - */ - private void handleFirstLevelMenuHidden(JSONArray jsonArray) { - jsonArray = jsonArray.stream().map(obj -> { - JSONObject returnObj = new JSONObject(); - JSONObject jsonObj = (JSONObject) obj; - if (jsonObj.containsKey("children")) { - JSONArray childrens = jsonObj.getJSONArray("children"); - childrens = - childrens.stream().filter(arrObj -> !"true".equals(((JSONObject) arrObj).getString("hidden"))).collect(Collectors.toCollection(JSONArray::new)); - if (childrens == null || childrens.size() == 0) { - jsonObj.put("hidden", true); - - // vue3版本兼容代码 - JSONObject meta = new JSONObject(); - meta.put("hideMenu", true); - jsonObj.put("meta", meta); - } - } - return returnObj; - }).collect(Collectors.toCollection(JSONArray::new)); - } - - /** * 获取权限JSON数组 * * @param jsonArray * @param allList */ private void getAllAuthJsonArray(JSONArray jsonArray, List<SysDataPermission> allList) { - JSONObject json = null; + JSONObject json; for (SysDataPermission permission : allList) { json = new JSONObject(); json.put("action", permission.getPerms()); - json.put("describe", permission.getName()); + json.put("status", permission.getStatus()); + json.put("type", permission.getType()); + json.put("describe", permission.getDescription()); jsonArray.add(json); } } @@ -591,258 +489,30 @@ public class SysDataPermissionController { * @param metaList */ private void getAuthJsonArray(JSONArray jsonArray, List<SysDataPermission> metaList) { - for (SysDataPermission permission : metaList) { - if (permission.getType() == null) { - continue; - } - /*JSONObject json = null; - if (permission.getType().equals(CommonConstant.MENU_TYPE_2)) { - json = new JSONObject(); - json.put("action", permission.getPerms()); - json.put("type", permission.getPermsType()); - json.put("describe", permission.getName()); - jsonArray.add(json); - }*/ - } - } - - /** - * 获取菜单JSON数组 - * - * @param jsonArray - * @param metaList - * @param parentJson - */ - private void getPermissionJsonArray(JSONArray jsonArray, List<SysDataPermission> metaList, JSONObject parentJson) { - for (SysDataPermission permission : metaList) { - if (permission.getType() == null) { - continue; - } - String tempPid = String.valueOf(permission.getParentId()); - JSONObject json = getPermissionJsonObject(permission); - if (json == null) { - continue; - } - if (parentJson == null && oConvertUtils.isEmpty(tempPid)) { - jsonArray.add(json); - if (!permission.isLeaf()) { - getPermissionJsonArray(jsonArray, metaList, json); - } - } else if (parentJson != null && oConvertUtils.isNotEmpty(tempPid) && tempPid.equals(parentJson.getString("id"))) { - // 类型( 0:一级菜单 1:子菜单 2:按钮 ) - if (permission.getType().equals(CommonConstant.MENU_TYPE_2)) { - JSONObject metaJson = parentJson.getJSONObject("meta"); - if (metaJson.containsKey("permissionList")) { - metaJson.getJSONArray("permissionList").add(json); - } else { - JSONArray permissionList = new JSONArray(); - permissionList.add(json); - metaJson.put("permissionList", permissionList); - } - // 类型( 0:一级菜单 1:子菜单 2:按钮 ) - } else if (permission.getType().equals(CommonConstant.MENU_TYPE_1) || permission.getType().equals(CommonConstant.MENU_TYPE_0)) { - if (parentJson.containsKey("children")) { - parentJson.getJSONArray("children").add(json); - } else { - JSONArray children = new JSONArray(); - children.add(json); - parentJson.put("children", children); - } - - if (!permission.isLeaf()) { - getPermissionJsonArray(jsonArray, metaList, json); - } - } - } - - } - } - - /** - * 根据菜单配置生成路由json - * - * @param permission - * @return - */ - private JSONObject getPermissionJsonObject(SysDataPermission permission) { - JSONObject json = new JSONObject(); - // 类型(0:一级菜单 1:子菜单 2:按钮) - if (permission.getType().equals(CommonConstant.MENU_TYPE_2)) { - // json.put("action", permission.getPerms()); - // json.put("type", permission.getPermsType()); - // json.put("describe", permission.getName()); - return null; - } else if (permission.getType().equals(CommonConstant.MENU_TYPE_0) || permission.getType().equals(CommonConstant.MENU_TYPE_1)) { - json.put("id", permission.getId()); - } - - return json; - } - - /** - * 判断是否外网URL 例如: http://localhost:8080/jeecg-boot/swagger-ui.html#/ 支持特殊格式: {{ - * window._CONFIG['domianURL'] }}/druid/ {{ JS代码片段 }},前台解析会自动执行JS代码片段 - * - * @return - */ - private boolean isWWWHttpUrl(String url) { - if (url != null && (url.startsWith("http://") || url.startsWith("https://") || url.startsWith("{{"))) { - return true; - } - return false; - } - - /** - * 通过URL生成路由name(去掉URL前缀斜杠,替换内容中的斜杠‘/’为-) 举例: URL = /isystem/role RouteName = - * isystem-role - * - * @return - */ - private String urlToRouteName(String url) { - if (oConvertUtils.isNotEmpty(url)) { - if (url.startsWith("/")) { - url = url.substring(1); - } - url = url.replace("/", "-"); - - // 特殊标记 - url = url.replace(":", "@"); - return url; - } else { - return null; - } - } + List<SysDataPermission> parentList = metaList.stream() + .filter(permission -> Objects.isNull(permission.getParentId())) + .collect(Collectors.toList()); + parentList.forEach(parentPermission -> { + List<SysDataPermission> childPermissionList = metaList.stream().filter(permission -> ObjectUtil.isNotNull(permission.getParentId()) && permission.getParentId().equals(parentPermission.getId())) + .collect(Collectors.toList()); - /** - * 根据菜单id来获取其对应的权限数据 - * - * @param sysPermissionDataRule - * @return - */ - @RequestMapping(value = "/getPermRuleListByPermId", method = RequestMethod.GET) - public Result<List<SysPermissionDataRule>> getPermRuleListByPermId(SysPermissionDataRule sysPermissionDataRule) { - List<SysPermissionDataRule> permRuleList = sysPermissionDataRuleService.getPermRuleListByPermId(sysPermissionDataRule.getPermissionId().toString()); - Result<List<SysPermissionDataRule>> result = new Result<>(); - result.setSuccess(true); - result.setResult(permRuleList); - return result; - } - - /** - * 添加菜单权限数据 - * - * @param sysPermissionDataRule - * @return - */ - // @RequiresRoles({ "admin" }) - @RequestMapping(value = "/addPermissionRule", method = RequestMethod.POST) - public Result<SysPermissionDataRule> addPermissionRule(@RequestBody SysPermissionDataRule sysPermissionDataRule) { - Result<SysPermissionDataRule> result = new Result<SysPermissionDataRule>(); - try { - sysPermissionDataRule.setCreateTime(new Date()); - sysPermissionDataRuleService.savePermissionDataRule(sysPermissionDataRule); - result.success("添加成功!"); - } catch (Exception e) { - log.error(e.getMessage(), e); - result.error500("操作失败"); - } - return result; - } - - // @RequiresRoles({ "admin" }) - @RequestMapping(value = "/editPermissionRule", method = {RequestMethod.PUT, RequestMethod.POST}) - public Result<SysPermissionDataRule> editPermissionRule(@RequestBody SysPermissionDataRule sysPermissionDataRule) { - Result<SysPermissionDataRule> result = new Result<SysPermissionDataRule>(); - try { - sysPermissionDataRuleService.saveOrUpdate(sysPermissionDataRule); - result.success("更新成功!"); - } catch (Exception e) { - log.error(e.getMessage(), e); - result.error500("操作失败"); - } - return result; - } - - /** - * 删除菜单权限数据 - * - * @param id - * @return - */ - // @RequiresRoles({ "admin" }) - @RequestMapping(value = "/deletePermissionRule", method = RequestMethod.DELETE) - public Result<SysPermissionDataRule> deletePermissionRule(@RequestParam(name = "id", required = true) String id) { - Result<SysPermissionDataRule> result = new Result<SysPermissionDataRule>(); - try { - sysPermissionDataRuleService.deletePermissionDataRule(id); - result.success("删除成功!"); - } catch (Exception e) { - log.error(e.getMessage(), e); - result.error500("操作失败"); - } - return result; - } - - /** - * 查询菜单权限数据 - * - * @param sysPermissionDataRule - * @return - */ - @RequestMapping(value = "/queryPermissionRule", method = RequestMethod.GET) - public Result<List<SysPermissionDataRule>> queryPermissionRule(SysPermissionDataRule sysPermissionDataRule) { - Result<List<SysPermissionDataRule>> result = new Result<>(); - try { - List<SysPermissionDataRule> permRuleList = sysPermissionDataRuleService.queryPermissionRule(sysPermissionDataRule); - result.setResult(permRuleList); - } catch (Exception e) { - log.error(e.getMessage(), e); - result.error500("操作失败"); - } - return result; - } - - /** - * 部门权限表 - * - * @param departId - * @return - */ - @RequestMapping(value = "/queryDepartPermission", method = RequestMethod.GET) - public Result<List<String>> queryDepartPermission(@RequestParam(name = "departId", required = true) String departId) { - Result<List<String>> result = new Result<>(); - try { - List<SysDepartPermission> list = - sysDepartPermissionService.list(new QueryWrapper<SysDepartPermission>().lambda().eq(SysDepartPermission::getDepartId, departId)); - result.setResult(list.stream().map(SysDepartPermission -> String.valueOf(SysDepartPermission.getPermissionId())).collect(Collectors.toList())); - result.setSuccess(true); - } catch (Exception e) { - log.error(e.getMessage(), e); - } - return result; - } - - /** - * 保存部门授权 - * - * @return - */ - @RequestMapping(value = "/saveDepartPermission", method = RequestMethod.POST) - // @RequiresRoles({ "admin" }) - public Result<String> saveDepartPermission(@RequestBody JSONObject json) { - long start = System.currentTimeMillis(); - Result<String> result = new Result<>(); - try { - String departId = json.getString("departId"); - String permissionIds = json.getString("permissionIds"); - String lastPermissionIds = json.getString("lastpermissionIds"); - this.sysDepartPermissionService.saveDepartPermission(departId, permissionIds, lastPermissionIds); - result.success("保存成功!"); - log.info("======部门授权成功=====耗时:" + (System.currentTimeMillis() - start) + "毫秒"); - } catch (Exception e) { - result.error500("授权失败!"); - log.error(e.getMessage(), e); - } - return result; + JSONObject json = new JSONObject(); + List<Map<String, Object>> params = new ArrayList<>(); + childPermissionList.forEach(childPermission -> { + Map<String, Object> map = new HashMap<>(); + + String[] split = childPermission.getPerms().split(StrUtil.COLON); + String perms = split.length == 2 ? split[1] : childPermission.getPerms(); + map.put("name", childPermission.getName()); + map.put("perms", perms); + map.put("type", childPermission.getType()); + map.put("status", childPermission.getStatus()); + map.put("describe", childPermission.getDescription()); + params.add(map); + }); + + json.put(parentPermission.getPerms(), params); + jsonArray.add(json); + }); } } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/system/entity/SysDataPermission.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/system/entity/SysDataPermission.java index d1bd6a2..cf64ccb 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/system/entity/SysDataPermission.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/system/entity/SysDataPermission.java @@ -3,6 +3,7 @@ package org.jeecg.modules.system.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonInclude; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/system/mapper/xml/SysDataPermissionMapper.xml b/huaheng-wms-core/src/main/java/org/jeecg/modules/system/mapper/xml/SysDataPermissionMapper.xml index ed1dc0f..9165bc6 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/system/mapper/xml/SysDataPermissionMapper.xml +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/system/mapper/xml/SysDataPermissionMapper.xml @@ -27,7 +27,7 @@ ,name ,icon ,is_leaf - FROM sys_permission + FROM sys_data_permission WHERE 1=1 <choose> <when test="parentId != null and parentId != ''"> @@ -43,21 +43,19 @@ <select id="queryByUser" parameterType="Object" resultMap="SysDataPermission"> SELECT * FROM ( SELECT p.* - FROM sys_permission p + FROM sys_data_permission p WHERE (exists( - select a.id from sys_role_permission a + select a.id from sys_role_data_permission a join sys_role b on a.role_id = b.id join sys_user_role c on c.role_id = b.id join sys_user d on d.id = c.user_id where p.id = a.permission_id AND d.username = #{username,jdbcType=VARCHAR} - ) - or (p.url like '%:code' and p.url like '/online%' and p.hidden = 1) - or p.url = '/online') + )) and p.del_flag = 0 <!--update begin Author:lvdandan Date:20200213 for:加入部门权限 --> UNION SELECT p.* - FROM sys_permission p + FROM sys_data_permission p WHERE exists( select a.id from sys_depart_role_permission a join sys_depart_role b on a.role_id = b.id @@ -70,13 +68,12 @@ ) h order by h.sort_no ASC </select> - <!-- 根据用户账号查询菜单权限 --> <select id="queryCountByUsername" parameterType="Object" resultType="int"> select sum(cnt) from ( select count(*) as cnt - from sys_role_permission a - join sys_permission b on a.permission_id = b.id + from sys_role_data_permission a + join sys_data_permission b on a.permission_id = b.id join sys_role c on a.role_id = c.id join sys_user_role d on d.role_id = c.id join sys_user e on d.user_id = e.id @@ -84,12 +81,9 @@ <if test="permission.id !=null and permission.id != ''"> and b.id = #{permission.id} </if> - <if test="permission.url !=null and permission.url != ''"> - and b.url = #{permission.url} - </if> union all select count(*) as cnt - from sys_permission z + from sys_data_permission z join sys_depart_role_permission y on z.id = y.permission_id join sys_depart_role x on y.role_id = x.id join sys_depart_role_user w on w.drole_id = x.id @@ -98,11 +92,6 @@ <if test="permission.id !=null and permission.id != ''"> and z.id = #{permission.id} </if> - <if test="permission.url !=null and permission.url != ''"> - and z.url = #{permission.url} - </if> ) temp </select> - - </mapper> diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/system/service/impl/SysDataPermissionServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/system/service/impl/SysDataPermissionServiceImpl.java index 61de602..fc2486d 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/system/service/impl/SysDataPermissionServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/system/service/impl/SysDataPermissionServiceImpl.java @@ -214,6 +214,7 @@ public class SysDataPermissionServiceImpl extends ServiceImpl<SysDataPermissionM } @Override + @Cacheable(value = "sys:cache:userDataPermission", key = "#username", unless = "#result == null ") public List<SysDataPermission> queryByUser(String username) { return this.sysDataPermissionMapper.queryByUser(username); } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/system/service/impl/SysRoleDataPermissionServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/system/service/impl/SysRoleDataPermissionServiceImpl.java index 40e9367..fbb03fe 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/system/service/impl/SysRoleDataPermissionServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/system/service/impl/SysRoleDataPermissionServiceImpl.java @@ -9,6 +9,7 @@ import org.jeecg.common.util.oConvertUtils; import org.jeecg.modules.system.entity.SysRoleDataPermission; import org.jeecg.modules.system.mapper.SysRoleDataPermissionMapper; import org.jeecg.modules.system.service.ISysRoleDataPermissionService; +import org.springframework.cache.annotation.CacheEvict; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletRequest; @@ -18,8 +19,9 @@ import java.util.*; * <p> * 角色数据权限表 服务实现类 * </p> + * * @Author scott - * @since 2018-12-21 + * @since 2018-12-21 */ @Service public class SysRoleDataPermissionServiceImpl extends ServiceImpl<SysRoleDataPermissionMapper, SysRoleDataPermission> implements ISysRoleDataPermissionService { @@ -51,6 +53,7 @@ public class SysRoleDataPermissionServiceImpl extends ServiceImpl<SysRoleDataPer } @Override + @CacheEvict(value = "sys:cache:userDataPermission", allEntries = true) public void saveRoleDataPermission(String roleId, String permissionIds, String lastPermissionIds) { String ip = ""; try { @@ -79,15 +82,16 @@ public class SysRoleDataPermissionServiceImpl extends ServiceImpl<SysRoleDataPer if (delete != null && !delete.isEmpty()) { for (String permissionId : delete) { this.remove( - new QueryWrapper<SysRoleDataPermission>().lambda().eq(SysRoleDataPermission::getRoleId, roleId).eq(SysRoleDataPermission::getPermissionId, permissionId)); + new QueryWrapper<SysRoleDataPermission>().lambda().eq(SysRoleDataPermission::getRoleId, roleId).eq(SysRoleDataPermission::getPermissionId, permissionId)); } } } /** * 从diff中找出main中没有的元素 - * @param main - * @param diff + * + * @param main + * @param diff * @return */ private List<String> getDiff(String main, String diff) { diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/system/util/DataPermissionDataUtil.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/system/util/DataPermissionDataUtil.java deleted file mode 100644 index 03ce4d1..0000000 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/system/util/DataPermissionDataUtil.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.jeecg.modules.system.util; - -import org.jeecg.common.util.oConvertUtils; -import org.jeecg.modules.system.entity.SysDataPermission; - -import java.util.List; - -/** - * @Author: scott - * @Date: 2019-04-03 - */ -public class DataPermissionDataUtil { - - /** - * 智能处理错误数据,简化用户失误操作 - * @param permission - */ - public static SysDataPermission intelligentProcessData(SysDataPermission permission) { - if (permission == null) { - return null; - } - return permission; - } - - /** - * 如果没有index页面 需要new 一个放到list中 - * @param metaList - */ - public static void addIndexPage(List<SysDataPermission> metaList) { - boolean hasIndexMenu = false; - for (SysDataPermission sysDataPermission : metaList) { - if ("首页".equals(sysDataPermission.getName())) { - hasIndexMenu = true; - break; - } - } - if (!hasIndexMenu) { - metaList.add(0, new SysDataPermission(true)); - } - } - - /** - * 判断是否授权首页 - * @param metaList - * @return - */ - public static boolean hasIndexPage(List<SysDataPermission> metaList) { - boolean hasIndexMenu = false; - for (SysDataPermission sysDataPermission : metaList) { - if ("首页".equals(sysDataPermission.getName())) { - hasIndexMenu = true; - break; - } - } - return hasIndexMenu; - } - -}