Browse Source

1、更改课程类型选择标签样式组件
2、新增角色web路由权限配置,将课程权限整合在一起更改
3、新增获取用户角色路由权限配置

liyanbo 3 months ago
parent
commit
d4aec0e937

+ 4 - 2
byzs-module-system/src/main/java/cn/iocoder/byzs/module/system/controller/admin/dict/DictDataController.java

@@ -66,9 +66,11 @@ public class DictDataController {
     @GetMapping(value = {"/list-all-simple", "simple-list"})
     @Operation(summary = "获得全部字典数据列表", description = "一般用于管理后台缓存字典数据在本地")
     // 无需添加权限认证,因为前端全局都需要
-    public CommonResult<List<DictDataSimpleRespVO>> getSimpleDictDataList() {
+    public CommonResult<List<DictDataSimpleRespVO>> getSimpleDictDataList(
+            @RequestParam(value = "dictType", required = false) String dictType
+    ) {
         List<DictDataDO> list = dictDataService.getDictDataList(
-                CommonStatusEnum.ENABLE.getStatus(), null);
+                CommonStatusEnum.ENABLE.getStatus(), dictType);
         return success(BeanUtils.toBean(list, DictDataSimpleRespVO.class));
     }
 

+ 10 - 0
byzs-module-system/src/main/java/cn/iocoder/byzs/module/system/controller/admin/permission/PermissionController.java

@@ -97,6 +97,16 @@ public class PermissionController {
         return success(true);
     }
 
+    @PostMapping("/assign-role-web-scope")
+    @Operation(summary = "赋予角色web权限")
+    @PreAuthorize("@ss.hasPermission('system:permission:assign-role-web-scope')")//后续改成web单独权限,目前没办法测试并更改租户默认管理员的权限
+    public CommonResult<Boolean> assignRoleWebScope(@Valid @RequestBody PermissionAssignRoleWebScopeReqVO reqVO) {
+        permissionService.assignRoleWebScope(reqVO);
+        // 更新角色缓存
+//        roleService.getRoleFromCache(reqVO.getRoleId());
+        return success(true);
+    }
+
     @Operation(summary = "获得管理员拥有的角色编号列表")
     @Parameter(name = "userId", description = "用户编号", required = true)
     @GetMapping("/list-user-roles")

+ 30 - 0
byzs-module-system/src/main/java/cn/iocoder/byzs/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleWebScopeReqVO.java

@@ -0,0 +1,30 @@
+package cn.iocoder.byzs.module.system.controller.admin.permission.vo.permission;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.util.Collections;
+import java.util.Set;
+
+@Schema(description = "管理后台 - 赋予角色web权限 Request VO")
+@Data
+public class PermissionAssignRoleWebScopeReqVO {
+
+    @Schema(description = "角色编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @NotNull(message = "角色编号不能为空")
+    private Long roleId;
+
+    @Schema(description = "web路由列表,只有范围类型为 WEB_CUSTOM 时,该字段才需要", example = "1,3,5")
+    private Set<String> dataScopeWebRoute = Collections.emptySet();
+
+    @Schema(description = "课程编号列表,只有范围类型为 COURSE_CUSTOM 时,该字段才需要", example = "1,3,5")
+    private Set<Long> dataScopeCourseIds = Collections.emptySet(); // 兜底
+
+    @Schema(description = "blockly课程编号列表,只有范围类型为 BLOCKLY_CUSTOM 时,该字段才需要", example = "1,3,5")
+    private Set<Long> dataScopeBlocklyIds = Collections.emptySet(); // 兜底
+
+    @Schema(description = "aiCourse课程编号列表,只有范围类型为 AI_COURSE_CUSTOM 时,该字段才需要", example = "1,3,5")
+    private Set<Long> dataScopeAiCourseIds = Collections.emptySet(); // 兜底
+
+}

+ 7 - 1
byzs-module-system/src/main/java/cn/iocoder/byzs/module/system/dal/dataobject/permission/RoleDO.java

@@ -97,7 +97,13 @@ public class RoleDO extends TenantBaseDO {
     @TableField(typeHandler = JacksonTypeHandler.class)
     private Set<Long> dataScopeAiCourseIds;
 
-
+    /**
+     * 数据范围(指定WEB路由数组)
+     *
+     * 适用于 {@link #dataScope} 的值为 {@link DataScopeEnum#WEB_ROUTE_CUSTOM} 时
+     */
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private Set<String> dataScopeWebRoute;
 
 
 }

+ 8 - 0
byzs-module-system/src/main/java/cn/iocoder/byzs/module/system/service/permission/PermissionService.java

@@ -1,6 +1,7 @@
 package cn.iocoder.byzs.module.system.service.permission;
 
 import cn.iocoder.byzs.framework.common.biz.system.permission.dto.DeptDataPermissionRespDTO;
+import cn.iocoder.byzs.module.system.controller.admin.permission.vo.permission.PermissionAssignRoleWebScopeReqVO;
 
 import java.util.Collection;
 import java.util.Set;
@@ -159,6 +160,13 @@ public interface PermissionService {
      */
     void assignRoleAiCourseScope(Long roleId, Set<Long> dataScopeAiCourseIds);
 
+    /**
+     * 设置角色的web权限
+     *
+     * @param reqVO 角色web权限请求VO
+     */
+    void assignRoleWebScope(PermissionAssignRoleWebScopeReqVO reqVO);
+
     /**
      * 获得登陆用户的部门数据权限
      *

+ 6 - 0
byzs-module-system/src/main/java/cn/iocoder/byzs/module/system/service/permission/PermissionServiceImpl.java

@@ -8,6 +8,7 @@ import cn.iocoder.byzs.framework.common.enums.CommonStatusEnum;
 import cn.iocoder.byzs.framework.common.util.collection.CollectionUtils;
 import cn.iocoder.byzs.framework.datapermission.core.annotation.DataPermission;
 import cn.iocoder.byzs.framework.common.biz.system.permission.dto.DeptDataPermissionRespDTO;
+import cn.iocoder.byzs.module.system.controller.admin.permission.vo.permission.PermissionAssignRoleWebScopeReqVO;
 import cn.iocoder.byzs.module.system.dal.dataobject.permission.MenuDO;
 import cn.iocoder.byzs.module.system.dal.dataobject.permission.RoleDO;
 import cn.iocoder.byzs.module.system.dal.dataobject.permission.RoleMenuDO;
@@ -287,6 +288,11 @@ public class PermissionServiceImpl implements PermissionService {
         roleService.updateRoleAiCourseScope(roleId, dataScopeAiCourseIds);
     }
 
+    @Override
+    public void assignRoleWebScope(PermissionAssignRoleWebScopeReqVO reqVO) {
+        roleService.updateRoleWebScope(reqVO);
+    }
+
     @Override
     @DataPermission(enable = false) // 关闭数据权限,不然就会出现递归获取数据权限的问题
     public DeptDataPermissionRespDTO getDeptDataPermission(Long userId) {

+ 8 - 0
byzs-module-system/src/main/java/cn/iocoder/byzs/module/system/service/permission/RoleService.java

@@ -1,6 +1,7 @@
 package cn.iocoder.byzs.module.system.service.permission;
 
 import cn.iocoder.byzs.framework.common.pojo.PageResult;
+import cn.iocoder.byzs.module.system.controller.admin.permission.vo.permission.PermissionAssignRoleWebScopeReqVO;
 import cn.iocoder.byzs.module.system.controller.admin.permission.vo.role.RolePageReqVO;
 import cn.iocoder.byzs.module.system.controller.admin.permission.vo.role.RoleSaveReqVO;
 import cn.iocoder.byzs.module.system.dal.dataobject.permission.RoleDO;
@@ -71,6 +72,13 @@ public interface RoleService {
      */
     void updateRoleAiCourseScope(Long id, Set<Long> dataScopeAiCourseIds);
 
+    /**
+     * 设置角色的web权限
+     *
+     * @param reqVO 角色web权限请求VO
+     */
+    void updateRoleWebScope(PermissionAssignRoleWebScopeReqVO reqVO);
+
     /**
      * 获得角色
      *

+ 20 - 0
byzs-module-system/src/main/java/cn/iocoder/byzs/module/system/service/permission/RoleServiceImpl.java

@@ -9,6 +9,7 @@ import cn.iocoder.byzs.framework.common.enums.CommonStatusEnum;
 import cn.iocoder.byzs.framework.common.pojo.PageResult;
 import cn.iocoder.byzs.framework.common.util.collection.CollectionUtils;
 import cn.iocoder.byzs.framework.common.util.object.BeanUtils;
+import cn.iocoder.byzs.module.system.controller.admin.permission.vo.permission.PermissionAssignRoleWebScopeReqVO;
 import cn.iocoder.byzs.module.system.controller.admin.permission.vo.role.RolePageReqVO;
 import cn.iocoder.byzs.module.system.controller.admin.permission.vo.role.RoleSaveReqVO;
 import cn.iocoder.byzs.module.system.dal.dataobject.permission.RoleDO;
@@ -145,6 +146,25 @@ public class RoleServiceImpl implements RoleService {
         roleMapper.updateById(updateObject);
     }
 
+    @Override
+    public void updateRoleWebScope(PermissionAssignRoleWebScopeReqVO reqVO) {
+        // 校验是否可以更新
+        validateRoleForUpdate(reqVO.getRoleId());
+
+        // 更新web权限
+        RoleDO updateObject = new RoleDO();
+        updateObject.setId(reqVO.getRoleId());
+        updateObject.setDataScopeWebRoute(reqVO.getDataScopeWebRoute());
+        Set<Long> dataScopeCourseIds = reqVO.getDataScopeCourseIds();
+        dataScopeCourseIds = dataScopeCourseIds.stream()
+                .map(num -> num / 100)
+                .collect(Collectors.toSet());
+        updateObject.setDataScopeCourseIds(dataScopeCourseIds);
+        updateObject.setDataScopeBlocklyIds(reqVO.getDataScopeBlocklyIds());
+        updateObject.setDataScopeAiCourseIds(reqVO.getDataScopeAiCourseIds());
+        roleMapper.updateById(updateObject);
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     @CacheEvict(value = RedisKeyConstants.ROLE, key = "#id")

+ 37 - 1
byzs-web/src/main/java/cn/iocoder/byzs/module/web/controller/admin/login/WebLoginController.java

@@ -3,18 +3,22 @@ package cn.iocoder.byzs.module.web.controller.admin.login;
 import cn.hutool.core.util.StrUtil;
 import cn.iocoder.byzs.framework.common.enums.CommonStatusEnum;
 import cn.iocoder.byzs.framework.common.pojo.CommonResult;
+import cn.iocoder.byzs.framework.common.util.json.JsonUtils;
 import cn.iocoder.byzs.framework.common.util.object.BeanUtils;
 import cn.iocoder.byzs.framework.security.config.SecurityProperties;
 import cn.iocoder.byzs.framework.security.core.util.SecurityFrameworkUtils;
 import cn.iocoder.byzs.framework.tenant.core.aop.TenantIgnore;
+import cn.iocoder.byzs.framework.web.core.util.WebFrameworkUtils;
 import cn.iocoder.byzs.module.system.controller.admin.auth.vo.AuthLoginReqVO;
 import cn.iocoder.byzs.module.system.controller.admin.auth.vo.AuthLoginRespVO;
 import cn.iocoder.byzs.module.system.controller.admin.auth.vo.AuthSmsLoginReqVO;
 import cn.iocoder.byzs.module.system.controller.admin.auth.vo.AuthSmsSendReqVO;
+import cn.iocoder.byzs.module.system.dal.dataobject.dict.DictDataDO;
 import cn.iocoder.byzs.module.system.dal.dataobject.permission.RoleDO;
 import cn.iocoder.byzs.module.system.dal.dataobject.tenant.TenantDO;
 import cn.iocoder.byzs.module.system.enums.logger.LoginLogTypeEnum;
 import cn.iocoder.byzs.module.system.service.auth.AdminAuthService;
+import cn.iocoder.byzs.module.system.service.dict.DictDataService;
 import cn.iocoder.byzs.module.system.service.permission.PermissionService;
 import cn.iocoder.byzs.module.system.service.permission.RoleService;
 import cn.iocoder.byzs.module.system.service.tenant.TenantService;
@@ -30,7 +34,9 @@ import org.springframework.web.bind.annotation.*;
 
 import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 import static cn.iocoder.byzs.framework.common.pojo.CommonResult.success;
 
@@ -49,6 +55,8 @@ public class WebLoginController {
     private PermissionService permissionService;
     @Resource
     private RoleService roleService;
+    @Resource
+    private DictDataService dictDataService;
 
 
     @GetMapping("/getTenantIdByName")
@@ -95,12 +103,41 @@ public class WebLoginController {
         return success(true);
     }
 
+    @GetMapping("/getRoleRoute")
+    @Operation(summary = "根据用户ID,取角色路由")
+    public CommonResult<Set<String>> getRoleRoute() {
+        Set<Long> roleIds = permissionService.getUserRoleIdListByUserId(WebFrameworkUtils.getLoginUserId());
+        List<RoleDO> roles = roleService.getRoleList(roleIds);
+        roles.removeIf(role -> !CommonStatusEnum.ENABLE.getStatus().equals(role.getStatus())); // 移除禁用的角色
+
+        // 填充角色路由
+        Set<String> roleRouteSet = new HashSet<>();
+        for (RoleDO role : roles) {
+            if(role.getDataScopeWebRoute() != null && !role.getDataScopeWebRoute().isEmpty()){
+                roleRouteSet.addAll(role.getDataScopeWebRoute());
+            }
+        }
+        // 如果roleRoutes为空,则从字典中获取默认路由
+        if (roleRouteSet.isEmpty()) {
+            List<DictDataDO> webRoleRoute = dictDataService.getDictDataListByDictType("web_role_route");
+            Set<String> roleRoute = webRoleRoute.stream().map(DictDataDO::getValue).collect(Collectors.toSet());
+            roleRouteSet.addAll(roleRoute);
+        }
+        return success(roleRouteSet);
+    }
+
     /**
      * 填充课程数据权限
      * @param login
      * @return
      */
     private AuthLoginVO setAuthRoleVO(AuthLoginRespVO login) {
+        AuthLoginVO authLoginVO = BeanUtils.toBean(login, AuthLoginVO.class);
+
+        // 已经在后台读取,这里无需重复读取
+        if (true) {
+            return authLoginVO;
+        }
 
         // 获得角色列表
         Set<Long> roleIds = permissionService.getUserRoleIdListByUserId(login.getUserId());
@@ -124,7 +161,6 @@ public class WebLoginController {
         }
 
         //填充课程数据权限
-        AuthLoginVO authLoginVO = BeanUtils.toBean(login, AuthLoginVO.class);
         authLoginVO.setCourseDataScope(allDataScopeCourseIds);
         authLoginVO.setBlocklyDataScope(allDataScopeBlocklyIds);
         return authLoginVO;

+ 0 - 1
pom.xml

@@ -18,7 +18,6 @@
 
         <module>byzs-module-ai</module>
 
-        <module>byzs-aicourse</module>
         <module>byzs-course</module>
         <module>byzs-web</module>
         <module>byzs-blockly</module>