Przeglądaj źródła

新增角色标识

tsurumure 1 miesiąc temu
rodzic
commit
7747aef12d

+ 9 - 7
db/sys_user_role.sql

@@ -8,22 +8,24 @@ DROP TABLE IF EXISTS `sys_user_role`;
 CREATE TABLE `sys_user_role` (
     PRIMARY KEY (`id`),
     `id` BIGINT AUTO_INCREMENT COMMENT 'ID',
+    `role_sign` VARCHAR(20) COMMENT '角色标志',
     `role_name` VARCHAR(20) NOT NULL COMMENT '角色名称',
     `role_description` VARCHAR(200) COMMENT '角色描述',
     `login_default_page` VARCHAR(255) DEFAULT '/' COMMENT '默认登录路由',
     `sort` INT DEFAULT '1' COMMENT '排序',
     `status` TINYINT(1) DEFAULT '1' COMMENT '角色状态(1正常 2停用)',
+    UNIQUE KEY (`role_sign`),
     UNIQUE KEY (`role_name`),
     INDEX `idx_nickname` (`role_name`)
 ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='系统用户角色表';
 
 # ALTER TABLE sys_user_role_module_relation DROP FOREIGN KEY sys_user_role_module_relation_ibfk_1;
 
-INSERT INTO sys_user_role(role_name, role_description, login_default_page, sort) VALUES
-    ('开发者', '全部权限', '/', 1),
-    ('管理员', '全部功能权限', '/', 2),
-    ('普通用户', '基础权限', '/', 3),
-    ('运营-素材-管理员', '素材管理全权限 (允许查看/下载/上传/删除)', '/material/materialList?lora_id=1', 4),
-    ('运营-素材-普通用户', '允许查看/下载', '/material/materialList?lora_id=1', 5),
-    ('运营-素材-游客', '允许查看', '/material/materialList?lora_id=1', 6)
+INSERT INTO sys_user_role(role_sign, role_name, role_description, login_default_page, sort) VALUES
+    ('SUPERADMIN', '开发者', '全部权限', '/', 1),
+    ('ADMIN', '管理员', '全部功能权限', '/', 2),
+    ('DEFAULT', '普通用户', '基础权限', '/', 3),
+    ('MATERIAL_ADMIN', '运营-素材-管理员', '素材管理全权限 (允许查看/下载/上传/删除)', '/material/materialList?lora_id=1', 4),
+    ('MATERIAL_USER', '运营-素材-普通用户', '允许查看/下载', '/material/materialList?lora_id=1', 5),
+    ('MATERIAL_GUEST', '运营-素材-游客', '允许查看', '/material/materialList?lora_id=1', 6)
 ;

+ 5 - 5
src/main/java/com/backendsys/modules/system/controller/SysUserController.java

@@ -7,7 +7,7 @@ import com.backendsys.modules.common.config.security.enums.SecurityEnum;
 import com.backendsys.modules.common.config.security.utils.SecurityUtil;
 import com.backendsys.modules.common.utils.Result;
 import com.backendsys.modules.system.entity.SysUserDTO;
-import com.backendsys.modules.system.entity.SysUserRoleInfo;
+import com.backendsys.modules.system.entity.SysUserRoleRelation;
 import com.backendsys.modules.system.service.SysUserService;
 import com.backendsys.utils.response.PageEntity;
 import io.swagger.v3.oas.annotations.Operation;
@@ -117,18 +117,18 @@ public class SysUserController {
     @Operation(summary = "编辑系统用户角色绑定")
     @PreAuthorize("@sr.hasPermission('3.2.3.5')")
     @PutMapping("/api/system/user/updateUserRoleInfo")
-    public Result updateUserRoleInfo(@Validated(SysUserRoleInfo.Update.class) @RequestBody SysUserRoleInfo sysUserRoleInfo) {
+    public Result updateUserRoleInfo(@Validated(SysUserRoleRelation.Update.class) @RequestBody SysUserRoleRelation sysUserRoleRelation) {
 
         // - 不传 user_id 时,修改目标为 当前用户
-        Long user_id = sysUserRoleInfo.getUser_id();
+        Long user_id = sysUserRoleRelation.getUser_id();
         if (ObjectUtil.isEmpty(user_id)) {
             user_id = SecurityUtil.getUserId();
-            sysUserRoleInfo.setUser_id(user_id);
+            sysUserRoleRelation.setUser_id(user_id);
         } else if (!SecurityUtil.getUserId().equals(1L) && user_id.equals(1L)) {
             throw new CustException("不能编辑超管账号");
         }
 
-        return Result.success().put("data", sysUserService.updateUserRoleInfo(sysUserRoleInfo));
+        return Result.success().put("data", sysUserService.updateUserRoleRelation(sysUserRoleRelation));
     }
 
     @SysLog("编辑系统用户密码")

+ 2 - 0
src/main/java/com/backendsys/modules/system/entity/SysUserRole.java

@@ -28,6 +28,8 @@ public class SysUserRole {
     @TableField("id")
     private Long role_id;
 
+    private String role_sign;
+
     @Size(min = 2, max = 50, message = "角色名称长度在 {min}-{max} 字符", groups = { Create.class, Update.class })
     private String role_name;
 

+ 11 - 0
src/main/java/com/backendsys/modules/system/entity/SysUserRoleRelation.java

@@ -1,15 +1,26 @@
 package com.backendsys.modules.system.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import jakarta.validation.constraints.NotNull;
 import lombok.Data;
 
+import java.util.List;
+
 @Data
 @TableName("sys_user_role_relation")
 public class SysUserRoleRelation {
+
+    public static interface Update{}
+
     @TableId(type = IdType.AUTO)
     private Long id;
     private Long user_id;
     private Long role_id;
+
+    @TableField(exist = false)
+    @NotNull(message="role_ids 不能为空", groups = { Update.class })
+    private List<Long> role_ids;
 }

+ 1 - 1
src/main/java/com/backendsys/modules/system/service/SysUserService.java

@@ -27,7 +27,7 @@ public interface SysUserService extends IService<SysUser> {
     // 编辑系统用户信息
     Map<String, Object> updateUserInfo(SysUserDTO sysUserDTO);
     // 编辑系统用户角色绑定
-    Map<String, Object> updateUserRoleInfo(SysUserRoleInfo sysUserRoleInfo);
+    Map<String, Object> updateUserRoleRelation(SysUserRoleRelation sysUserRoleRelation);
     // 编辑系统用户密码
     Map<String, Object> updateUserPassword(SysUserDTO sysUserDTO);
     // 重置系统用户密码

+ 14 - 12
src/main/java/com/backendsys/modules/system/service/impl/SysUserServiceImpl.java

@@ -305,23 +305,25 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserDao, SysUser> impleme
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public Map<String, Object> updateUserRoleInfo(SysUserRoleInfo sysUserRoleInfo) {
+    public Map<String, Object> updateUserRoleRelation(SysUserRoleRelation sysUserRoleRelation) {
+        RLock lock = redissonClient.getLock("updateUserRoleRelation");
+        try { lock.tryLock(3, TimeUnit.SECONDS);
 
-        List<Long> role_ids = sysUserRoleInfo.getRole_ids();
-        Long user_id = sysUserRoleInfo.getUser_id();
+            List<Long> role_ids = sysUserRoleRelation.getRole_ids();
+            Long user_id = sysUserRoleRelation.getUser_id();
 
-        // 1.先查询出用户与角色的关系 (sys_user_role_relation)
-        List<Long> origin_role_ids = sysUserRoleRelationDao.selectUserRoleIds(user_id);
+            // 1.删除全部用户与角色的关系 (sys_user_role_relation)
+            LambdaQueryWrapper<SysUserRoleRelation> wrapperRoleRelation = new LambdaQueryWrapper<>();
+            wrapperRoleRelation.eq(SysUserRoleRelation::getUser_id, user_id);
+            sysUserRoleRelationDao.delete(wrapperRoleRelation);
 
-        // 2.删除全部用户与角色的关系 (sys_user_role_relation)
-        LambdaQueryWrapper<SysUserRoleRelation> wrapperRoleRelation = new LambdaQueryWrapper<>();
-        wrapperRoleRelation.eq(SysUserRoleRelation::getUser_id, user_id);
-        sysUserRoleRelationDao.delete(wrapperRoleRelation);
+            // 2.重新添加参数中的角色与权限的关系 (sys_user_role_relation)
+            sysUserRoleRelationDao.insertBatch(user_id, role_ids);
 
-        // 3.重新添加参数中的角色与权限的关系 (sys_user_role_relation)
-        sysUserRoleRelationDao.insertBatch(user_id, role_ids);
+            return Map.of("user_id", sysUserRoleRelation.getUser_id());
 
-        return Map.of("user_id", sysUserRoleInfo.getUser_id());
+        } catch (InterruptedException e) { throw new RuntimeException(e);
+        } finally { lock.unlock(); }
     }
 
     /**

+ 10 - 0
src/main/resources/mapper/system/SysUserRoleDao.xml

@@ -5,6 +5,7 @@
     <sql id="includeUserRole">
         ur.id id,
         ur.id role_id,
+        ur.role_sign role_sign,
         ur.role_name role_name,
         COALESCE(ur.role_description, '') role_description,
         COALESCE(ur.login_default_page, '') login_default_page,
@@ -14,6 +15,7 @@
     <resultMap id="resultMapUserRole" type="java.util.LinkedHashMap">
         <id property="id" column="id" jdbcType="BIGINT" />
         <result property="role_id" column="role_id" javaType="java.lang.Long"/>
+        <result property="role_sign" column="role_sign" />
         <result property="role_name" column="role_name" />
         <result property="role_description" column="role_description" />
         <result property="login_default_page" column="login_default_page" />
@@ -27,6 +29,9 @@
         LEFT JOIN sys_user_role_relation urr ON ur.id = urr.role_id
         LEFT JOIN sys_user us ON us.id = urr.user_id
         <where>
+            <if test="role_sign != null and role_sign != ''">
+                AND ur.role_sign = #{role_sign}
+            </if>
             <if test="role_name != null and role_name != ''">
                 AND ur.role_name LIKE CONCAT('%', #{role_name}, '%')
             </if>
@@ -41,12 +46,14 @@
     <!-- 获得用户角色 (部分字段) -->
     <resultMap id="resultMapUserRoleSimple" type="java.util.LinkedHashMap">
         <result property="role_id" column="role_id" javaType="java.lang.Long" />
+        <result property="role_sign" column="role_sign" />
         <result property="role_name" column="role_name" />
         <result property="login_default_page" column="login_default_page" />
     </resultMap>
     <select id="selectRoleByUserId" resultMap="resultMapUserRoleSimple">
         SELECT
             surr.role_id role_id,
+            sur.role_sign role_sign,
             sur.role_name role_name,
             sur.login_default_page login_default_page
         FROM sys_user_role_relation surr
@@ -58,10 +65,12 @@
     <!-- 创建 用户角色 -->
     <insert id="insertUserRole" parameterType="com.backendsys.entity.System.SysUserRoleDTO" useGeneratedKeys="true" keyProperty="id">
         INSERT INTO sys_user_role (role_name
+            <if test="role_sign != null">, role_sign</if>
             <if test="role_description != null">, role_description</if>
             <if test="sort != null">, sort</if>
             <if test="status != null">, status</if>
         ) VALUES (#{role_name}
+            <if test="role_sign != null">, #{role_sign}</if>
             <if test="role_description != null">, #{role_description}</if>
             <if test="sort != null">, #{sort}</if>
             <if test="status != null">, #{status}</if>
@@ -80,6 +89,7 @@
     <update id="updateUserRole" parameterType="com.backendsys.entity.System.SysUserRoleDTO">
         UPDATE sys_user_role SET
         <trim suffixOverrides="," suffix=" ">
+            <if test="role_sign != null and role_sign != ''">role_sign = #{role_sign},</if>
             <if test="role_name != null and role_name != ''">role_name = #{role_name},</if>
             <if test="role_description != null and role_description != ''">role_description = #{role_description},</if>
             <if test="sort != null and sort != ''">sort = #{sort},</if>