Commit 9e59a6c1aec06a6e149ed135cd6a0cf1ebc02b37
1 parent
4c3e2bd8
1. 迁移 Role 相关的逻辑
Showing
22 changed files
with
534 additions
and
398 deletions
ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java
| ... | ... | @@ -3,6 +3,7 @@ package com.ruoyi.generator.util; |
| 3 | 3 | import java.util.ArrayList; |
| 4 | 4 | import java.util.HashSet; |
| 5 | 5 | import java.util.List; |
| 6 | + | |
| 6 | 7 | import org.apache.velocity.VelocityContext; |
| 7 | 8 | import com.alibaba.fastjson.JSONObject; |
| 8 | 9 | import com.ruoyi.common.constant.GenConstants; |
| ... | ... | @@ -13,18 +14,23 @@ import com.ruoyi.generator.domain.GenTableColumn; |
| 13 | 14 | |
| 14 | 15 | /** |
| 15 | 16 | * 模板处理工具类 |
| 16 | - * | |
| 17 | + * | |
| 17 | 18 | * @author ruoyi |
| 18 | 19 | */ |
| 19 | -public class VelocityUtils | |
| 20 | -{ | |
| 21 | - /** 项目空间路径 */ | |
| 20 | +public class VelocityUtils { | |
| 21 | + /** | |
| 22 | + * 项目空间路径 | |
| 23 | + */ | |
| 22 | 24 | private static final String PROJECT_PATH = "main/java"; |
| 23 | 25 | |
| 24 | - /** mybatis空间路径 */ | |
| 26 | + /** | |
| 27 | + * mybatis空间路径 | |
| 28 | + */ | |
| 25 | 29 | private static final String MYBATIS_PATH = "main/resources/mapper"; |
| 26 | 30 | |
| 27 | - /** 默认上级菜单,系统工具 */ | |
| 31 | + /** | |
| 32 | + * 默认上级菜单,系统工具 | |
| 33 | + */ | |
| 28 | 34 | private static final String DEFAULT_PARENT_MENU_ID = "3"; |
| 29 | 35 | |
| 30 | 36 | /** |
| ... | ... | @@ -32,8 +38,7 @@ public class VelocityUtils |
| 32 | 38 | * |
| 33 | 39 | * @return 模板列表 |
| 34 | 40 | */ |
| 35 | - public static VelocityContext prepareContext(GenTable genTable) | |
| 36 | - { | |
| 41 | + public static VelocityContext prepareContext(GenTable genTable) { | |
| 37 | 42 | String moduleName = genTable.getModuleName(); |
| 38 | 43 | String businessName = genTable.getBusinessName(); |
| 39 | 44 | String packageName = genTable.getPackageName(); |
| ... | ... | @@ -59,23 +64,20 @@ public class VelocityUtils |
| 59 | 64 | velocityContext.put("columns", genTable.getColumns()); |
| 60 | 65 | velocityContext.put("table", genTable); |
| 61 | 66 | setMenuVelocityContext(velocityContext, genTable); |
| 62 | - if (GenConstants.TPL_TREE.equals(tplCategory)) | |
| 63 | - { | |
| 67 | + if (GenConstants.TPL_TREE.equals(tplCategory)) { | |
| 64 | 68 | setTreeVelocityContext(velocityContext, genTable); |
| 65 | 69 | } |
| 66 | 70 | return velocityContext; |
| 67 | 71 | } |
| 68 | 72 | |
| 69 | - public static void setMenuVelocityContext(VelocityContext context, GenTable genTable) | |
| 70 | - { | |
| 73 | + public static void setMenuVelocityContext(VelocityContext context, GenTable genTable) { | |
| 71 | 74 | String options = genTable.getOptions(); |
| 72 | 75 | JSONObject paramsObj = JSONObject.parseObject(options); |
| 73 | 76 | String parentMenuId = getParentMenuId(paramsObj); |
| 74 | 77 | context.put("parentMenuId", parentMenuId); |
| 75 | 78 | } |
| 76 | 79 | |
| 77 | - public static void setTreeVelocityContext(VelocityContext context, GenTable genTable) | |
| 78 | - { | |
| 80 | + public static void setTreeVelocityContext(VelocityContext context, GenTable genTable) { | |
| 79 | 81 | String options = genTable.getOptions(); |
| 80 | 82 | JSONObject paramsObj = JSONObject.parseObject(options); |
| 81 | 83 | String treeCode = getTreecode(paramsObj); |
| ... | ... | @@ -86,12 +88,10 @@ public class VelocityUtils |
| 86 | 88 | context.put("treeParentCode", treeParentCode); |
| 87 | 89 | context.put("treeName", treeName); |
| 88 | 90 | context.put("expandColumn", getExpandColumn(genTable)); |
| 89 | - if (paramsObj.containsKey(GenConstants.TREE_PARENT_CODE)) | |
| 90 | - { | |
| 91 | + if (paramsObj.containsKey(GenConstants.TREE_PARENT_CODE)) { | |
| 91 | 92 | context.put("tree_parent_code", paramsObj.getString(GenConstants.TREE_PARENT_CODE)); |
| 92 | 93 | } |
| 93 | - if (paramsObj.containsKey(GenConstants.TREE_NAME)) | |
| 94 | - { | |
| 94 | + if (paramsObj.containsKey(GenConstants.TREE_NAME)) { | |
| 95 | 95 | context.put("tree_name", paramsObj.getString(GenConstants.TREE_NAME)); |
| 96 | 96 | } |
| 97 | 97 | } |
| ... | ... | @@ -101,8 +101,7 @@ public class VelocityUtils |
| 101 | 101 | * |
| 102 | 102 | * @return 模板列表 |
| 103 | 103 | */ |
| 104 | - public static List<String> getTemplateList(String tplCategory) | |
| 105 | - { | |
| 104 | + public static List<String> getTemplateList(String tplCategory) { | |
| 106 | 105 | List<String> templates = new ArrayList<String>(); |
| 107 | 106 | templates.add("vm/java/domain.java.vm"); |
| 108 | 107 | templates.add("vm/java/mapper.java.vm"); |
| ... | ... | @@ -112,12 +111,9 @@ public class VelocityUtils |
| 112 | 111 | templates.add("vm/xml/mapper.xml.vm"); |
| 113 | 112 | templates.add("vm/sql/sql.vm"); |
| 114 | 113 | templates.add("vm/js/api.js.vm"); |
| 115 | - if (GenConstants.TPL_CRUD.equals(tplCategory)) | |
| 116 | - { | |
| 114 | + if (GenConstants.TPL_CRUD.equals(tplCategory)) { | |
| 117 | 115 | templates.add("vm/vue/index.vue.vm"); |
| 118 | - } | |
| 119 | - else if (GenConstants.TPL_TREE.equals(tplCategory)) | |
| 120 | - { | |
| 116 | + } else if (GenConstants.TPL_TREE.equals(tplCategory)) { | |
| 121 | 117 | templates.add("vm/vue/index-tree.vue.vm"); |
| 122 | 118 | } |
| 123 | 119 | return templates; |
| ... | ... | @@ -126,8 +122,7 @@ public class VelocityUtils |
| 126 | 122 | /** |
| 127 | 123 | * 获取文件名 |
| 128 | 124 | */ |
| 129 | - public static String getFileName(String template, GenTable genTable) | |
| 130 | - { | |
| 125 | + public static String getFileName(String template, GenTable genTable) { | |
| 131 | 126 | // 文件名称 |
| 132 | 127 | String fileName = ""; |
| 133 | 128 | // 包路径 |
| ... | ... | @@ -143,44 +138,25 @@ public class VelocityUtils |
| 143 | 138 | String mybatisPath = MYBATIS_PATH + "/" + moduleName; |
| 144 | 139 | String vuePath = "vue"; |
| 145 | 140 | |
| 146 | - if (template.contains("domain.java.vm")) | |
| 147 | - { | |
| 141 | + if (template.contains("domain.java.vm")) { | |
| 148 | 142 | fileName = StringUtils.format("{}/domain/{}.java", javaPath, className); |
| 149 | - } | |
| 150 | - else if (template.contains("mapper.java.vm")) | |
| 151 | - { | |
| 143 | + } else if (template.contains("mapper.java.vm")) { | |
| 152 | 144 | fileName = StringUtils.format("{}/mapper/{}Mapper.java", javaPath, className); |
| 153 | - } | |
| 154 | - else if (template.contains("service.java.vm")) | |
| 155 | - { | |
| 145 | + } else if (template.contains("service.java.vm")) { | |
| 156 | 146 | fileName = StringUtils.format("{}/service/I{}Service.java", javaPath, className); |
| 157 | - } | |
| 158 | - else if (template.contains("serviceImpl.java.vm")) | |
| 159 | - { | |
| 147 | + } else if (template.contains("serviceImpl.java.vm")) { | |
| 160 | 148 | fileName = StringUtils.format("{}/service/impl/{}ServiceImpl.java", javaPath, className); |
| 161 | - } | |
| 162 | - else if (template.contains("controller.java.vm")) | |
| 163 | - { | |
| 149 | + } else if (template.contains("controller.java.vm")) { | |
| 164 | 150 | fileName = StringUtils.format("{}/controller/{}Controller.java", javaPath, className); |
| 165 | - } | |
| 166 | - else if (template.contains("mapper.xml.vm")) | |
| 167 | - { | |
| 151 | + } else if (template.contains("mapper.xml.vm")) { | |
| 168 | 152 | fileName = StringUtils.format("{}/{}Mapper.xml", mybatisPath, className); |
| 169 | - } | |
| 170 | - else if (template.contains("sql.vm")) | |
| 171 | - { | |
| 153 | + } else if (template.contains("sql.vm")) { | |
| 172 | 154 | fileName = businessName + "Menu.sql"; |
| 173 | - } | |
| 174 | - else if (template.contains("api.js.vm")) | |
| 175 | - { | |
| 155 | + } else if (template.contains("api.js.vm")) { | |
| 176 | 156 | fileName = StringUtils.format("{}/api/{}/{}.js", vuePath, moduleName, businessName); |
| 177 | - } | |
| 178 | - else if (template.contains("index.vue.vm")) | |
| 179 | - { | |
| 157 | + } else if (template.contains("index.vue.vm")) { | |
| 180 | 158 | fileName = StringUtils.format("{}/views/{}/{}/index.vue", vuePath, moduleName, businessName); |
| 181 | - } | |
| 182 | - else if (template.contains("index-tree.vue.vm")) | |
| 183 | - { | |
| 159 | + } else if (template.contains("index-tree.vue.vm")) { | |
| 184 | 160 | fileName = StringUtils.format("{}/views/{}/{}/index.vue", vuePath, moduleName, businessName); |
| 185 | 161 | } |
| 186 | 162 | return fileName; |
| ... | ... | @@ -192,8 +168,7 @@ public class VelocityUtils |
| 192 | 168 | * @param packageName 包名称 |
| 193 | 169 | * @return 包前缀名称 |
| 194 | 170 | */ |
| 195 | - public static String getPackagePrefix(String packageName) | |
| 196 | - { | |
| 171 | + public static String getPackagePrefix(String packageName) { | |
| 197 | 172 | int lastIndex = packageName.lastIndexOf("."); |
| 198 | 173 | String basePackage = StringUtils.substring(packageName, 0, lastIndex); |
| 199 | 174 | return basePackage; |
| ... | ... | @@ -205,18 +180,13 @@ public class VelocityUtils |
| 205 | 180 | * @param columns 列集合 |
| 206 | 181 | * @return 返回需要导入的包列表 |
| 207 | 182 | */ |
| 208 | - public static HashSet<String> getImportList(List<GenTableColumn> columns) | |
| 209 | - { | |
| 183 | + public static HashSet<String> getImportList(List<GenTableColumn> columns) { | |
| 210 | 184 | HashSet<String> importList = new HashSet<String>(); |
| 211 | - for (GenTableColumn column : columns) | |
| 212 | - { | |
| 213 | - if (!column.isSuperColumn() && GenConstants.TYPE_DATE.equals(column.getJavaType())) | |
| 214 | - { | |
| 185 | + for (GenTableColumn column : columns) { | |
| 186 | + if (!column.isSuperColumn() && GenConstants.TYPE_DATE.equals(column.getJavaType())) { | |
| 215 | 187 | importList.add("java.util.Date"); |
| 216 | 188 | importList.add("com.fasterxml.jackson.annotation.JsonFormat"); |
| 217 | - } | |
| 218 | - else if (!column.isSuperColumn() && GenConstants.TYPE_BIGDECIMAL.equals(column.getJavaType())) | |
| 219 | - { | |
| 189 | + } else if (!column.isSuperColumn() && GenConstants.TYPE_BIGDECIMAL.equals(column.getJavaType())) { | |
| 220 | 190 | importList.add("java.math.BigDecimal"); |
| 221 | 191 | } |
| 222 | 192 | } |
| ... | ... | @@ -226,12 +196,11 @@ public class VelocityUtils |
| 226 | 196 | /** |
| 227 | 197 | * 获取权限前缀 |
| 228 | 198 | * |
| 229 | - * @param moduleName 模块名称 | |
| 199 | + * @param moduleName 模块名称 | |
| 230 | 200 | * @param businessName 业务名称 |
| 231 | 201 | * @return 返回权限前缀 |
| 232 | 202 | */ |
| 233 | - public static String getPermissionPrefix(String moduleName, String businessName) | |
| 234 | - { | |
| 203 | + public static String getPermissionPrefix(String moduleName, String businessName) { | |
| 235 | 204 | return StringUtils.format("{}:{}", moduleName, businessName); |
| 236 | 205 | } |
| 237 | 206 | |
| ... | ... | @@ -241,10 +210,8 @@ public class VelocityUtils |
| 241 | 210 | * @param paramsObj 生成其他选项 |
| 242 | 211 | * @return 上级菜单ID字段 |
| 243 | 212 | */ |
| 244 | - public static String getParentMenuId(JSONObject paramsObj) | |
| 245 | - { | |
| 246 | - if (StringUtils.isNotEmpty(paramsObj) && paramsObj.containsKey(GenConstants.PARENT_MENU_ID)) | |
| 247 | - { | |
| 213 | + public static String getParentMenuId(JSONObject paramsObj) { | |
| 214 | + if (StringUtils.isNotEmpty(paramsObj) && paramsObj.containsKey(GenConstants.PARENT_MENU_ID)) { | |
| 248 | 215 | return paramsObj.getString(GenConstants.PARENT_MENU_ID); |
| 249 | 216 | } |
| 250 | 217 | return DEFAULT_PARENT_MENU_ID; |
| ... | ... | @@ -256,10 +223,8 @@ public class VelocityUtils |
| 256 | 223 | * @param paramsObj 生成其他选项 |
| 257 | 224 | * @return 树编码 |
| 258 | 225 | */ |
| 259 | - public static String getTreecode(JSONObject paramsObj) | |
| 260 | - { | |
| 261 | - if (paramsObj.containsKey(GenConstants.TREE_CODE)) | |
| 262 | - { | |
| 226 | + public static String getTreecode(JSONObject paramsObj) { | |
| 227 | + if (paramsObj.containsKey(GenConstants.TREE_CODE)) { | |
| 263 | 228 | return StringUtils.toCamelCase(paramsObj.getString(GenConstants.TREE_CODE)); |
| 264 | 229 | } |
| 265 | 230 | return StringUtils.EMPTY; |
| ... | ... | @@ -271,10 +236,8 @@ public class VelocityUtils |
| 271 | 236 | * @param paramsObj 生成其他选项 |
| 272 | 237 | * @return 树父编码 |
| 273 | 238 | */ |
| 274 | - public static String getTreeParentCode(JSONObject paramsObj) | |
| 275 | - { | |
| 276 | - if (paramsObj.containsKey(GenConstants.TREE_PARENT_CODE)) | |
| 277 | - { | |
| 239 | + public static String getTreeParentCode(JSONObject paramsObj) { | |
| 240 | + if (paramsObj.containsKey(GenConstants.TREE_PARENT_CODE)) { | |
| 278 | 241 | return StringUtils.toCamelCase(paramsObj.getString(GenConstants.TREE_PARENT_CODE)); |
| 279 | 242 | } |
| 280 | 243 | return StringUtils.EMPTY; |
| ... | ... | @@ -286,10 +249,8 @@ public class VelocityUtils |
| 286 | 249 | * @param paramsObj 生成其他选项 |
| 287 | 250 | * @return 树名称 |
| 288 | 251 | */ |
| 289 | - public static String getTreeName(JSONObject paramsObj) | |
| 290 | - { | |
| 291 | - if (paramsObj.containsKey(GenConstants.TREE_NAME)) | |
| 292 | - { | |
| 252 | + public static String getTreeName(JSONObject paramsObj) { | |
| 253 | + if (paramsObj.containsKey(GenConstants.TREE_NAME)) { | |
| 293 | 254 | return StringUtils.toCamelCase(paramsObj.getString(GenConstants.TREE_NAME)); |
| 294 | 255 | } |
| 295 | 256 | return StringUtils.EMPTY; |
| ... | ... | @@ -301,20 +262,16 @@ public class VelocityUtils |
| 301 | 262 | * @param genTable 业务表对象 |
| 302 | 263 | * @return 展开按钮列序号 |
| 303 | 264 | */ |
| 304 | - public static int getExpandColumn(GenTable genTable) | |
| 305 | - { | |
| 265 | + public static int getExpandColumn(GenTable genTable) { | |
| 306 | 266 | String options = genTable.getOptions(); |
| 307 | 267 | JSONObject paramsObj = JSONObject.parseObject(options); |
| 308 | 268 | String treeName = paramsObj.getString(GenConstants.TREE_NAME); |
| 309 | 269 | int num = 0; |
| 310 | - for (GenTableColumn column : genTable.getColumns()) | |
| 311 | - { | |
| 312 | - if (column.isList()) | |
| 313 | - { | |
| 270 | + for (GenTableColumn column : genTable.getColumns()) { | |
| 271 | + if (column.isList()) { | |
| 314 | 272 | num++; |
| 315 | 273 | String columnName = column.getColumnName(); |
| 316 | - if (columnName.equals(treeName)) | |
| 317 | - { | |
| 274 | + if (columnName.equals(treeName)) { | |
| 318 | 275 | break; |
| 319 | 276 | } |
| 320 | 277 | } | ... | ... |
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
| ... | ... | @@ -24,7 +24,7 @@ import com.ruoyi.system.service.ISysRoleService; |
| 24 | 24 | |
| 25 | 25 | /** |
| 26 | 26 | * 角色 业务层处理 |
| 27 | - * | |
| 27 | + * | |
| 28 | 28 | * @author ruoyi |
| 29 | 29 | */ |
| 30 | 30 | @Service |
| ... | ... | @@ -44,7 +44,7 @@ public class SysRoleServiceImpl implements ISysRoleService |
| 44 | 44 | |
| 45 | 45 | /** |
| 46 | 46 | * 根据条件分页查询角色数据 |
| 47 | - * | |
| 47 | + * | |
| 48 | 48 | * @param role 角色信息 |
| 49 | 49 | * @return 角色数据集合信息 |
| 50 | 50 | */ |
| ... | ... | @@ -57,7 +57,7 @@ public class SysRoleServiceImpl implements ISysRoleService |
| 57 | 57 | |
| 58 | 58 | /** |
| 59 | 59 | * 根据用户ID查询权限 |
| 60 | - * | |
| 60 | + * | |
| 61 | 61 | * @param userId 用户ID |
| 62 | 62 | * @return 权限列表 |
| 63 | 63 | */ |
| ... | ... | @@ -78,7 +78,7 @@ public class SysRoleServiceImpl implements ISysRoleService |
| 78 | 78 | |
| 79 | 79 | /** |
| 80 | 80 | * 查询所有角色 |
| 81 | - * | |
| 81 | + * | |
| 82 | 82 | * @return 角色列表 |
| 83 | 83 | */ |
| 84 | 84 | @Override |
| ... | ... | @@ -89,7 +89,7 @@ public class SysRoleServiceImpl implements ISysRoleService |
| 89 | 89 | |
| 90 | 90 | /** |
| 91 | 91 | * 根据用户ID获取角色选择框列表 |
| 92 | - * | |
| 92 | + * | |
| 93 | 93 | * @param userId 用户ID |
| 94 | 94 | * @return 选中角色ID列表 |
| 95 | 95 | */ |
| ... | ... | @@ -101,7 +101,7 @@ public class SysRoleServiceImpl implements ISysRoleService |
| 101 | 101 | |
| 102 | 102 | /** |
| 103 | 103 | * 通过角色ID查询角色 |
| 104 | - * | |
| 104 | + * | |
| 105 | 105 | * @param roleId 角色ID |
| 106 | 106 | * @return 角色对象信息 |
| 107 | 107 | */ |
| ... | ... | @@ -113,7 +113,7 @@ public class SysRoleServiceImpl implements ISysRoleService |
| 113 | 113 | |
| 114 | 114 | /** |
| 115 | 115 | * 校验角色名称是否唯一 |
| 116 | - * | |
| 116 | + * | |
| 117 | 117 | * @param role 角色信息 |
| 118 | 118 | * @return 结果 |
| 119 | 119 | */ |
| ... | ... | @@ -130,96 +130,8 @@ public class SysRoleServiceImpl implements ISysRoleService |
| 130 | 130 | } |
| 131 | 131 | |
| 132 | 132 | /** |
| 133 | - * 校验角色权限是否唯一 | |
| 134 | - * | |
| 135 | - * @param role 角色信息 | |
| 136 | - * @return 结果 | |
| 137 | - */ | |
| 138 | - @Override | |
| 139 | - public String checkRoleKeyUnique(SysRole role) | |
| 140 | - { | |
| 141 | - Long roleId = StringUtils.isNull(role.getRoleId()) ? -1L : role.getRoleId(); | |
| 142 | - SysRole info = roleMapper.checkRoleKeyUnique(role.getRoleKey()); | |
| 143 | - if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue()) | |
| 144 | - { | |
| 145 | - return UserConstants.NOT_UNIQUE; | |
| 146 | - } | |
| 147 | - return UserConstants.UNIQUE; | |
| 148 | - } | |
| 149 | - | |
| 150 | - /** | |
| 151 | - * 校验角色是否允许操作 | |
| 152 | - * | |
| 153 | - * @param role 角色信息 | |
| 154 | - */ | |
| 155 | - @Override | |
| 156 | - public void checkRoleAllowed(SysRole role) | |
| 157 | - { | |
| 158 | - if (StringUtils.isNotNull(role.getRoleId()) && role.isAdmin()) | |
| 159 | - { | |
| 160 | - throw new CustomException("不允许操作超级管理员角色"); | |
| 161 | - } | |
| 162 | - } | |
| 163 | - | |
| 164 | - /** | |
| 165 | - * 通过角色ID查询角色使用数量 | |
| 166 | - * | |
| 167 | - * @param roleId 角色ID | |
| 168 | - * @return 结果 | |
| 169 | - */ | |
| 170 | - @Override | |
| 171 | - public int countUserRoleByRoleId(Long roleId) | |
| 172 | - { | |
| 173 | - return userRoleMapper.countUserRoleByRoleId(roleId); | |
| 174 | - } | |
| 175 | - | |
| 176 | - /** | |
| 177 | - * 新增保存角色信息 | |
| 178 | - * | |
| 179 | - * @param role 角色信息 | |
| 180 | - * @return 结果 | |
| 181 | - */ | |
| 182 | - @Override | |
| 183 | - @Transactional | |
| 184 | - public int insertRole(SysRole role) | |
| 185 | - { | |
| 186 | - // 新增角色信息 | |
| 187 | - roleMapper.insertRole(role); | |
| 188 | - return insertRoleMenu(role); | |
| 189 | - } | |
| 190 | - | |
| 191 | - /** | |
| 192 | - * 修改保存角色信息 | |
| 193 | - * | |
| 194 | - * @param role 角色信息 | |
| 195 | - * @return 结果 | |
| 196 | - */ | |
| 197 | - @Override | |
| 198 | - @Transactional | |
| 199 | - public int updateRole(SysRole role) | |
| 200 | - { | |
| 201 | - // 修改角色信息 | |
| 202 | - roleMapper.updateRole(role); | |
| 203 | - // 删除角色与菜单关联 | |
| 204 | - roleMenuMapper.deleteRoleMenuByRoleId(role.getRoleId()); | |
| 205 | - return insertRoleMenu(role); | |
| 206 | - } | |
| 207 | - | |
| 208 | - /** | |
| 209 | - * 修改角色状态 | |
| 210 | - * | |
| 211 | - * @param role 角色信息 | |
| 212 | - * @return 结果 | |
| 213 | - */ | |
| 214 | - @Override | |
| 215 | - public int updateRoleStatus(SysRole role) | |
| 216 | - { | |
| 217 | - return roleMapper.updateRole(role); | |
| 218 | - } | |
| 219 | - | |
| 220 | - /** | |
| 221 | 133 | * 修改数据权限信息 |
| 222 | - * | |
| 134 | + * | |
| 223 | 135 | * @param role 角色信息 |
| 224 | 136 | * @return 结果 |
| 225 | 137 | */ |
| ... | ... | @@ -237,7 +149,7 @@ public class SysRoleServiceImpl implements ISysRoleService |
| 237 | 149 | |
| 238 | 150 | /** |
| 239 | 151 | * 新增角色菜单信息 |
| 240 | - * | |
| 152 | + * | |
| 241 | 153 | * @param role 角色对象 |
| 242 | 154 | */ |
| 243 | 155 | public int insertRoleMenu(SysRole role) |
| ... | ... | @@ -285,7 +197,7 @@ public class SysRoleServiceImpl implements ISysRoleService |
| 285 | 197 | |
| 286 | 198 | /** |
| 287 | 199 | * 通过角色ID删除角色 |
| 288 | - * | |
| 200 | + * | |
| 289 | 201 | * @param roleId 角色ID |
| 290 | 202 | * @return 结果 |
| 291 | 203 | */ |
| ... | ... | @@ -302,7 +214,7 @@ public class SysRoleServiceImpl implements ISysRoleService |
| 302 | 214 | |
| 303 | 215 | /** |
| 304 | 216 | * 批量删除角色信息 |
| 305 | - * | |
| 217 | + * | |
| 306 | 218 | * @param roleIds 需要删除的角色ID |
| 307 | 219 | * @return 结果 |
| 308 | 220 | */ | ... | ... |
src/main/java/cn/iocoder/dashboard/framework/mybatis/config/MybatisConfiguration.java
| 1 | 1 | package cn.iocoder.dashboard.framework.mybatis.config; |
| 2 | 2 | |
| 3 | +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; | |
| 4 | +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; | |
| 3 | 5 | import org.apache.ibatis.annotations.Mapper; |
| 4 | 6 | import org.mybatis.spring.annotation.MapperScan; |
| 7 | +import org.springframework.context.annotation.Bean; | |
| 5 | 8 | import org.springframework.context.annotation.Configuration; |
| 6 | 9 | |
| 7 | 10 | /** |
| ... | ... | @@ -12,4 +15,12 @@ import org.springframework.context.annotation.Configuration; |
| 12 | 15 | @Configuration |
| 13 | 16 | @MapperScan(value = "cn.iocoder.dashboard", annotationClass = Mapper.class) |
| 14 | 17 | public class MybatisConfiguration { |
| 18 | + | |
| 19 | + @Bean | |
| 20 | + public MybatisPlusInterceptor mybatisPlusInterceptor() { | |
| 21 | + MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor(); | |
| 22 | + mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor()); // 分页插件 | |
| 23 | + return mybatisPlusInterceptor; | |
| 24 | + } | |
| 25 | + | |
| 15 | 26 | } | ... | ... |
src/main/java/cn/iocoder/dashboard/framework/mybatis/core/util/MyBatisUtils.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.framework.mybatis.core.util; | |
| 2 | + | |
| 3 | +import cn.hutool.core.collection.CollectionUtil; | |
| 4 | +import cn.iocoder.dashboard.common.pojo.PageParam; | |
| 5 | +import cn.iocoder.dashboard.common.pojo.SortingField; | |
| 6 | +import com.baomidou.mybatisplus.core.metadata.OrderItem; | |
| 7 | +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | |
| 8 | + | |
| 9 | +import java.util.Collection; | |
| 10 | +import java.util.stream.Collectors; | |
| 11 | + | |
| 12 | +/** | |
| 13 | + * MyBatis 工具类 | |
| 14 | + */ | |
| 15 | +public class MyBatisUtils { | |
| 16 | + | |
| 17 | + public static <T> Page<T> buildPage(PageParam pageParam) { | |
| 18 | + return buildPage(pageParam, null); | |
| 19 | + } | |
| 20 | + | |
| 21 | + public static <T> Page<T> buildPage(PageParam pageParam, Collection<SortingField> sortingFields) { | |
| 22 | + // 页码 + 数量 | |
| 23 | + Page<T> page = new Page<>(pageParam.getPageNo(), pageParam.getPageSize()); | |
| 24 | + // 排序字段 | |
| 25 | + if (!CollectionUtil.isEmpty(sortingFields)) { | |
| 26 | + page.addOrder(sortingFields.stream().map(sortingField -> SortingField.ORDER_ASC.equals(sortingField.getOrder()) ? | |
| 27 | + OrderItem.asc(sortingField.getField()) : OrderItem.desc(sortingField.getField())) | |
| 28 | + .collect(Collectors.toList())); | |
| 29 | + } | |
| 30 | + return page; | |
| 31 | + } | |
| 32 | + | |
| 33 | +} | ... | ... |
src/main/java/cn/iocoder/dashboard/framework/security/core/enums/DataScopeEnum.java
| ... | ... | @@ -15,10 +15,10 @@ import lombok.Getter; |
| 15 | 15 | public enum DataScopeEnum { |
| 16 | 16 | |
| 17 | 17 | ALL(1), // 全部数据权限 |
| 18 | - CUSTOM(2), // 自定数据权限 | |
| 19 | - DEPT(3), // 部门数据权限 | |
| 18 | + DEPT_CUSTOM(2), // 指定部门数据权限 | |
| 19 | + DEPT_ONLY(3), // 部门数据权限 | |
| 20 | 20 | DEPT_AND_CHILD(4), // 部门及以下数据权限 |
| 21 | - SELF(5); // 仅本人数据权限 | |
| 21 | + DEPT_SELF(5); // 仅本人数据权限 | |
| 22 | 22 | |
| 23 | 23 | /** |
| 24 | 24 | * 范围 | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/controller/permission/SysMenuController.java
| ... | ... | @@ -9,6 +9,7 @@ import cn.iocoder.dashboard.modules.system.convert.permission.SysMenuConvert; |
| 9 | 9 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysMenuDO; |
| 10 | 10 | import cn.iocoder.dashboard.modules.system.service.permission.SysMenuService; |
| 11 | 11 | import io.swagger.annotations.Api; |
| 12 | +import io.swagger.annotations.ApiImplicitParam; | |
| 12 | 13 | import io.swagger.annotations.ApiOperation; |
| 13 | 14 | import org.springframework.validation.annotation.Validated; |
| 14 | 15 | import org.springframework.web.bind.annotation.*; |
| ... | ... | @@ -65,7 +66,7 @@ public class SysMenuController { |
| 65 | 66 | // return ajax; |
| 66 | 67 | // } |
| 67 | 68 | |
| 68 | - @ApiOperation("新增菜单") | |
| 69 | + @ApiOperation("创建菜单") | |
| 69 | 70 | // @PreAuthorize("@ss.hasPermi('system:menu:add')") |
| 70 | 71 | // @Log(title = "菜单管理", businessType = BusinessType.INSERT) |
| 71 | 72 | @PostMapping("/create") |
| ... | ... | @@ -85,6 +86,7 @@ public class SysMenuController { |
| 85 | 86 | |
| 86 | 87 | @ApiOperation("删除菜单") |
| 87 | 88 | @PostMapping("/delete") |
| 89 | + @ApiImplicitParam(name = "id", value = "角色编号", required= true, example = "1024") | |
| 88 | 90 | // @Log(title = "菜单管理", businessType = BusinessType.DELETE) |
| 89 | 91 | public CommonResult<Boolean> deleteMenu(@RequestParam("id") Long id) { |
| 90 | 92 | menuService.deleteMenu(id); | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/controller/permission/SysRoleController.http
0 → 100644
| 1 | +### /role/create 成功 | |
| 2 | +POST {{baseUrl}}/system/role/create | |
| 3 | +Authorization: Bearer {{token}} | |
| 4 | +Content-Type: application/json | |
| 5 | + | |
| 6 | +{ | |
| 7 | + "name": "测试角色", | |
| 8 | + "code": "test", | |
| 9 | + "sort": 0 | |
| 10 | +} | |
| 11 | + | |
| 12 | +### /role/update 成功 | |
| 13 | +POST {{baseUrl}}/system/role/update | |
| 14 | +Authorization: Bearer {{token}} | |
| 15 | +Content-Type: application/json | |
| 16 | + | |
| 17 | + | |
| 18 | +{ | |
| 19 | + "id": 100, | |
| 20 | + "name": "测试角色", | |
| 21 | + "code": "test", | |
| 22 | + "sort": 10 | |
| 23 | +} | |
| 24 | +### /resource/delete 成功 | |
| 25 | +POST {{baseUrl}}/system/role/delete | |
| 26 | +Content-Type: application/x-www-form-urlencoded | |
| 27 | +Authorization: Bearer {{token}} | |
| 28 | + | |
| 29 | +roleId=14 | |
| 30 | + | |
| 31 | +### /role/get 成功 | |
| 32 | +GET {{baseUrl}}/system/role/get?id=100 | |
| 33 | +Content-Type: application/x-www-form-urlencoded | |
| 34 | +Authorization: Bearer {{token}} | |
| 35 | + | |
| 36 | +### /role/page 成功 | |
| 37 | +GET {{baseUrl}}/system/role/page?pageNo=1&pageSize=10 | |
| 38 | +Authorization: Bearer {{token}} | |
| 39 | + | |
| 40 | +### | |
| 41 | + | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/controller/permission/SysRoleController.java
| 1 | 1 | package cn.iocoder.dashboard.modules.system.controller.permission; |
| 2 | 2 | |
| 3 | +import cn.iocoder.dashboard.common.pojo.CommonResult; | |
| 4 | +import cn.iocoder.dashboard.common.pojo.PageResult; | |
| 5 | +import cn.iocoder.dashboard.modules.system.controller.permission.vo.role.SysRoleCreateReqVO; | |
| 6 | +import cn.iocoder.dashboard.modules.system.controller.permission.vo.role.SysRolePageReqVO; | |
| 7 | +import cn.iocoder.dashboard.modules.system.controller.permission.vo.role.SysRoleRespVO; | |
| 8 | +import cn.iocoder.dashboard.modules.system.controller.permission.vo.role.SysRoleUpdateReqVO; | |
| 9 | +import cn.iocoder.dashboard.modules.system.convert.permission.SysRoleConvert; | |
| 10 | +import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysRoleDO; | |
| 11 | +import cn.iocoder.dashboard.modules.system.service.permission.SysRoleService; | |
| 3 | 12 | import io.swagger.annotations.Api; |
| 4 | -import org.springframework.web.bind.annotation.RequestMapping; | |
| 5 | -import org.springframework.web.bind.annotation.RestController; | |
| 13 | +import io.swagger.annotations.ApiImplicitParam; | |
| 14 | +import io.swagger.annotations.ApiImplicitParams; | |
| 15 | +import io.swagger.annotations.ApiOperation; | |
| 16 | +import org.springframework.validation.annotation.Validated; | |
| 17 | +import org.springframework.web.bind.annotation.*; | |
| 18 | + | |
| 19 | +import javax.annotation.Resource; | |
| 20 | + | |
| 21 | +import static cn.iocoder.dashboard.common.pojo.CommonResult.success; | |
| 6 | 22 | |
| 7 | 23 | @Api(tags = "角色 API") |
| 8 | 24 | @RestController |
| 9 | 25 | @RequestMapping("/system/role") |
| 10 | 26 | public class SysRoleController { |
| 11 | 27 | |
| 28 | + @Resource | |
| 29 | + private SysRoleService roleService; | |
| 30 | + | |
| 31 | + @ApiOperation("获得角色分页") | |
| 32 | + @GetMapping("/page") | |
| 12 | 33 | // @PreAuthorize("@ss.hasPermi('system:role:list')") |
| 13 | -// @GetMapping("/list") | |
| 14 | -// public TableDataInfo list(SysRole role) | |
| 15 | -// { | |
| 16 | -// startPage(); | |
| 17 | -// List<SysRole> list = roleService.selectRoleList(role); | |
| 18 | -// return getDataTable(list); | |
| 19 | -// } | |
| 20 | -// | |
| 34 | + public CommonResult<PageResult<SysRoleDO>> list(SysRolePageReqVO reqVO) { | |
| 35 | + return success(roleService.pageRole(reqVO)); | |
| 36 | + } | |
| 37 | + | |
| 38 | + @ApiOperation("创建角色") | |
| 39 | + @PostMapping("/create") | |
| 40 | +// @PreAuthorize("@ss.hasPermi('system:role:add')") | |
| 41 | +// @Log(title = "角色管理", businessType = BusinessType.INSERT) | |
| 42 | + public CommonResult<Long> add(@Validated @RequestBody SysRoleCreateReqVO reqVO) { | |
| 43 | + return success(roleService.createRole(reqVO)); | |
| 44 | + } | |
| 45 | + | |
| 46 | + @ApiOperation("修改角色") | |
| 47 | +// @PreAuthorize("@ss.hasPermi('system:role:edit')") | |
| 48 | +// @Log(title = "角色管理", businessType = BusinessType.UPDATE) | |
| 49 | + @PostMapping("/update") | |
| 50 | + public CommonResult<Boolean> update(@Validated @RequestBody SysRoleUpdateReqVO reqVO) { | |
| 51 | + roleService.updateRole(reqVO); | |
| 52 | + return success(true); | |
| 53 | + } | |
| 54 | + | |
| 55 | + @ApiOperation("删除角色") | |
| 56 | + @PostMapping("/delete") | |
| 57 | + @ApiImplicitParam(name = "id", value = "角色编号", required = true, example = "1024") | |
| 58 | +// @PreAuthorize("@ss.hasPermi('system:role:remove')") | |
| 59 | +// @Log(title = "角色管理", businessType = BusinessType.DELETE) | |
| 60 | + public CommonResult<Boolean> remove(@RequestParam("id") Long id) { | |
| 61 | + roleService.deleteRole(id); | |
| 62 | + return success(true); | |
| 63 | + } | |
| 64 | + | |
| 65 | + @ApiOperation("获得角色信息") | |
| 66 | + @GetMapping("/get") | |
| 67 | +// @PreAuthorize("@ss.hasPermi('system:role:query')") | |
| 68 | + public CommonResult<SysRoleRespVO> getRole(@RequestParam("id") Long id) { | |
| 69 | + SysRoleDO role = roleService.getRole(id); | |
| 70 | + return success(SysRoleConvert.INSTANCE.convert(role)); | |
| 71 | + } | |
| 72 | + | |
| 21 | 73 | // @Log(title = "角色管理", businessType = BusinessType.EXPORT) |
| 22 | 74 | // @PreAuthorize("@ss.hasPermi('system:role:export')") |
| 23 | 75 | // @GetMapping("/export") |
| ... | ... | @@ -27,71 +79,20 @@ public class SysRoleController { |
| 27 | 79 | // ExcelUtil<SysRole> util = new ExcelUtil<SysRole>(SysRole.class); |
| 28 | 80 | // return util.exportExcel(list, "角色数据"); |
| 29 | 81 | // } |
| 30 | -// | |
| 31 | -// /** | |
| 32 | -// * 根据角色编号获取详细信息 | |
| 33 | -// */ | |
| 34 | -// @PreAuthorize("@ss.hasPermi('system:role:query')") | |
| 35 | -// @GetMapping(value = "/{roleId}") | |
| 36 | -// public AjaxResult getInfo(@PathVariable Long roleId) | |
| 37 | -// { | |
| 38 | -// return AjaxResult.success(roleService.selectRoleById(roleId)); | |
| 39 | -// } | |
| 40 | -// | |
| 41 | -// /** | |
| 42 | -// * 新增角色 | |
| 43 | -// */ | |
| 44 | -// @PreAuthorize("@ss.hasPermi('system:role:add')") | |
| 45 | -// @Log(title = "角色管理", businessType = BusinessType.INSERT) | |
| 46 | -// @PostMapping | |
| 47 | -// public AjaxResult add(@Validated @RequestBody SysRole role) | |
| 48 | -// { | |
| 49 | -// if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role))) | |
| 50 | -// { | |
| 51 | -// return AjaxResult.error("新增角色'" + role.getRoleName() + "'失败,角色名称已存在"); | |
| 52 | -// } | |
| 53 | -// else if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleKeyUnique(role))) | |
| 54 | -// { | |
| 55 | -// return AjaxResult.error("新增角色'" + role.getRoleName() + "'失败,角色权限已存在"); | |
| 56 | -// } | |
| 57 | -// role.setCreateBy(SecurityUtils.getUsername()); | |
| 58 | -// return toAjax(roleService.insertRole(role)); | |
| 59 | -// | |
| 60 | -// } | |
| 61 | -// | |
| 62 | -// /** | |
| 63 | -// * 修改保存角色 | |
| 64 | -// */ | |
| 82 | + | |
| 83 | + @ApiOperation("修改角色状态") | |
| 84 | + @PostMapping("/update-status") | |
| 85 | + @ApiImplicitParams(value = { | |
| 86 | + @ApiImplicitParam(name = "id", value = "角色编号", required = true, example = "1024"), | |
| 87 | + @ApiImplicitParam(name = "status", value = "状态", required = true, example = "1") | |
| 88 | + }) | |
| 65 | 89 | // @PreAuthorize("@ss.hasPermi('system:role:edit')") |
| 66 | 90 | // @Log(title = "角色管理", businessType = BusinessType.UPDATE) |
| 67 | -// @PutMapping | |
| 68 | -// public AjaxResult edit(@Validated @RequestBody SysRole role) | |
| 69 | -// { | |
| 70 | -// roleService.checkRoleAllowed(role); | |
| 71 | -// if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role))) | |
| 72 | -// { | |
| 73 | -// return AjaxResult.error("修改角色'" + role.getRoleName() + "'失败,角色名称已存在"); | |
| 74 | -// } | |
| 75 | -// else if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleKeyUnique(role))) | |
| 76 | -// { | |
| 77 | -// return AjaxResult.error("修改角色'" + role.getRoleName() + "'失败,角色权限已存在"); | |
| 78 | -// } | |
| 79 | -// role.setUpdateBy(SecurityUtils.getUsername()); | |
| 80 | -// | |
| 81 | -// if (roleService.updateRole(role) > 0) | |
| 82 | -// { | |
| 83 | -// // 更新缓存用户权限 | |
| 84 | -// LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); | |
| 85 | -// if (StringUtils.isNotNull(loginUser.getUser()) && !loginUser.getUser().isAdmin()) | |
| 86 | -// { | |
| 87 | -// loginUser.setPermissions(permissionService.getMenuPermission(loginUser.getUser())); | |
| 88 | -// loginUser.setUser(userService.selectUserByUserName(loginUser.getUser().getUserName())); | |
| 89 | -// tokenService.setLoginUser(loginUser); | |
| 90 | -// } | |
| 91 | -// return AjaxResult.success(); | |
| 92 | -// } | |
| 93 | -// return AjaxResult.error("修改角色'" + role.getRoleName() + "'失败,请联系管理员"); | |
| 94 | -// } | |
| 91 | + public CommonResult<Boolean> updateRoleStatus(@RequestParam("id") Long id, @RequestParam("status") Integer status) { | |
| 92 | + roleService.updateRoleStatus(id, status); | |
| 93 | + return success(true); | |
| 94 | + } | |
| 95 | + | |
| 95 | 96 | // |
| 96 | 97 | // /** |
| 97 | 98 | // * 修改保存数据权限 |
| ... | ... | @@ -104,30 +105,8 @@ public class SysRoleController { |
| 104 | 105 | // roleService.checkRoleAllowed(role); |
| 105 | 106 | // return toAjax(roleService.authDataScope(role)); |
| 106 | 107 | // } |
| 107 | -// | |
| 108 | -// /** | |
| 109 | -// * 状态修改 | |
| 110 | -// */ | |
| 111 | -// @PreAuthorize("@ss.hasPermi('system:role:edit')") | |
| 112 | -// @Log(title = "角色管理", businessType = BusinessType.UPDATE) | |
| 113 | -// @PutMapping("/changeStatus") | |
| 114 | -// public AjaxResult changeStatus(@RequestBody SysRole role) | |
| 115 | -// { | |
| 116 | -// roleService.checkRoleAllowed(role); | |
| 117 | -// role.setUpdateBy(SecurityUtils.getUsername()); | |
| 118 | -// return toAjax(roleService.updateRoleStatus(role)); | |
| 119 | -// } | |
| 120 | -// | |
| 121 | -// /** | |
| 122 | -// * 删除角色 | |
| 123 | -// */ | |
| 124 | -// @PreAuthorize("@ss.hasPermi('system:role:remove')") | |
| 125 | -// @Log(title = "角色管理", businessType = BusinessType.DELETE) | |
| 126 | -// @DeleteMapping("/{roleIds}") | |
| 127 | -// public AjaxResult remove(@PathVariable Long[] roleIds) | |
| 128 | -// { | |
| 129 | -// return toAjax(roleService.deleteRoleByIds(roleIds)); | |
| 130 | -// } | |
| 108 | + | |
| 109 | + | |
| 131 | 110 | // |
| 132 | 111 | // /** |
| 133 | 112 | // * 获取角色选择框列表 | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/controller/permission/vo/role/SysMenuPageReqVO.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/controller/permission/vo/role/SysRolePageReqVO.java
| ... | ... | @@ -2,12 +2,19 @@ package cn.iocoder.dashboard.modules.system.controller.permission.vo.role; |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.dashboard.common.pojo.PageParam; |
| 4 | 4 | import io.swagger.annotations.ApiModel; |
| 5 | +import io.swagger.annotations.ApiModelProperty; | |
| 5 | 6 | import lombok.Data; |
| 6 | 7 | import lombok.EqualsAndHashCode; |
| 7 | 8 | |
| 8 | 9 | @ApiModel("角色分页 Request VO") |
| 9 | 10 | @Data |
| 10 | 11 | @EqualsAndHashCode(callSuper = true) |
| 11 | -public class SysMenuPageReqVO extends PageParam { | |
| 12 | +public class SysRolePageReqVO extends PageParam { | |
| 13 | + | |
| 14 | + @ApiModelProperty(value = "角色名称", example = "芋道", notes = "模糊匹配") | |
| 15 | + private String name; | |
| 16 | + | |
| 17 | + @ApiModelProperty(value = "展示状态", example = "1", notes = "参见 SysCommonStatusEnum 枚举类") | |
| 18 | + private Integer status; | |
| 12 | 19 | |
| 13 | 20 | } | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/convert/permission/SysRoleConvert.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.convert.permission; | |
| 2 | + | |
| 3 | +import cn.iocoder.dashboard.common.pojo.PageResult; | |
| 4 | +import cn.iocoder.dashboard.modules.system.controller.permission.vo.role.SysRoleCreateReqVO; | |
| 5 | +import cn.iocoder.dashboard.modules.system.controller.permission.vo.role.SysRoleRespVO; | |
| 6 | +import cn.iocoder.dashboard.modules.system.controller.permission.vo.role.SysRoleUpdateReqVO; | |
| 7 | +import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysRoleDO; | |
| 8 | +import com.baomidou.mybatisplus.core.metadata.IPage; | |
| 9 | +import org.mapstruct.Mapper; | |
| 10 | +import org.mapstruct.Mapping; | |
| 11 | +import org.mapstruct.factory.Mappers; | |
| 12 | + | |
| 13 | +@Mapper | |
| 14 | +public interface SysRoleConvert { | |
| 15 | + | |
| 16 | + SysRoleConvert INSTANCE = Mappers.getMapper(SysRoleConvert.class); | |
| 17 | + | |
| 18 | + SysRoleDO convert(SysRoleUpdateReqVO bean); | |
| 19 | + | |
| 20 | + SysRoleRespVO convert(SysRoleDO bean); | |
| 21 | + | |
| 22 | + @Mapping(source = "records", target = "list") | |
| 23 | + PageResult<SysRoleDO> convertPage(IPage<SysRoleDO> page); | |
| 24 | + | |
| 25 | + SysRoleDO convert(SysRoleCreateReqVO bean); | |
| 26 | + | |
| 27 | +} | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dao/permission/SysRoleDeptMapper.java deleted
| 1 | -package cn.iocoder.dashboard.modules.system.dal.mysql.dao.permission; | |
| 2 | - | |
| 3 | -import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysRoleDeptDO; | |
| 4 | -import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |
| 5 | -import org.apache.ibatis.annotations.Mapper; | |
| 6 | - | |
| 7 | -@Mapper | |
| 8 | -public interface SysRoleDeptMapper extends BaseMapper<SysRoleDeptDO> { | |
| 9 | -} |
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dao/permission/SysRoleMapper.java
| 1 | 1 | package cn.iocoder.dashboard.modules.system.dal.mysql.dao.permission; |
| 2 | 2 | |
| 3 | +import cn.iocoder.dashboard.framework.mybatis.core.query.QueryWrapperX; | |
| 4 | +import cn.iocoder.dashboard.framework.mybatis.core.util.MyBatisUtils; | |
| 5 | +import cn.iocoder.dashboard.modules.system.controller.permission.vo.role.SysRolePageReqVO; | |
| 3 | 6 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysRoleDO; |
| 4 | 7 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| 8 | +import com.baomidou.mybatisplus.core.metadata.IPage; | |
| 5 | 9 | import org.apache.ibatis.annotations.Mapper; |
| 6 | 10 | |
| 7 | 11 | @Mapper |
| 8 | 12 | public interface SysRoleMapper extends BaseMapper<SysRoleDO> { |
| 13 | + | |
| 14 | + default IPage<SysRoleDO> selectPage(SysRolePageReqVO reqVO) { | |
| 15 | + return selectPage(MyBatisUtils.buildPage(reqVO), | |
| 16 | + new QueryWrapperX<SysRoleDO>().likeIfPresent("name", reqVO.getName()) | |
| 17 | + .eqIfPresent("status", reqVO.getStatus())); | |
| 18 | + } | |
| 19 | + | |
| 20 | + default SysRoleDO selectByName(String name) { | |
| 21 | + return selectOne(new QueryWrapperX<SysRoleDO>().eq("name", name)); | |
| 22 | + } | |
| 23 | + | |
| 24 | + default SysRoleDO selectByCode(String code) { | |
| 25 | + return selectOne(new QueryWrapperX<SysRoleDO>().eq("code", code)); | |
| 26 | + } | |
| 27 | + | |
| 28 | + | |
| 9 | 29 | } | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dataobject/permission/SysRoleDO.java
| ... | ... | @@ -5,17 +5,21 @@ import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO; |
| 5 | 5 | import cn.iocoder.dashboard.framework.security.core.enums.DataScopeEnum; |
| 6 | 6 | import cn.iocoder.dashboard.modules.system.enums.permission.RoleCodeEnum; |
| 7 | 7 | import cn.iocoder.dashboard.modules.system.enums.permission.RoleTypeEnum; |
| 8 | +import com.baomidou.mybatisplus.annotation.TableField; | |
| 8 | 9 | import com.baomidou.mybatisplus.annotation.TableId; |
| 9 | 10 | import com.baomidou.mybatisplus.annotation.TableName; |
| 11 | +import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler; | |
| 10 | 12 | import lombok.Data; |
| 11 | 13 | import lombok.EqualsAndHashCode; |
| 12 | 14 | |
| 15 | +import java.util.List; | |
| 16 | + | |
| 13 | 17 | /** |
| 14 | 18 | * 角色 DO |
| 15 | 19 | * |
| 16 | 20 | * @author ruoyi |
| 17 | 21 | */ |
| 18 | -@TableName("sys_role") | |
| 22 | +@TableName(value = "sys_role", autoResultMap = true) | |
| 19 | 23 | @Data |
| 20 | 24 | @EqualsAndHashCode(callSuper = true) |
| 21 | 25 | public class SysRoleDO extends BaseDO { |
| ... | ... | @@ -40,17 +44,11 @@ public class SysRoleDO extends BaseDO { |
| 40 | 44 | */ |
| 41 | 45 | private Integer sort; |
| 42 | 46 | /** |
| 43 | - * 数据范围 | |
| 44 | - * | |
| 45 | - * 枚举类 {@link DataScopeEnum} | |
| 46 | - */ | |
| 47 | - private Integer dataScope; | |
| 48 | - /** | |
| 49 | 47 | * 角色状态 |
| 50 | 48 | * |
| 51 | 49 | * 枚举 {@link CommonStatusEnum} |
| 52 | 50 | */ |
| 53 | - private String status; | |
| 51 | + private Integer status; | |
| 54 | 52 | /** |
| 55 | 53 | * 角色类型 |
| 56 | 54 | * |
| ... | ... | @@ -63,13 +61,17 @@ public class SysRoleDO extends BaseDO { |
| 63 | 61 | private String remark; |
| 64 | 62 | |
| 65 | 63 | /** |
| 66 | - * 菜单树选择项是否关联显示( 0:父子不互相关联显示 1:父子互相关联显示) | |
| 64 | + * 数据范围 | |
| 65 | + * | |
| 66 | + * 枚举 {@link DataScopeEnum} | |
| 67 | 67 | */ |
| 68 | - private boolean menuCheckStrictly; | |
| 69 | - | |
| 68 | + private Integer dataScope; | |
| 70 | 69 | /** |
| 71 | - * 部门树选择项是否关联显示(0:父子不互相关联显示 1:父子互相关联显示 ) | |
| 70 | + * 数据范围(指定部门数组) | |
| 71 | + * | |
| 72 | + * 适用于 {@link #dataScope} 的值为 {@link DataScopeEnum#DEPT_CUSTOM} 时 | |
| 72 | 73 | */ |
| 73 | - private boolean deptCheckStrictly; | |
| 74 | + @TableField(typeHandler = FastjsonTypeHandler.class) | |
| 75 | + private List<Long> dataScopeDeptIds; | |
| 74 | 76 | |
| 75 | 77 | } | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dataobject/permission/SysRoleDeptDO.java deleted
| 1 | -package cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission; | |
| 2 | - | |
| 3 | -import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO; | |
| 4 | -import com.baomidou.mybatisplus.annotation.TableId; | |
| 5 | -import com.baomidou.mybatisplus.annotation.TableName; | |
| 6 | -import lombok.Data; | |
| 7 | -import lombok.EqualsAndHashCode; | |
| 8 | - | |
| 9 | -/** | |
| 10 | - * 部门和角色关联 DO | |
| 11 | - * | |
| 12 | - * @author ruoyi | |
| 13 | - */ | |
| 14 | -@TableName("sys_role_dept") | |
| 15 | -@Data | |
| 16 | -@EqualsAndHashCode(callSuper = true) | |
| 17 | -public class SysRoleDeptDO extends BaseDO { | |
| 18 | - | |
| 19 | - /** | |
| 20 | - * 自增主键 | |
| 21 | - */ | |
| 22 | - @TableId | |
| 23 | - private Long id; | |
| 24 | - /** | |
| 25 | - * 部门 ID | |
| 26 | - */ | |
| 27 | - private Long deptId; | |
| 28 | - /** | |
| 29 | - * 角色 ID | |
| 30 | - */ | |
| 31 | - private Long roleId; | |
| 32 | - | |
| 33 | -} |
src/main/java/cn/iocoder/dashboard/modules/system/enums/SysErrorCodeConstants.java
| ... | ... | @@ -26,4 +26,11 @@ public interface SysErrorCodeConstants { |
| 26 | 26 | ErrorCode MENU_EXISTS_CHILDREN = new ErrorCode(1002002004, "存在子菜单,无法删除"); |
| 27 | 27 | ErrorCode MENU_PARENT_NOT_DIR_OR_MENU = new ErrorCode(1002002005, "父菜单的类型必须是目录或者菜单"); |
| 28 | 28 | |
| 29 | + // ========== 角色模块 1002003000 ========== | |
| 30 | + ErrorCode ROLE_NOT_EXISTS = new ErrorCode(1002003000, "角色不存在"); | |
| 31 | + ErrorCode ROLE_NAME_DUPLICATE = new ErrorCode(1002003001, "已经存在名为【{}}】的角色"); | |
| 32 | + ErrorCode ROLE_CODE_DUPLICATE = new ErrorCode(1002003002, "已经存在编码为【{}}】的角色"); | |
| 33 | + ErrorCode ROLE_CAN_NOT_UPDATE_SYSTEM_TYPE_ROLE = new ErrorCode(1002003004, "不能修改类型为系统内置的角色"); | |
| 34 | + ErrorCode ROLE_CAN_NOT_DELETE_SYSTEM_TYPE_ROLE = new ErrorCode(1002003005, "不能删除类型为系统内置的角色"); | |
| 35 | + | |
| 29 | 36 | } | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/service/auth/impl/SysAuthServiceImpl.java
| ... | ... | @@ -5,22 +5,14 @@ import cn.hutool.core.util.StrUtil; |
| 5 | 5 | import cn.iocoder.dashboard.common.enums.CommonStatusEnum; |
| 6 | 6 | import cn.iocoder.dashboard.framework.security.config.SecurityProperties; |
| 7 | 7 | import cn.iocoder.dashboard.framework.security.core.LoginUser; |
| 8 | -import cn.iocoder.dashboard.modules.system.controller.auth.vo.SysAuthMenuRespVO; | |
| 9 | -import cn.iocoder.dashboard.modules.system.controller.auth.vo.SysAuthPermissionInfoRespVO; | |
| 10 | 8 | import cn.iocoder.dashboard.modules.system.convert.auth.SysAuthConvert; |
| 11 | -import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysMenuDO; | |
| 12 | -import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysRoleDO; | |
| 13 | 9 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.user.SysUserDO; |
| 14 | 10 | import cn.iocoder.dashboard.modules.system.dal.redis.dao.auth.SysLoginUserRedisDAO; |
| 15 | -import cn.iocoder.dashboard.modules.system.enums.permission.MenuTypeEnum; | |
| 16 | 11 | import cn.iocoder.dashboard.modules.system.enums.user.UserStatus; |
| 17 | 12 | import cn.iocoder.dashboard.modules.system.service.auth.SysAuthService; |
| 18 | 13 | import cn.iocoder.dashboard.modules.system.service.auth.SysTokenService; |
| 19 | 14 | import cn.iocoder.dashboard.modules.system.service.permission.SysPermissionService; |
| 20 | -import cn.iocoder.dashboard.modules.system.service.permission.SysRoleService; | |
| 21 | 15 | import cn.iocoder.dashboard.modules.system.service.user.SysUserService; |
| 22 | -import cn.iocoder.dashboard.util.collection.CollectionUtils; | |
| 23 | -import cn.iocoder.dashboard.util.collection.SetUtils; | |
| 24 | 16 | import cn.iocoder.dashboard.util.date.DateUtils; |
| 25 | 17 | import io.jsonwebtoken.Claims; |
| 26 | 18 | import io.jsonwebtoken.JwtException; |
| ... | ... | @@ -37,9 +29,8 @@ import org.springframework.stereotype.Service; |
| 37 | 29 | import org.springframework.util.Assert; |
| 38 | 30 | |
| 39 | 31 | import javax.annotation.Resource; |
| 32 | +import java.util.Collections; | |
| 40 | 33 | import java.util.Date; |
| 41 | -import java.util.HashSet; | |
| 42 | -import java.util.List; | |
| 43 | 34 | import java.util.Set; |
| 44 | 35 | |
| 45 | 36 | import static cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil.exception; |
| ... | ... | @@ -64,8 +55,6 @@ public class SysAuthServiceImpl implements SysAuthService { |
| 64 | 55 | @Resource |
| 65 | 56 | private SysUserService userService; |
| 66 | 57 | @Resource |
| 67 | - private SysRoleService roleService; | |
| 68 | - @Resource | |
| 69 | 58 | private SysPermissionService permissionService; |
| 70 | 59 | |
| 71 | 60 | @Resource |
| ... | ... | @@ -92,7 +81,7 @@ public class SysAuthServiceImpl implements SysAuthService { |
| 92 | 81 | // 创建 LoginUser 对象 |
| 93 | 82 | LoginUser loginUser = SysAuthConvert.INSTANCE.convert(user); |
| 94 | 83 | loginUser.setUpdateTime(new Date()); |
| 95 | - loginUser.setRoleIds(this.getUserRoleIds(loginUser.getUserId(), loginUser.getDeptId())); | |
| 84 | + loginUser.setRoleIds(this.getUserRoleIds(loginUser.getUserId())); | |
| 96 | 85 | return loginUser; |
| 97 | 86 | } |
| 98 | 87 | |
| ... | ... | @@ -106,7 +95,7 @@ public class SysAuthServiceImpl implements SysAuthService { |
| 106 | 95 | // 缓存登陆用户到 Redis 中 |
| 107 | 96 | String sessionId = IdUtil.fastSimpleUUID(); |
| 108 | 97 | loginUser.setUpdateTime(new Date()); |
| 109 | - loginUser.setRoleIds(this.getUserRoleIds(loginUser.getUserId(), loginUser.getDeptId())); | |
| 98 | + loginUser.setRoleIds(this.getUserRoleIds(loginUser.getUserId())); | |
| 110 | 99 | loginUserRedisDAO.set(sessionId, loginUser); |
| 111 | 100 | |
| 112 | 101 | // 创建 Token |
| ... | ... | @@ -156,15 +145,10 @@ public class SysAuthServiceImpl implements SysAuthService { |
| 156 | 145 | * 获得 User 拥有的角色编号数组 |
| 157 | 146 | * |
| 158 | 147 | * @param userId 用户编号 |
| 159 | - * @param deptId 科室编号 | |
| 160 | 148 | * @return 角色编号数组 |
| 161 | 149 | */ |
| 162 | - private Set<Long> getUserRoleIds(Long userId, Long deptId) { | |
| 163 | - // 用户拥有的角色 | |
| 164 | - Set<Long> roleIds = new HashSet<>(permissionService.listUserRoleIds(userId)); | |
| 165 | - // 部门拥有的角色 | |
| 166 | - CollectionUtils.addIfNotNull(roleIds, permissionService.getDeptRoleId(deptId)); | |
| 167 | - return roleIds; | |
| 150 | + private Set<Long> getUserRoleIds(Long userId) { | |
| 151 | + return permissionService.listUserRoleIds(userId, Collections.singleton(CommonStatusEnum.ENABLE.getStatus())); | |
| 168 | 152 | } |
| 169 | 153 | |
| 170 | 154 | @Override |
| ... | ... | @@ -222,7 +206,7 @@ public class SysAuthServiceImpl implements SysAuthService { |
| 222 | 206 | // 刷新 LoginUser 缓存 |
| 223 | 207 | loginUser.setDeptId(user.getDeptId()); |
| 224 | 208 | loginUser.setUpdateTime(new Date()); |
| 225 | - loginUser.setRoleIds(this.getUserRoleIds(loginUser.getUserId(), loginUser.getDeptId())); | |
| 209 | + loginUser.setRoleIds(this.getUserRoleIds(loginUser.getUserId())); | |
| 226 | 210 | loginUserRedisDAO.set(sessionId, loginUser); |
| 227 | 211 | } |
| 228 | 212 | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/service/permission/SysPermissionService.java
| ... | ... | @@ -2,8 +2,10 @@ package cn.iocoder.dashboard.modules.system.service.permission; |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysMenuDO; |
| 4 | 4 | |
| 5 | +import javax.annotation.Nullable; | |
| 5 | 6 | import java.util.Collection; |
| 6 | 7 | import java.util.List; |
| 8 | +import java.util.Set; | |
| 7 | 9 | |
| 8 | 10 | /** |
| 9 | 11 | * 权限 Service 接口 |
| ... | ... | @@ -33,26 +35,26 @@ public interface SysPermissionService { |
| 33 | 35 | Collection<Integer> menusStatuses); |
| 34 | 36 | |
| 35 | 37 | /** |
| 36 | - * 获得用户拥有的角色编号数组 | |
| 38 | + * 获得用户拥有的角色编号集合 | |
| 37 | 39 | * |
| 38 | 40 | * @param userId 用户编号 |
| 39 | - * @return 角色编号数组 | |
| 41 | + * @param roleStatuses 角色状态集合. 允许为空,为空时不过滤 | |
| 42 | + * @return 角色编号集合 | |
| 40 | 43 | */ |
| 41 | - List<Long> listUserRoleIds(Long userId); | |
| 44 | + Set<Long> listUserRoleIds(Long userId, @Nullable Collection<Integer> roleStatuses); | |
| 42 | 45 | |
| 43 | 46 | /** |
| 44 | - * 获得部门拥有的角色编号 | |
| 47 | + * 处理角色删除时,删除关联授权角色 | |
| 45 | 48 | * |
| 46 | - * @param deptId 部门编号 | |
| 47 | - * @return 角色编号 | |
| 49 | + * @param roleId 角色编号 | |
| 48 | 50 | */ |
| 49 | - Long getDeptRoleId(Long deptId); | |
| 51 | + void processRoleDeleted(Long roleId); | |
| 50 | 52 | |
| 51 | 53 | /** |
| 52 | - * 删除授予给角色的菜单们 | |
| 54 | + * 处理菜单删除时,删除关联授权数据 | |
| 53 | 55 | * |
| 54 | 56 | * @param menuId 菜单编号 |
| 55 | 57 | */ |
| 56 | - void deleteRolesMenuByMenuId(Long menuId); | |
| 58 | + void processMenuDeleted(Long menuId); | |
| 57 | 59 | |
| 58 | 60 | } | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/service/permission/SysRoleService.java
| 1 | 1 | package cn.iocoder.dashboard.modules.system.service.permission; |
| 2 | 2 | |
| 3 | +import cn.iocoder.dashboard.common.pojo.PageResult; | |
| 4 | +import cn.iocoder.dashboard.modules.system.controller.permission.vo.role.SysRoleCreateReqVO; | |
| 5 | +import cn.iocoder.dashboard.modules.system.controller.permission.vo.role.SysRolePageReqVO; | |
| 6 | +import cn.iocoder.dashboard.modules.system.controller.permission.vo.role.SysRoleUpdateReqVO; | |
| 3 | 7 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysRoleDO; |
| 4 | 8 | |
| 5 | 9 | import java.util.Collection; |
| ... | ... | @@ -18,12 +22,20 @@ public interface SysRoleService { |
| 18 | 22 | void init(); |
| 19 | 23 | |
| 20 | 24 | /** |
| 25 | + * 获得角色,从缓存中 | |
| 26 | + * | |
| 27 | + * @param id 角色编号 | |
| 28 | + * @return 角色 | |
| 29 | + */ | |
| 30 | + SysRoleDO getRoleFromCache(Long id); | |
| 31 | + | |
| 32 | + /** | |
| 21 | 33 | * 获得角色数组,从缓存中 |
| 22 | 34 | * |
| 23 | - * @param roleIds 角色编号数组 | |
| 35 | + * @param ids 角色编号数组 | |
| 24 | 36 | * @return 角色数组 |
| 25 | 37 | */ |
| 26 | - List<SysRoleDO> listRolesFromCache(Collection<Long> roleIds); | |
| 38 | + List<SysRoleDO> listRolesFromCache(Collection<Long> ids); | |
| 27 | 39 | |
| 28 | 40 | /** |
| 29 | 41 | * 判断角色数组中,是否有管理员 |
| ... | ... | @@ -33,4 +45,50 @@ public interface SysRoleService { |
| 33 | 45 | */ |
| 34 | 46 | boolean hasAnyAdmin(Collection<SysRoleDO> roleList); |
| 35 | 47 | |
| 48 | + /** | |
| 49 | + * 创建角色 | |
| 50 | + * | |
| 51 | + * @param reqVO 创建角色信息 | |
| 52 | + * @return 角色编号 | |
| 53 | + */ | |
| 54 | + Long createRole(SysRoleCreateReqVO reqVO); | |
| 55 | + | |
| 56 | + /** | |
| 57 | + * 更新角色 | |
| 58 | + * | |
| 59 | + * @param reqVO 更新角色信息 | |
| 60 | + */ | |
| 61 | + void updateRole(SysRoleUpdateReqVO reqVO); | |
| 62 | + | |
| 63 | + /** | |
| 64 | + * 删除角色 | |
| 65 | + * | |
| 66 | + * @param id 角色编号 | |
| 67 | + */ | |
| 68 | + void deleteRole(Long id); | |
| 69 | + | |
| 70 | + /** | |
| 71 | + * 获得角色 | |
| 72 | + * | |
| 73 | + * @param id 角色编号 | |
| 74 | + * @return 角色 | |
| 75 | + */ | |
| 76 | + SysRoleDO getRole(Long id); | |
| 77 | + | |
| 78 | + /** | |
| 79 | + * 获得角色分页 | |
| 80 | + * | |
| 81 | + * @param reqVO 角色分页查询 | |
| 82 | + * @return 角色分页结果 | |
| 83 | + */ | |
| 84 | + PageResult<SysRoleDO> pageRole(SysRolePageReqVO reqVO); | |
| 85 | + | |
| 86 | + /** | |
| 87 | + * 更新角色状态 | |
| 88 | + * | |
| 89 | + * @param id 角色编号 | |
| 90 | + * @param status 状态 | |
| 91 | + */ | |
| 92 | + void updateRoleStatus(Long id, Integer status); | |
| 93 | + | |
| 36 | 94 | } | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/service/permission/impl/SysMenuServiceImpl.java
| ... | ... | @@ -160,7 +160,7 @@ public class SysMenuServiceImpl implements SysMenuService { |
| 160 | 160 | // 标记删除 |
| 161 | 161 | menuMapper.deleteById(menuId); |
| 162 | 162 | // 删除授予给角色的权限 |
| 163 | - permissionService.deleteRolesMenuByMenuId(menuId); | |
| 163 | + permissionService.processMenuDeleted(menuId); | |
| 164 | 164 | } |
| 165 | 165 | |
| 166 | 166 | @Override | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/service/permission/impl/SysPermissionServiceImpl.java
| 1 | 1 | package cn.iocoder.dashboard.modules.system.service.permission.impl; |
| 2 | 2 | |
| 3 | -import cn.iocoder.dashboard.modules.system.dal.mysql.dao.permission.SysRoleDeptMapper; | |
| 3 | +import cn.hutool.core.collection.CollectionUtil; | |
| 4 | 4 | import cn.iocoder.dashboard.modules.system.dal.mysql.dao.permission.SysRoleMenuMapper; |
| 5 | 5 | import cn.iocoder.dashboard.modules.system.dal.mysql.dao.permission.SysUserRoleMapper; |
| 6 | -import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.*; | |
| 6 | +import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysMenuDO; | |
| 7 | +import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysRoleDO; | |
| 8 | +import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysRoleMenuDO; | |
| 9 | +import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysUserRoleDO; | |
| 7 | 10 | import cn.iocoder.dashboard.modules.system.service.permission.SysMenuService; |
| 8 | 11 | import cn.iocoder.dashboard.modules.system.service.permission.SysPermissionService; |
| 9 | 12 | import cn.iocoder.dashboard.modules.system.service.permission.SysRoleService; |
| ... | ... | @@ -19,11 +22,12 @@ import javax.annotation.Resource; |
| 19 | 22 | import java.util.Collection; |
| 20 | 23 | import java.util.Collections; |
| 21 | 24 | import java.util.List; |
| 25 | +import java.util.Set; | |
| 22 | 26 | |
| 23 | 27 | /** |
| 24 | 28 | * 权限 Service 实现类 |
| 25 | 29 | * |
| 26 | - * @author 初始化 | |
| 30 | + * @author 芋道源码 | |
| 27 | 31 | */ |
| 28 | 32 | @Service |
| 29 | 33 | @Slf4j |
| ... | ... | @@ -50,8 +54,6 @@ public class SysPermissionServiceImpl implements SysPermissionService { |
| 50 | 54 | private SysRoleMenuMapper roleMenuMapper; |
| 51 | 55 | @Resource |
| 52 | 56 | private SysUserRoleMapper userRoleMapper; |
| 53 | - @Resource | |
| 54 | - private SysRoleDeptMapper roleDeptMapper; | |
| 55 | 57 | |
| 56 | 58 | @Resource |
| 57 | 59 | private SysRoleService roleService; |
| ... | ... | @@ -96,19 +98,29 @@ public class SysPermissionServiceImpl implements SysPermissionService { |
| 96 | 98 | } |
| 97 | 99 | |
| 98 | 100 | @Override |
| 99 | - public List<Long> listUserRoleIds(Long userId) { | |
| 101 | + public Set<Long> listUserRoleIds(Long userId, Collection<Integer> roleStatuses) { | |
| 100 | 102 | List<SysUserRoleDO> userRoleList = userRoleMapper.selectListByUserId(userId); |
| 101 | - return CollectionUtils.convertList(userRoleList, SysUserRoleDO::getRoleId); | |
| 103 | + // 过滤角色状态 | |
| 104 | + if (CollectionUtil.isNotEmpty(roleStatuses)) { | |
| 105 | + userRoleList.removeIf(userRoleDO -> { | |
| 106 | + SysRoleDO role = roleService.getRoleFromCache(userRoleDO.getRoleId()); | |
| 107 | + return role == null || !roleStatuses.contains(role.getStatus()); | |
| 108 | + }); | |
| 109 | + } | |
| 110 | + return CollectionUtils.convertSet(userRoleList, SysUserRoleDO::getRoleId); | |
| 102 | 111 | } |
| 103 | 112 | |
| 104 | 113 | @Override |
| 105 | - public Long getDeptRoleId(Long deptId) { | |
| 106 | - SysRoleDeptDO roleDept = roleDeptMapper.selectById(deptId); | |
| 107 | - return roleDept != null ? roleDept.getRoleId() : null; | |
| 114 | + public void processRoleDeleted(Long roleId) { | |
| 115 | + // TODO 实现我 | |
| 116 | +// // 标记删除 RoleResource | |
| 117 | +// roleResourceMapper.deleteByRoleId(roleId); | |
| 118 | +// // 标记删除 AdminRole | |
| 119 | +// adminRoleMapper.deleteByRoleId(roleId); | |
| 108 | 120 | } |
| 109 | 121 | |
| 110 | 122 | @Override |
| 111 | - public void deleteRolesMenuByMenuId(Long menuId) { | |
| 123 | + public void processMenuDeleted(Long menuId) { | |
| 112 | 124 | // TODO 实现我 |
| 113 | 125 | } |
| 114 | 126 | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/service/permission/impl/SysRoleServiceImpl.java
| 1 | 1 | package cn.iocoder.dashboard.modules.system.service.permission.impl; |
| 2 | 2 | |
| 3 | 3 | import cn.hutool.core.collection.CollectionUtil; |
| 4 | +import cn.iocoder.dashboard.common.enums.CommonStatusEnum; | |
| 5 | +import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil; | |
| 6 | +import cn.iocoder.dashboard.common.pojo.PageResult; | |
| 7 | +import cn.iocoder.dashboard.modules.system.controller.permission.vo.role.SysRoleCreateReqVO; | |
| 8 | +import cn.iocoder.dashboard.modules.system.controller.permission.vo.role.SysRolePageReqVO; | |
| 9 | +import cn.iocoder.dashboard.modules.system.controller.permission.vo.role.SysRoleUpdateReqVO; | |
| 10 | +import cn.iocoder.dashboard.modules.system.convert.permission.SysRoleConvert; | |
| 4 | 11 | import cn.iocoder.dashboard.modules.system.dal.mysql.dao.permission.SysRoleMapper; |
| 5 | 12 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysRoleDO; |
| 6 | 13 | import cn.iocoder.dashboard.modules.system.enums.permission.RoleCodeEnum; |
| 14 | +import cn.iocoder.dashboard.modules.system.enums.permission.RoleTypeEnum; | |
| 15 | +import cn.iocoder.dashboard.modules.system.service.permission.SysPermissionService; | |
| 7 | 16 | import cn.iocoder.dashboard.modules.system.service.permission.SysRoleService; |
| 17 | +import com.baomidou.mybatisplus.core.metadata.IPage; | |
| 8 | 18 | import com.google.common.collect.ImmutableMap; |
| 9 | 19 | import lombok.extern.slf4j.Slf4j; |
| 10 | 20 | import org.springframework.stereotype.Service; |
| 21 | +import org.springframework.util.StringUtils; | |
| 11 | 22 | |
| 12 | 23 | import javax.annotation.PostConstruct; |
| 13 | 24 | import javax.annotation.Resource; |
| ... | ... | @@ -17,14 +28,21 @@ import java.util.List; |
| 17 | 28 | import java.util.Map; |
| 18 | 29 | import java.util.stream.Collectors; |
| 19 | 30 | |
| 31 | +import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.*; | |
| 32 | + | |
| 20 | 33 | /** |
| 21 | 34 | * 角色 Service 实现类 |
| 35 | + * | |
| 36 | + * @author 芋道源码 | |
| 22 | 37 | */ |
| 23 | 38 | @Service |
| 24 | 39 | @Slf4j |
| 25 | 40 | public class SysRoleServiceImpl implements SysRoleService { |
| 26 | 41 | |
| 27 | 42 | @Resource |
| 43 | + private SysPermissionService permissionService; | |
| 44 | + | |
| 45 | + @Resource | |
| 28 | 46 | private SysRoleMapper roleMapper; |
| 29 | 47 | |
| 30 | 48 | /** |
| ... | ... | @@ -51,11 +69,16 @@ public class SysRoleServiceImpl implements SysRoleService { |
| 51 | 69 | } |
| 52 | 70 | |
| 53 | 71 | @Override |
| 54 | - public List<SysRoleDO> listRolesFromCache(Collection<Long> roleIds) { | |
| 55 | - if (CollectionUtil.isEmpty(roleIds)) { | |
| 72 | + public SysRoleDO getRoleFromCache(Long id) { | |
| 73 | + return roleCache.get(id); | |
| 74 | + } | |
| 75 | + | |
| 76 | + @Override | |
| 77 | + public List<SysRoleDO> listRolesFromCache(Collection<Long> ids) { | |
| 78 | + if (CollectionUtil.isEmpty(ids)) { | |
| 56 | 79 | return Collections.emptyList(); |
| 57 | 80 | } |
| 58 | - return roleCache.values().stream().filter(roleDO -> roleIds.contains(roleDO.getId())) | |
| 81 | + return roleCache.values().stream().filter(roleDO -> ids.contains(roleDO.getId())) | |
| 59 | 82 | .collect(Collectors.toList()); |
| 60 | 83 | } |
| 61 | 84 | |
| ... | ... | @@ -67,4 +90,104 @@ public class SysRoleServiceImpl implements SysRoleService { |
| 67 | 90 | return roleList.stream().anyMatch(roleDO -> RoleCodeEnum.ADMIN.getKey().equals(roleDO.getCode())); |
| 68 | 91 | } |
| 69 | 92 | |
| 93 | + @Override | |
| 94 | + public Long createRole(SysRoleCreateReqVO reqVO) { | |
| 95 | + // 校验角色 | |
| 96 | + checkDuplicateRole(reqVO.getName(), reqVO.getCode(), null); | |
| 97 | + // 插入到数据库 | |
| 98 | + SysRoleDO role = SysRoleConvert.INSTANCE.convert(reqVO); | |
| 99 | + role.setType(RoleTypeEnum.CUSTOM.getType()); | |
| 100 | + role.setStatus(CommonStatusEnum.ENABLE.getStatus()); | |
| 101 | + roleMapper.insert(role); | |
| 102 | + // 返回 | |
| 103 | + return role.getId(); | |
| 104 | + } | |
| 105 | + | |
| 106 | + @Override | |
| 107 | + public void updateRole(SysRoleUpdateReqVO reqVO) { | |
| 108 | + // 校验更新的角色是否存在 | |
| 109 | + SysRoleDO role = roleMapper.selectById(reqVO.getId()); | |
| 110 | + if (roleMapper.selectById(reqVO.getId()) == null) { | |
| 111 | + throw ServiceExceptionUtil.exception(ROLE_NOT_EXISTS); | |
| 112 | + } | |
| 113 | + // 内置角色,不允许修改 | |
| 114 | + if (RoleTypeEnum.SYSTEM.getType().equals(role.getType())) { | |
| 115 | + throw ServiceExceptionUtil.exception(ROLE_CAN_NOT_UPDATE_SYSTEM_TYPE_ROLE); | |
| 116 | + } | |
| 117 | + // 校验角色的唯一字段是否重复 | |
| 118 | + checkDuplicateRole(reqVO.getName(), reqVO.getCode(), reqVO.getId()); | |
| 119 | + // 更新到数据库 | |
| 120 | + SysRoleDO updateObject = SysRoleConvert.INSTANCE.convert(reqVO); | |
| 121 | + roleMapper.updateById(updateObject); | |
| 122 | + } | |
| 123 | + | |
| 124 | + @Override | |
| 125 | + public void deleteRole(Long id) { | |
| 126 | + // 校验删除的角色是否存在 | |
| 127 | + SysRoleDO roleDO = roleMapper.selectById(id); | |
| 128 | + if (roleMapper.selectById(id) == null) { | |
| 129 | + throw ServiceExceptionUtil.exception(ROLE_NOT_EXISTS); | |
| 130 | + } | |
| 131 | + // 内置角色,不允许删除 | |
| 132 | + if (RoleTypeEnum.SYSTEM.getType().equals(roleDO.getType())) { | |
| 133 | + throw ServiceExceptionUtil.exception(ROLE_CAN_NOT_DELETE_SYSTEM_TYPE_ROLE); | |
| 134 | + } | |
| 135 | + // 标记删除 | |
| 136 | + roleMapper.deleteById(id); | |
| 137 | + // 删除相关数据 | |
| 138 | + permissionService.processRoleDeleted(id); | |
| 139 | + } | |
| 140 | + | |
| 141 | + @Override | |
| 142 | + public SysRoleDO getRole(Long id) { | |
| 143 | + return roleMapper.selectById(id); | |
| 144 | + } | |
| 145 | + | |
| 146 | + | |
| 147 | + @Override | |
| 148 | + public PageResult<SysRoleDO> pageRole(SysRolePageReqVO reqVO) { | |
| 149 | + IPage<SysRoleDO> roleDOPage = roleMapper.selectPage(reqVO); | |
| 150 | + return SysRoleConvert.INSTANCE.convertPage(roleDOPage); | |
| 151 | + } | |
| 152 | + | |
| 153 | + @Override | |
| 154 | + public void updateRoleStatus(Long id, Integer status) { | |
| 155 | + // 校验修改的角色是否存在 | |
| 156 | + SysRoleDO roleDO = roleMapper.selectById(id); | |
| 157 | + if (roleMapper.selectById(id) == null) { | |
| 158 | + throw ServiceExceptionUtil.exception(ROLE_NOT_EXISTS); | |
| 159 | + } | |
| 160 | + SysRoleDO updateObject = new SysRoleDO(); | |
| 161 | + updateObject.setId(id); | |
| 162 | + updateObject.setStatus(status); | |
| 163 | + roleMapper.updateById(updateObject); | |
| 164 | + } | |
| 165 | + | |
| 166 | + /** | |
| 167 | + * 校验角色的唯一字段是否重复 | |
| 168 | + * | |
| 169 | + * 1. 是否存在相同名字的角色 | |
| 170 | + * 2. 是否存在相同编码的角色 | |
| 171 | + * | |
| 172 | + * @param name 角色名字 | |
| 173 | + * @param code 角色额编码 | |
| 174 | + * @param id 角色编号 | |
| 175 | + */ | |
| 176 | + private void checkDuplicateRole(String name, String code, Long id) { | |
| 177 | + // 1. 该 name 名字被其它角色所使用 | |
| 178 | + SysRoleDO role = roleMapper.selectByName(name); | |
| 179 | + if (role != null && !role.getId().equals(id)) { | |
| 180 | + throw ServiceExceptionUtil.exception(ROLE_NAME_DUPLICATE, name); | |
| 181 | + } | |
| 182 | + // 2. 是否存在相同编码的角色 | |
| 183 | + if (!StringUtils.hasText(code)) { | |
| 184 | + return; | |
| 185 | + } | |
| 186 | + // 该 code 编码被其它角色所使用 | |
| 187 | + role = roleMapper.selectByCode(code); | |
| 188 | + if (role != null && !role.getId().equals(id)) { | |
| 189 | + throw ServiceExceptionUtil.exception(ROLE_CODE_DUPLICATE, name); | |
| 190 | + } | |
| 191 | + } | |
| 192 | + | |
| 70 | 193 | } | ... | ... |
src/main/resources/application.yaml