Explorar el Código

1.资源共享-群组功能完善
2.开发全量人员查询接口
3.为修复新接口不被注入权限redis,尝试加入注入监听

honorfire hace 8 meses
padre
commit
1cf3adca7e

+ 97 - 0
snowy-modules/snowy-web-app/src/main/java/vip/xiaonuo/web/core/listener/ResourceCollectListener.java

@@ -0,0 +1,97 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.web.core.listener;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.extra.spring.SpringUtil;
+import cn.hutool.log.Log;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.mvc.condition.PatternsRequestCondition;
+import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
+import vip.xiaonuo.common.cache.CommonCacheOperator;
+import vip.xiaonuo.common.consts.CacheConstant;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 资源搜集器,将项目中所有接口(带@RequestMapping的)都搜集起来
+ *  <p>
+ *  搜集到的接口会被缓存
+ *
+ * @author dongxiayu
+ * @date 2023/1/29 23:24
+ **/
+@Component
+public class ResourceCollectListener implements CommandLineRunner {
+
+    private static final Log log = Log.get();
+
+    @Resource
+    private CommonCacheOperator commonCacheOperator;
+
+    @Override
+    public void run(String... args) {
+
+        //1.获取所有后端接口
+        List<String> permissionResult = CollectionUtil.newArrayList();
+        SpringUtil.getApplicationContext().getBeansOfType(RequestMappingHandlerMapping.class).values()
+                .forEach(requestMappingHandlerMapping -> requestMappingHandlerMapping.getHandlerMethods()
+                        .forEach((key, value) -> {
+                            SaCheckPermission saCheckPermission = value.getMethod().getAnnotation(SaCheckPermission.class);
+                            if(ObjectUtil.isNotEmpty(saCheckPermission)) {
+                                PatternsRequestCondition patternsCondition = key.getPatternsCondition();
+                                if (patternsCondition != null) {
+                                    String apiName = "未定义接口名称";
+                                    ApiOperation apiOperation = value.getMethod().getAnnotation(ApiOperation.class);
+                                    if(ObjectUtil.isNotEmpty(apiOperation)) {
+                                        String annotationValue = apiOperation.value();
+                                        if(ObjectUtil.isNotEmpty(annotationValue)) {
+                                            apiName = annotationValue;
+                                        }
+                                    }
+                                    permissionResult.add(patternsCondition.getPatterns().iterator().next() + StrUtil.BRACKET_START + apiName + StrUtil.BRACKET_END);
+                                }
+                            }
+                        }));
+
+        //2.汇总添加到缓存
+        Object permissionResourceObject = commonCacheOperator.get(CacheConstant.PERMISSION_RESOURCE_CACHE_KEY);
+        List<String> permissionResource = null;
+        if(Objects.isNull(permissionResourceObject)){
+            permissionResource = CollUtil.newArrayList();
+        }else{
+            permissionResource = Convert.toList(String.class,permissionResourceObject);
+        }
+        if(CollUtil.isNotEmpty(permissionResult)){
+            for(String permission : permissionResult){
+                if(!permissionResource.contains(permission)){
+                    permissionResource.add(permission);
+                }
+            }
+
+            // 刷新缓存
+            commonCacheOperator.put(CacheConstant.PERMISSION_RESOURCE_CACHE_KEY, permissionResource);
+        }
+
+        log.info(">>> 缓存资源URL集合完成!资源数量:{}", permissionResult.size());
+    }
+}

+ 16 - 16
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/controller/ShareGroupController.java

@@ -41,6 +41,7 @@ import vip.xiaonuo.sys.modular.relation.service.SysRelationService;
 import vip.xiaonuo.sys.modular.user.entity.SysUser;
 import vip.xiaonuo.sys.modular.user.param.SysUserIdParam;
 import vip.xiaonuo.sys.modular.user.service.SysUserService;
+import vip.xiaonuo.sys.modular.user.service.impl.SysUserServiceImpl;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
@@ -74,8 +75,7 @@ public class ShareGroupController {
     @Resource
     private SysRelationService sysRelationService;
 
-
-    private static final String SNOWY_SYS_DEFAULT_PASSWORD_KEY = "SNOWY_SYS_DEFAULT_PASSWORD";
+    private static final String SNOWY_SYS_DEFAULT_PASSWORD_KEY = SysUserServiceImpl.SNOWY_SYS_DEFAULT_PASSWORD_KEY;
 
     /**
      * 资源共享-群组-分页列表
@@ -85,7 +85,7 @@ public class ShareGroupController {
      */
     @ApiOperationSupport(order = 1)
     @ApiOperation("资源共享-群组-分页列表")
-    @SaCheckPermission("/disk/sharegroup/page")
+//    @SaCheckPermission("/disk/sharegroup/page")
     @GetMapping("/disk/sharegroup/page")
     public CommonResult<Page<Map<String,Object>>> page(ShareGroupUserPageParam shareGroupUserPageParam, HttpServletRequest req) {
         Map param =new HashMap();
@@ -103,7 +103,7 @@ public class ShareGroupController {
     @ApiOperationSupport(order = 2)
     @ApiOperation("资源共享-群组-新增")
     @CommonLog("资源共享-群组-新增")
-    @SaCheckPermission("/disk/sharegroup/add")
+//    @SaCheckPermission("/disk/sharegroup/add")
     @PostMapping("/disk/sharegroup/add")
     public CommonResult<String> add(@RequestBody @Valid ShareGroupAddParam shareGroupAddParam) {
         //1.先创建一个角色为群组的用户
@@ -124,7 +124,7 @@ public class ShareGroupController {
         // 设置状态
         groupUser.setUserStatus(SysUserStatusEnum.ENABLE.getValue());
         //先保存一下该群组”用户“
-        groupUser=sysUserService.editOne(groupUser);
+        groupUser=sysUserService.addOne(groupUser);
 
         //2.存入该群组”用户“特定职务
         sysRelationService.saveRelationWithAppend(groupUser.getId(),"101",SysRelationCategoryEnum.SYS_USER_HAS_ROLE.getValue());
@@ -148,7 +148,7 @@ public class ShareGroupController {
             shareGroupUserList.add(otherGroupUser);
         }
 
-        shareGroupUserService.add(shareGroupAddParam);
+        shareGroupUserService.addBatch(shareGroupUserList);
         return CommonResult.ok();
     }
 
@@ -161,7 +161,7 @@ public class ShareGroupController {
     @ApiOperationSupport(order = 3)
     @ApiOperation("资源共享-群组-编辑")
     @CommonLog("资源共享-群组-编辑")
-    @SaCheckPermission("/disk/sharegroup/edit")
+//    @SaCheckPermission("/disk/sharegroup/edit")
     @PostMapping("/disk/sharegroup/edit")
     public CommonResult<String> edit(@RequestBody @Valid ShareGroupEditParam shareGroupEditParam) {
         //1.先创建一个角色为群组的用户
@@ -173,9 +173,10 @@ public class ShareGroupController {
             String groupUserAccount=pinyinUtils.toFirstLetters(shareGroupEditParam.getName())+System.currentTimeMillis();
         }
         //先保存一下该群组”用户“
-        groupUser=sysUserService.addOne(groupUser);
+        groupUser=sysUserService.editOne(groupUser);
 
-        //2.群组用户id不为空的情况,重新存入群组关系
+        //2.群组用户id不为空的情况,删除旧群组关系,重新存入
+        List<ShareGroupUser> shareGroupUserList=new ArrayList<>();
         if(StringUtils.isNotEmpty(shareGroupEditParam.getUserIds()))
         {
             //删除旧群组id
@@ -193,7 +194,6 @@ public class ShareGroupController {
             //重新存入群组关系
             String userIdsStr=shareGroupEditParam.getUserIds();
             String[] userIdList = userIdsStr.split(",");
-            List<ShareGroupUser> shareGroupUserList=new ArrayList<>();
             //首先添加创建群组的人
             ShareGroupUser ownGroupUser=new ShareGroupUser();
             ownGroupUser.setUserId(StpLoginUserUtil.getLoginUser().getId());
@@ -210,20 +210,20 @@ public class ShareGroupController {
             }
         }
 
-
+        shareGroupUserService.addBatch(shareGroupUserList);
         return CommonResult.ok();
     }
 
     /**
-     * 删除资源共享-群组人员关联表
+     * 资源共享-群组-删除
      *
      * @author honorfire
      * @date  2025/06/18 14:16
      */
     @ApiOperationSupport(order = 4)
-    @ApiOperation("删除资源共享-群组人员关联表")
-    @CommonLog("删除资源共享-群组人员关联表")
-    @SaCheckPermission("/disk/sharegroup/delete")
+    @ApiOperation("资源共享-群组-删除")
+    @CommonLog("资源共享-群组-删除")
+//    @SaCheckPermission("/disk/sharegroup/delete")
     @PostMapping("/disk/sharegroup/delete")
     public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
                                                    CommonValidList<ShareGroupIdParam> shareGroupIdParamList) {
@@ -240,7 +240,7 @@ public class ShareGroupController {
      */
     @ApiOperationSupport(order = 5)
     @ApiOperation("资源共享-群组-详情")
-    @SaCheckPermission("/disk/sharegroup/detail")
+//    @SaCheckPermission("/disk/sharegroup/detail")
     @GetMapping("/disk/sharegroup/detail")
     public CommonResult<Map<String,Object>> detail(@Valid ShareGroupIdParam shareGroupIdParam) {
         Map param=new HashMap();

+ 13 - 0
snowy-plugin/snowy-plugin-sys/snowy-plugin-sys-func/src/main/java/vip/xiaonuo/sys/modular/user/controller/SysUserController.java

@@ -72,6 +72,19 @@ public class SysUserController {
         return CommonResult.data(sysUserService.page(sysUserPageParam));
     }
 
+    /**
+     * 获取用户-全量列表
+     *
+     * @author xuyuxiang
+     * @date 2022/4/24 20:00
+     */
+    @ApiOperationSupport(order = 1)
+    @ApiOperation("获取用户-全量列表")
+    @GetMapping("/sys/user/allList")
+    public CommonResult<List<SysUser>> queryAllList(SysUserPageParam sysUserPageParam) {
+        return CommonResult.data(sysUserService.queryAllList(sysUserPageParam));
+    }
+
     /**
      * 添加用户
      *

+ 8 - 0
snowy-plugin/snowy-plugin-sys/snowy-plugin-sys-func/src/main/java/vip/xiaonuo/sys/modular/user/service/SysUserService.java

@@ -78,6 +78,14 @@ public interface SysUserService extends IService<SysUser> {
      */
     Page<SysUser> page(SysUserPageParam sysUserPageParam);
 
+    /**
+     * 获取用户-全量列表
+     *
+     * @author xuyuxiang
+     * @date 2022/4/24 20:08
+     */
+    List<SysUser> queryAllList(SysUserPageParam sysUserPageParam);
+
     /**
      * 添加用户
      *

+ 27 - 1
snowy-plugin/snowy-plugin-sys/snowy-plugin-sys-func/src/main/java/vip/xiaonuo/sys/modular/user/service/impl/SysUserServiceImpl.java

@@ -122,7 +122,7 @@ import java.util.stream.Collectors;
 @Service
 public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements SysUserService {
 
-    private static final String SNOWY_SYS_DEFAULT_PASSWORD_KEY = "SNOWY_SYS_DEFAULT_PASSWORD";
+    public static final String SNOWY_SYS_DEFAULT_PASSWORD_KEY = "SNOWY_SYS_DEFAULT_PASSWORD";
 
     private static final String SNOWY_SYS_DEFAULT_WORKBENCH_DATA_KEY = "SNOWY_SYS_DEFAULT_WORKBENCH_DATA";
 
@@ -242,6 +242,32 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         return this.page(CommonPageRequest.defaultPage(), queryWrapper);
     }
 
+    /**
+     * 获取用户-全量列表
+     *
+     * @author xuyuxiang
+     * @date 2022/4/24 20:08
+     */
+    @Override
+    public List<SysUser> queryAllList(SysUserPageParam sysUserPageParam)
+    {
+        QueryWrapper<SysUser> queryWrapper = new QueryWrapper<>();
+        if (ObjectUtil.isNotEmpty(sysUserPageParam.getSearchKey())) {
+            queryWrapper.lambda().and(q -> q.like(SysUser::getAccount, sysUserPageParam.getSearchKey()).or()
+                    .like(SysUser::getName, sysUserPageParam.getSearchKey()));
+        }
+        if (ObjectUtil.isNotEmpty(sysUserPageParam.getOrgId())) {
+            queryWrapper.lambda().eq(SysUser::getOrgId, sysUserPageParam.getOrgId());
+        }
+        if (ObjectUtil.isNotEmpty(sysUserPageParam.getUserStatus())) {
+            queryWrapper.lambda().eq(SysUser::getUserStatus, sysUserPageParam.getUserStatus());
+        }
+
+        queryWrapper.lambda().orderByAsc(SysUser::getSortCode);
+        List<SysUser> jsonList =  this.list(queryWrapper);
+        return jsonList;
+    }
+
     @Transactional(rollbackFor = Exception.class)
     @Override
     public void add(SysUserAddParam sysUserAddParam) {