Переглянути джерело

Merge remote-tracking branch 'origin/master'

谭斌 2 роки тому
батько
коміт
c7e4fd1d92
26 змінених файлів з 617 додано та 637 видалено
  1. 0 54
      authorize-api-service/src/main/java/com/xy/config/SaTokenInterceptorImpl.java
  2. 0 5
      authorize-api-service/src/main/java/com/xy/entity/SysSystem.java
  3. 0 37
      authorize-api-service/src/main/java/com/xy/entity/SysSystemUserRole.java
  4. 0 10
      authorize-api-service/src/main/java/com/xy/entity/SysWorkUser.java
  5. 0 40
      authorize-api-service/src/main/java/com/xy/mapper/SysDeptRelationMapper.xml
  6. 2 2
      authorize-api-service/src/main/java/com/xy/mapper/SysDeptRoleMapper.java
  7. 2 2
      authorize-api-service/src/main/java/com/xy/mapper/SysSystemMapper.java
  8. 0 15
      authorize-api-service/src/main/java/com/xy/mapper/SysSystemUserRoleMapper.java
  9. 56 115
      authorize-api-service/src/main/java/com/xy/redis/RedisCache.java
  10. 83 0
      authorize-api-service/src/main/java/com/xy/service/PublicInterfaceImpl.java
  11. 39 0
      authorize-api-service/src/main/java/com/xy/service/impl/SysMenuServiceImpl.java
  12. 11 17
      authorize-api-service/src/main/java/com/xy/service/impl/SysSystemServiceImpl.java
  13. 0 118
      authorize-api-service/src/main/java/com/xy/service/impl/SysSystemUserServiceImpl.java
  14. 114 46
      authorize-api-service/src/main/java/com/xy/service/impl/SysWorkUserServiceImpl.java
  15. 94 0
      authorize-api/src/main/java/com/xy/dto/SysMenuDto.java
  16. 0 6
      authorize-api/src/main/java/com/xy/dto/SysSystemDto.java
  17. 0 114
      authorize-api/src/main/java/com/xy/dto/SysSystemUserDto.java
  18. 12 7
      authorize-api/src/main/java/com/xy/dto/SysWorkUser/AddDto.java
  19. 24 0
      authorize-api/src/main/java/com/xy/dto/SysWorkUser/AuthByInterface.java
  20. 27 0
      authorize-api/src/main/java/com/xy/dto/SysWorkUser/LoginDto.java
  21. 3 1
      authorize-api/src/main/java/com/xy/dto/SysWorkUser/UpdateDto.java
  22. 101 0
      authorize-api/src/main/java/com/xy/service/PublicInterface.java
  23. 23 0
      authorize-api/src/main/java/com/xy/service/SysMenuService.java
  24. 0 38
      authorize-api/src/main/java/com/xy/service/SysSystemUserService.java
  25. 24 10
      authorize-api/src/main/java/com/xy/service/SysWorkUserService.java
  26. 2 0
      authorize-start/src/main/resources/bootstrap.yml

+ 0 - 54
authorize-api-service/src/main/java/com/xy/config/SaTokenInterceptorImpl.java

@@ -1,54 +0,0 @@
-package com.xy.config;
-
-import cn.dev33.satoken.stp.StpUtil;
-import com.xy.ServerWebConfig;
-import com.xy.enums.SaTokenEnum;
-import com.xy.error.CommRuntimeException;
-import com.xy.swagger.Knife4jConfig;
-import com.xy.utils.Emptys;
-import lombok.AllArgsConstructor;
-import org.springframework.stereotype.Component;
-import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.util.List;
-
-/**
- * 权限系统权限拦截器
- */
-@Component
-@AllArgsConstructor
-public class SaTokenInterceptorImpl extends HandlerInterceptorAdapter implements WebMvcConfigurer {
-
-    private SaTokenAuthorizeConfig saTokenAuthorizeConfig;
-
-    /**
-     * 方法执行前
-     */
-    @Override
-    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
-        String satoken = request.getHeader(saTokenAuthorizeConfig.getTokenName());
-        if (!Emptys.check(satoken)) {
-            throw new CommRuntimeException(SaTokenEnum.NO_LOGIN.getKey(), SaTokenEnum.NO_LOGIN.getName());
-        }
-        Object loginIdByToken = StpUtil.getLoginIdByToken(satoken);
-        if (loginIdByToken == null) {
-            throw new CommRuntimeException(SaTokenEnum.NO_LOGIN.getKey(), SaTokenEnum.NO_LOGIN.getName());
-        }
-        return true;
-    }
-
-    @Override
-    public void addInterceptors(InterceptorRegistry registry) {
-        List<String> excludePaths = saTokenAuthorizeConfig.getExcludePaths();
-        excludePaths.addAll(Knife4jConfig.swaggerExcludes);
-        excludePaths.addAll(ServerWebConfig.serverWebExcludes);
-        registry.addInterceptor(this)
-                .excludePathPatterns(excludePaths)
-                .addPathPatterns("/**");
-    }
-
-}

+ 0 - 5
authorize-api-service/src/main/java/com/xy/entity/SysSystem.java

@@ -20,11 +20,6 @@ public class SysSystem extends BaseEntity2<SysSystem> {
 
     private static final long serialVersionUID = 1L;
 
-    /**
-     * 权限用户id
-     */
-    private Long sysUserId;
-
     /**
      * 标识
      */

+ 0 - 37
authorize-api-service/src/main/java/com/xy/entity/SysSystemUserRole.java

@@ -1,37 +0,0 @@
-package com.xy.entity;
-
-import com.xy.base.BaseEntity;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
-
-/**
- * <p>
- * 权限用户角色表
- * </p>
- *
- * @author lijin
- * @since 2022-12-09
- */
-@Data
-@Accessors(chain = true)
-@EqualsAndHashCode(callSuper = true)
-public class SysSystemUserRole extends BaseEntity<SysSystemUserRole> {
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * 权限户id
-     */
-    private Long systemUserId;
-
-    /**
-     * 角色id
-     */
-    private Long roleId;
-
-    /**
-     * 系统id
-     */
-    private Long sysId;
-}

+ 0 - 10
authorize-api-service/src/main/java/com/xy/entity/SysWorkUser.java

@@ -22,16 +22,6 @@ public class SysWorkUser extends BaseEntity2<SysWorkUser> {
 
     private static final long serialVersionUID = 1L;
 
-    /**
-     * 权限用户id
-     */
-    private Long sysUserId;
-
-    /**
-     * 系统ID
-     */
-    private Long sysId;
-
     /**
      * 账号
      */

+ 0 - 40
authorize-api-service/src/main/java/com/xy/mapper/SysDeptRelationMapper.xml

@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.xy.mapper.SysDeptRelationMapper">
-    <!-- 删除部门节点关系	-->
-    <delete id="deleteDeptRelations">
-        DELETE
-        FROM sys_dept_relation
-        WHERE descendant IN (SELECT temp.descendant
-        FROM (SELECT descendant FROM sys_dept_relation WHERE ancestor = #{descendant}) temp)
-        AND ancestor IN (SELECT temp.ancestor
-        FROM (SELECT ancestor
-        FROM sys_dept_relation
-        WHERE descendant = #{descendant}
-        AND ancestor != descendant) temp)
-    </delete>
-
-    <!--删除部门节点关系,同时删除所有关联此部门子节点的部门关系-->
-    <delete id="deleteDeptRelationsById">
-        DELETE
-        FROM sys_dept_relation
-        WHERE descendant IN (
-        SELECT temp.descendant
-        FROM (
-        SELECT descendant
-        FROM sys_dept_relation
-        WHERE ancestor = #{id}
-        ) temp
-        )
-    </delete>
-
-    <!-- 新增部门节点关系	-->
-    <insert id="insertDeptRelations">
-        INSERT INTO sys_dept_relation (ancestor, descendant)
-        SELECT a.ancestor, b.descendant
-        FROM sys_dept_relation a
-        CROSS JOIN sys_dept_relation b
-        WHERE a.descendant = #{ancestor}
-        AND b.ancestor = #{descendant}
-    </insert>
-</mapper>

+ 2 - 2
authorize-api-service/src/main/java/com/xy/mapper/SysDeptRoleMapper.java

@@ -1,7 +1,7 @@
 package com.xy.mapper;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.xy.entity.SysDeptRole;
+import icu.mhb.mybatisplus.plugln.base.mapper.JoinBaseMapper;
 
 /**
  * <p>
@@ -11,6 +11,6 @@ import com.xy.entity.SysDeptRole;
  * @author 谭斌
  * @since 2022-12-15
  */
-public interface SysDeptRoleMapper extends BaseMapper<SysDeptRole> {
+public interface SysDeptRoleMapper extends JoinBaseMapper<SysDeptRole> {
 
 }

+ 2 - 2
authorize-api-service/src/main/java/com/xy/mapper/SysSystemMapper.java

@@ -1,7 +1,7 @@
 package com.xy.mapper;
 
 import com.xy.entity.SysSystem;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import icu.mhb.mybatisplus.plugln.base.mapper.JoinBaseMapper;
 
 /**
  * <p>
@@ -11,6 +11,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @author lijin
  * @since 2022-12-09
  */
-public interface SysSystemMapper extends BaseMapper<SysSystem> {
+public interface SysSystemMapper extends JoinBaseMapper<SysSystem> {
 
 }

+ 0 - 15
authorize-api-service/src/main/java/com/xy/mapper/SysSystemUserRoleMapper.java

@@ -1,15 +0,0 @@
-package com.xy.mapper;
-
-import com.xy.entity.SysSystemUserRole;
-import icu.mhb.mybatisplus.plugln.base.mapper.JoinBaseMapper;
-
-/**
- * <p>
- * 权限用户角色表 Mapper 接口
- * </p>
- *
- * @author lijin
- * @since 2022-12-09
- */
-public interface SysSystemUserRoleMapper extends JoinBaseMapper<SysSystemUserRole> {
-}

+ 56 - 115
authorize-api-service/src/main/java/com/xy/redis/RedisCache.java

@@ -33,70 +33,12 @@ import java.util.Map;
 @Component
 public class RedisCache {
 
-    /**
-     * 权限系统默认系统ID,代表本系统
-     */
-    private static final Long DEFAULT_STSTEM_ID = 1L;
-
     private static RedisService<List<CacheEntity>> getRedisService() {
         return SpringBeanUtils.getBean(RedisService.class);
     }
 
     private static String getKey(Long loginId) {
-        return String.format("%s:%d", "system_menu", loginId);
-    }
-
-    /**
-     * 缓存权限系统权限到redis
-     *
-     * @param loginId 登录id
-     */
-    public static void systemCache(Long loginId) {
-        SysSystemMapper sysSystemMapper = SpringBeanUtils.getBean(SysSystemMapper.class);
-        SysRoleMapper sysRoleMapper = SpringBeanUtils.getBean(SysRoleMapper.class);
-        SysMenuMapper sysMenuMapper = SpringBeanUtils.getBean(SysMenuMapper.class);
-        RedisService<List<CacheEntity>> roleMenuRedisService = getRedisService();
-        //获取登录人所有系统
-        List<SysSystem> sysSystems = sysSystemMapper.selectList(new LambdaQueryWrapper<SysSystem>()
-                .eq(SysSystem::getSysUserId, loginId)
-                .eq(SysSystem::getStatus, true)
-        );
-        if (!Emptys.check(sysSystems)) {
-            return;
-        }
-        //获取登录人所有角色
-        JoinLambdaWrapper<SysRole> sysRoleJoinLambdaWrapper = new JoinLambdaWrapper<>(SysRole.class)
-                .eq(SysRole::getStatus, true)
-                .innerJoin(SysSystemUserRole.class, SysSystemUserRole::getRoleId, SysRole::getId)
-                .eq(SysSystemUserRole::getSystemUserId, loginId)
-                .end();
-        List<SysRole> sysRoles = sysRoleMapper.joinSelectList(sysRoleJoinLambdaWrapper, SysRole.class);
-        JList<Long> sysRoleIds = new JArrayList<>(sysRoles).getProperty(SysRole::getId);
-        if (sysRoleIds.size() == 0) {
-            return;
-        }
-        //获取登录人所有角色菜单
-        JoinLambdaWrapper<SysMenu> sysMenuJoinLambdaWrapper = new JoinLambdaWrapper<>(SysMenu.class)
-                .eq(SysMenu::getStatus, true)
-                .innerJoin(SysRoleMenu.class, SysRoleMenu::getMenuId, SysMenu::getId)
-                .selectAs(cb -> cb
-                        .add(SysRoleMenu::getSelectIsAdmin)
-                        .add(SysRoleMenu::getRoleId)
-                )
-                .in(SysRoleMenu::getRoleId, sysRoleIds)
-                .end();
-        List<SysMenuJoinSysRoleMenu> sysMenus = sysMenuMapper.joinSelectList(sysMenuJoinLambdaWrapper, SysMenuJoinSysRoleMenu.class);
-        JMap<Long, List<SysMenuJoinSysRoleMenu>> sysMenuMaps = new JArrayList<>(sysMenus).toMap(SysMenuJoinSysRoleMenu::getRoleId).group();
-        sysSystems.forEach(sysSystem -> {
-            List<CacheEntity> cacheEntitys = new ArrayList<>();
-            sysRoles.forEach(sysRole -> {
-                CacheEntity cacheEntity = new CacheEntity()
-                        .setRoleId(sysRole.getId())
-                        .setList(sysMenuMaps.get(sysRole.getId()));
-                cacheEntitys.add(cacheEntity);
-            });
-            roleMenuRedisService.setMap(getKey(loginId), sysSystem.getId().toString(), cacheEntitys);
-        });
+        return String.format("%s:%d", "menu", loginId);
     }
 
     /**
@@ -111,10 +53,11 @@ public class RedisCache {
         SysMenuMapper sysMenuMapper = SpringBeanUtils.getBean(SysMenuMapper.class);
         RedisService<List<RedisCache.CacheEntity>> roleMenuRedisService = getRedisService();
         //获取登录人所有系统
-        List<SysSystem> sysSystems = sysSystemMapper.selectList(new LambdaQueryWrapper<SysSystem>()
-                .eq(SysSystem::getSysUserId, loginId)
+        JoinLambdaWrapper<SysSystem> sysSystemsJoinLambdaWrapper = new JoinLambdaWrapper<>(SysSystem.class)
                 .eq(SysSystem::getStatus, true)
-        );
+                .innerJoin(SysUserRole.class, SysUserRole::getRoleId, SysRole::getId)
+                .end();
+        List<SysSystem> sysSystems = sysSystemMapper.joinSelectList(sysSystemsJoinLambdaWrapper, SysSystem.class);
         if (!Emptys.check(sysSystems)) {
             return;
         }
@@ -184,26 +127,19 @@ public class RedisCache {
      * @return
      */
     public static List<SysMenuJoinSysRoleMenu> getMenu(Long loginId, Long systemId) {
+        JList<SysMenuJoinSysRoleMenu> sysMenuJoinSysRoleMenus = new JArrayList<>();
         //获取redis缓存
         List<RedisCache.CacheEntity> cacheEntities = getRedisService().getMap(getKey(loginId), systemId.toString());
+        if (!Emptys.check(cacheEntities)) {
+            return sysMenuJoinSysRoleMenus;
+        }
         //角色菜单累加
-        JList<SysMenuJoinSysRoleMenu> sysMenuJoinSysRoleMenus = new JArrayList<>();
         cacheEntities.forEach(cacheEntity -> sysMenuJoinSysRoleMenus.addAll(cacheEntity.getList()));
         //去重
         sysMenuJoinSysRoleMenus.comparing(SysMenuJoinSysRoleMenu::getId);
         return sysMenuJoinSysRoleMenus;
     }
 
-    /**
-     * 获取菜单
-     *
-     * @param loginId 登录id
-     * @return
-     */
-    public static List<SysMenuJoinSysRoleMenu> getMenu(Long loginId) {
-        return getMenu(loginId, DEFAULT_STSTEM_ID);
-    }
-
     /**
      * 获取菜单树
      *
@@ -222,31 +158,25 @@ public class RedisCache {
         return tops;
     }
 
-    /**
-     * 获取菜单树
-     *
-     * @param loginId 登录id
-     * @return
-     */
-    public static List<SysMenuJoinSysRoleMenu> getMenuTree(Long loginId) {
-        return getMenuTree(loginId, DEFAULT_STSTEM_ID);
-    }
-
     /**
      * 判断数据查询权限
      *
-     * @param loginId 登录id
+     * @param loginId  登录id
+     * @param systemId 系统id
+     * @param systemId 接口uri
      * @return true=管理员数据查询权限 false=普通查询权限
      */
-    public static boolean getDataAuth(Long loginId, Long systemId) {
-        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+    public static boolean getDataAuth(Long loginId, Long systemId, String uri) {
         //获取redis缓存
         List<CacheEntity> cacheEntities = getRedisService().getMap(getKey(loginId), systemId.toString());
+        if (!Emptys.check(cacheEntities)) {
+            return false;
+        }
         //遍历角色
         for (CacheEntity cacheEntity : cacheEntities) {
             //根据 接口uri和管理员数据查询权限=true 查找角色菜单,找到则有管理员数据查询权限,反之普通查询权限
             SysMenuJoinSysRoleMenu sysMenuJoinSysRoleMenu = new JArrayList<>(cacheEntity.getList()).filter()
-                    .eq(SysMenuJoinSysRoleMenu::getInterfaceUri, request.getRequestURI())
+                    .eq(SysMenuJoinSysRoleMenu::getInterfaceUri, uri)
                     .eq(SysMenuJoinSysRoleMenu::getSelectIsAdmin, true)
                     .object();
             if (sysMenuJoinSysRoleMenu != null) {
@@ -257,17 +187,7 @@ public class RedisCache {
     }
 
     /**
-     * 判断数据查询权限
-     *
-     * @param loginId 登录id
-     * @return true=管理员数据查询权限 false=普通查询权限
-     */
-    public static boolean getDataAuth(Long loginId) {
-        return getDataAuth(loginId, DEFAULT_STSTEM_ID);
-    }
-
-    /**
-     * 判断数据查询权限
+     * 判断数据查询权限(引用传递,业务系统无法使用)
      *
      * @param loginId            登录id
      * @param lambdaQueryWrapper 查询构造器
@@ -275,25 +195,14 @@ public class RedisCache {
      * @return true=管理员数据查询权限 false=普通查询权限
      */
     public static <T> boolean getDataAuth(Long loginId, Long systemId, LambdaQueryWrapper<T> lambdaQueryWrapper, SFunction<T, ?> function) {
-        boolean dataAuth = getDataAuth(loginId, systemId);
+        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+        boolean dataAuth = getDataAuth(loginId, systemId, request.getRequestURI());
         if (!dataAuth) {
             lambdaQueryWrapper.eq(function, loginId);
         }
         return false;
     }
 
-    /**
-     * 判断数据查询权限
-     *
-     * @param loginId            登录id
-     * @param lambdaQueryWrapper 查询构造器
-     * @param function           普通查询权限时,条件lambda引用字段
-     * @return true=管理员数据查询权限 false=普通查询权限
-     */
-    public static <T> boolean getDataAuth(Long loginId, LambdaQueryWrapper<T> lambdaQueryWrapper, SFunction<T, ?> function) {
-        return getDataAuth(loginId, DEFAULT_STSTEM_ID, lambdaQueryWrapper, function);
-    }
-
     /**
      * 获取所有系统ID
      *
@@ -302,11 +211,25 @@ public class RedisCache {
      */
     public static List<Long> getSystemIds(Long loginId) {
         Map<String, List<CacheEntity>> map = getRedisService().getMap(getKey(loginId));
+        if (!Emptys.check(map)) {
+            return new ArrayList<>();
+        }
         List<Long> list = new ArrayList<>(map.size());
         map.forEach((s, cacheEntities) -> list.add(Long.parseLong(s)));
         return list;
     }
 
+    /**
+     * 检验系统ID是否属于当前登录人
+     *
+     * @param loginId 登录id
+     * @return
+     */
+    public static Boolean checkSystemId(Long loginId, Long systemId) {
+        Map<String, List<CacheEntity>> map = getRedisService().getMap(getKey(loginId));
+        return map.containsKey(systemId);
+    }
+
     /**
      * 获取所有角色ID
      *
@@ -315,19 +238,37 @@ public class RedisCache {
      */
     public static List<Long> getRoleIds(Long loginId, Long systemId) {
         List<CacheEntity> cacheEntities = getRedisService().getMap(getKey(loginId), systemId.toString());
+        if (!Emptys.check(cacheEntities)) {
+            return new ArrayList<>();
+        }
         List<Long> list = new ArrayList<>(cacheEntities.size());
         cacheEntities.forEach(cacheEntity -> list.add(Long.parseLong(cacheEntity.getRoleId().toString())));
         return list;
     }
 
     /**
-     * 获取所有角色ID
+     * 获取所有菜单接口uri
      *
-     * @param loginId 登录id
+     * @param loginId  登录id
+     * @param systemId 系统id
      * @return
      */
-    public static List<Long> getRoleIds(Long loginId) {
-        return getRoleIds(loginId, DEFAULT_STSTEM_ID);
+    public static List<String> getMenuInterfaceUri(Long loginId, Long systemId) {
+        JList<String> list = new JArrayList<>();
+        //获取redis缓存
+        List<CacheEntity> cacheEntities = getRedisService().getMap(getKey(loginId), systemId.toString());
+        if (!Emptys.check(cacheEntities)) {
+            return list;
+        }
+        //遍历角色
+        for (CacheEntity cacheEntity : cacheEntities) {
+            List<SysMenuJoinSysRoleMenu> sysMenuJoinSysRoleMenus = cacheEntity.getList();
+            list.addAll(new JArrayList<>(sysMenuJoinSysRoleMenus).filter()
+                    .isNotNull(SysMenuJoinSysRoleMenu::getInterfaceUri).list()
+                    .getProperty(SysMenuJoinSysRoleMenu::getInterfaceUri)
+            );
+        }
+        return list.comparing();
     }
 
     @Data

+ 83 - 0
authorize-api-service/src/main/java/com/xy/service/PublicInterfaceImpl.java

@@ -0,0 +1,83 @@
+package com.xy.service;
+
+import com.xy.dto.SysMenuDto;
+import com.xy.dto.SysSystemValueDto;
+import com.xy.dto.SysWorkUser.AddDto;
+import com.xy.dto.SysWorkUser.AuthByInterface;
+import com.xy.dto.SysWorkUser.LoginDto;
+import com.xy.dto.SysWorkUser.UpdateDto;
+import com.xy.utils.PageBean;
+import com.xy.utils.R;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import javax.validation.Valid;
+import java.util.List;
+
+@Service
+@AllArgsConstructor
+@Api(tags = "统一对外接口")
+public class PublicInterfaceImpl implements PublicInterface {
+
+    private SysSystemValueService sysSystemValueService;
+
+    private SysWorkUserService sysWorkUserService;
+
+    private SysMenuService sysMenuService;
+
+    @Override
+    @ApiOperation("系统属性分页查询")
+    public R<PageBean<SysSystemValueDto.Vo>> page(SysSystemValueDto.Select select) {
+        return sysSystemValueService.page(select);
+    }
+
+    @Override
+    @ApiOperation("业务用户注册")
+    public R<Long> register(@Valid AddDto addDto) {
+        return sysWorkUserService.register(addDto);
+    }
+
+    @Override
+    @ApiOperation("业务用户登录")
+    public R<String> login(LoginDto loginDto) {
+        return sysWorkUserService.login(loginDto);
+    }
+
+    @Override
+    @ApiOperation("业务用户登出")
+    public R logout() {
+        return sysWorkUserService.logout();
+    }
+
+    @Override
+    @ApiOperation("业务用户修改")
+    public R<Boolean> update(@Valid UpdateDto updateDto) {
+        return sysWorkUserService.update(updateDto);
+    }
+
+    @Override
+    @ApiOperation("业务用户登录鉴权")
+    public R<Boolean> authByLogin() {
+        return sysWorkUserService.authByLogin();
+    }
+
+    @Override
+    @ApiOperation("业务用户接口鉴权")
+    public R<Boolean> authByInterface(AuthByInterface authByInterface) {
+        return sysWorkUserService.authByInterface(authByInterface);
+    }
+
+    @Override
+    @ApiOperation("业务用户数据鉴权")
+    public R<Boolean> authByData(AuthByInterface authByInterface) {
+        return sysWorkUserService.authByData(authByInterface);
+    }
+
+    @Override
+    @ApiOperation("业务用户菜单树")
+    public R<List<SysMenuDto.Vo>> workMenu(SysMenuDto.WorkMenu workMenu) {
+        return sysMenuService.workMenu(workMenu);
+    }
+}

+ 39 - 0
authorize-api-service/src/main/java/com/xy/service/impl/SysMenuServiceImpl.java

@@ -1,11 +1,23 @@
 package com.xy.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xy.dto.SysMenuDto;
 import com.xy.entity.SysMenu;
+import com.xy.entity.join.SysMenuJoinSysRoleMenu;
 import com.xy.mapper.SysMenuMapper;
+import com.xy.redis.RedisCache;
 import com.xy.service.SysMenuService;
+import com.xy.utils.R;
+import com.xy.utils.SaTokenUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.List;
+
+import static com.xy.utils.Beans.copy;
+
 /**
  * <p>
  * 菜单表 服务实现类
@@ -15,6 +27,33 @@ import org.springframework.stereotype.Service;
  * @since 2022-12-09
  */
 @Service
+@Api(tags = "菜单接口")
 public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> implements SysMenuService {
 
+    @Override
+    @ApiOperation("业务用户菜单树")
+    public R<List<SysMenuDto.Vo>> workMenu(SysMenuDto.WorkMenu workMenu) {
+        List<SysMenuDto.Vo> list = new ArrayList<>();
+        Long longId = SaTokenUtils.getId(Long.class);
+        List<SysMenuJoinSysRoleMenu> menus = RedisCache.getMenuTree(longId, workMenu.getSystemId());
+        menus.forEach(sysMenuJoinSysRoleMenu -> {
+            SysMenuDto.Vo vo = copy(SysMenuDto.Vo.class, sysMenuJoinSysRoleMenu);
+            List<SysMenuDto.Vo> sonVos = copy(SysMenuDto.Vo.class, sysMenuJoinSysRoleMenu.getSonSysMenu());
+            list.add(vo.setSonSysMenu(sonVos));
+        });
+        return R.ok(list);
+    }
+
+    @Override
+    @ApiOperation("添加菜单")
+    public R save(SysMenuDto.Save save) {
+        Long longId = SaTokenUtils.getId(Long.class);
+        List<Long> systemIds = RedisCache.getSystemIds(longId);
+        if (!systemIds.contains(save.getSystemId())) {
+            return R.fail("系统不存在");
+        }
+
+
+        return null;
+    }
 }

+ 11 - 17
authorize-api-service/src/main/java/com/xy/service/impl/SysSystemServiceImpl.java

@@ -1,7 +1,6 @@
 package com.xy.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xy.dto.SysSystemDto;
 import com.xy.entity.SysSystem;
@@ -9,7 +8,6 @@ import com.xy.mapper.SysSystemMapper;
 import com.xy.redis.RedisCache;
 import com.xy.service.SysSystemService;
 import com.xy.utils.MybatisPlusQuery;
-import com.xy.utils.PageBean;
 import com.xy.utils.R;
 import com.xy.utils.SaTokenUtils;
 import io.swagger.annotations.Api;
@@ -20,9 +18,9 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 
+import java.util.List;
+
 import static com.xy.utils.Beans.copy;
-import static com.xy.utils.PlusBeans.toIPage;
-import static com.xy.utils.PlusBeans.toPageBean;
 
 /**
  * <p>
@@ -40,33 +38,29 @@ public class SysSystemServiceImpl extends ServiceImpl<SysSystemMapper, SysSystem
     @PostMapping("save")
     @ApiOperation("添加系统")
     public R<Long> save(@RequestBody @Validated SysSystemDto.Save save) {
-        long count = count(new LambdaQueryWrapper<SysSystem>()
-                .eq(SysSystem::getCode, save.getCode())
-                .eq(SysSystem::getSysUserId, SaTokenUtils.getId())
-        );
+        long count = count(new LambdaQueryWrapper<SysSystem>().eq(SysSystem::getCode, save.getCode()));
         if (count > 0) {
             return R.fail("标识已存在");
         }
         long loginId = Long.parseLong(SaTokenUtils.getId().toString());
         SysSystem sysSystem = copy(SysSystem.class, save)
-                .create(loginId)
-                .setSysUserId(loginId);
+                .create(loginId);
         save(sysSystem);
         return R.ok(sysSystem.getId());
     }
 
-    @PostMapping("page")
-    @ApiOperation("分页查询")
-    public R<PageBean<SysSystemDto.Vo>> page(@RequestBody SysSystemDto.Select select) {
+    @PostMapping("list")
+    @ApiOperation("列表查询")
+    public R<List<SysSystemDto.Vo>> list(@RequestBody SysSystemDto.Select select) {
+        List<Long> systemIds = RedisCache.getSystemIds(SaTokenUtils.getId(Long.class));
         LambdaQueryWrapper<SysSystem> lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(select, SysSystem.class)
+                .in(SysSystem::getId, systemIds)
                 .ge(SysSystem::getCreateTime, select.getBeginCreateTime())
                 .le(SysSystem::getCreateTime, select.getEndCreateTime())
                 .like(SysSystem::getName)
                 .build();
-        //判断数据权限
-        RedisCache.getDataAuth(Long.parseLong(SaTokenUtils.getId().toString()), lambdaQueryWrapper, SysSystem::getSysUserId);
-        IPage<SysSystem> page = page(toIPage(select.getPage()), lambdaQueryWrapper);
-        return R.ok(toPageBean(SysSystemDto.Vo.class, page));
+        List<SysSystem> list = list(lambdaQueryWrapper);
+        return R.ok(copy(SysSystemDto.Vo.class, list));
     }
 
     @PostMapping("update")

+ 0 - 118
authorize-api-service/src/main/java/com/xy/service/impl/SysSystemUserServiceImpl.java

@@ -1,118 +0,0 @@
-package com.xy.service.impl;
-
-import cn.dev33.satoken.stp.StpUtil;
-import cn.hutool.crypto.SecureUtil;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.xy.dto.SysSystemUserDto;
-import com.xy.entity.SysSystemUser;
-import com.xy.mapper.SysSystemUserMapper;
-import com.xy.redis.RedisCache;
-import com.xy.service.SysSystemUserService;
-import com.xy.utils.*;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.AllArgsConstructor;
-import org.springframework.stereotype.Service;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-
-import java.time.LocalDateTime;
-
-import static com.xy.utils.PlusBeans.toIPage;
-import static com.xy.utils.PlusBeans.toPageBean;
-
-/**
- * <p>
- * 权限用户表 服务实现类
- * </p>
- *
- * @author lijin
- * @since 2022-12-09
- */
-@Service
-@AllArgsConstructor
-@Api(tags = "权限用户接口")
-public class SysSystemUserServiceImpl extends ServiceImpl<SysSystemUserMapper, SysSystemUser> implements SysSystemUserService {
-
-    @Override
-    @ApiOperation("登录")
-    public R<String> login(SysSystemUserDto.Login login) {
-        //校验账密
-        SysSystemUser sysSystemUser = getOne(new LambdaQueryWrapper<SysSystemUser>()
-                .eq(SysSystemUser::getAccount, login.getAccount())
-                .eq(SysSystemUser::getPassword, SecureUtil.md5(login.getPassword()))
-        );
-        if (sysSystemUser == null) {
-            return R.fail("账号或密码错误");
-        }
-        if (!sysSystemUser.getStatus()) {
-            return R.fail("账号已被封禁");
-        }
-        //生成token
-        StpUtil.login(sysSystemUser.getId());
-        //更新登录信息
-        SysSystemUserDto.Update update = new SysSystemUserDto.Update()
-                .setIsLogin(true);
-        update.setId(sysSystemUser.getId());
-        update(update);
-        //缓存权限相关到redis
-        RedisCache.systemCache(sysSystemUser.getId());
-        return R.ok(StpUtil.getTokenValue());
-    }
-
-    @Override
-    @ApiOperation("注册")
-    public R register(SysSystemUserDto.Login login) {
-        //校验重复
-        long count = count(new LambdaQueryWrapper<SysSystemUser>()
-                .eq(SysSystemUser::getAccount, login.getAccount())
-        );
-        if (count > 0) {
-            return R.fail("账号已存在");
-        }
-        //注册
-        SysSystemUser sysSystemUser = new SysSystemUser()
-                .setAccount(login.getAccount())
-                .setPassword(SecureUtil.md5(login.getPassword()))
-                .create(null);
-        save(sysSystemUser);
-        return R.ok();
-    }
-
-    @PostMapping("page")
-    @ApiOperation("分页查询")
-    public R<PageBean<SysSystemUserDto.Vo>> page(@RequestBody SysSystemUserDto.Select select) {
-        LambdaQueryWrapper<SysSystemUser> lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(select, SysSystemUser.class)
-                .ge(SysSystemUser::getCreateTime, select.getBeginCreateTime())
-                .le(SysSystemUser::getCreateTime, select.getEndCreateTime())
-                .build();
-        IPage<SysSystemUser> page = page(toIPage(select.getPage()), lambdaQueryWrapper);
-        return R.ok(toPageBean(SysSystemUserDto.Vo.class, page));
-    }
-
-    @PostMapping("update")
-    @ApiOperation("修改")
-    public R update(@RequestBody @Validated SysSystemUserDto.Update update) {
-        SysSystemUser sysSystemUser = new SysSystemUser()
-                .setId(update.getId())
-                .setStatus(Emptys.check(update.getStatus()) ? update.getStatus() : null)
-                .setPassword(Emptys.check(update.getIsAgainPwd()) && update.getIsAgainPwd() ? "88888888" : null)
-                .setPassword(Emptys.check(update.getPassword()) ? SecureUtil.md5(update.getPassword()) : null);
-        //如果是登录则更新登录时间和次数
-        if (Emptys.check(update.getIsLogin()) && update.getIsLogin()) {
-            sysSystemUser.setLastLoginTime(LocalDateTime.now()).setLoginNum(getById(update.getId()).getLoginNum() + 1);
-        } else {
-            sysSystemUser.update(Long.parseLong(SaTokenUtils.getId().toString()));
-        }
-        updateById(sysSystemUser);
-        //如果封禁账号则踢下线
-        if (Emptys.check(update.getStatus()) && !update.getStatus()) {
-            StpUtil.logout(SaTokenUtils.getId());
-        }
-        return R.ok();
-    }
-
-}

+ 114 - 46
authorize-api-service/src/main/java/com/xy/service/impl/SysWorkUserServiceImpl.java

@@ -1,40 +1,40 @@
 package com.xy.service.impl;
 
+import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.core.util.StrUtil;
-import com.baomidou.mybatisplus.core.metadata.IPage;
+import cn.hutool.crypto.SecureUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xy.config.SaTokenAuthorizeConfig;
 import com.xy.dto.SysWorkUser.AddDto;
-import com.xy.dto.SysWorkUser.PageDto;
+import com.xy.dto.SysWorkUser.AuthByInterface;
+import com.xy.dto.SysWorkUser.LoginDto;
 import com.xy.dto.SysWorkUser.UpdateDto;
-import com.xy.entity.SysDeptRelation;
 import com.xy.entity.SysUserDept;
 import com.xy.entity.SysUserRole;
 import com.xy.entity.SysWorkUser;
 import com.xy.mapper.SysWorkUserMapper;
+import com.xy.redis.RedisCache;
 import com.xy.service.SysDeptRelationService;
 import com.xy.service.SysUserDeptService;
 import com.xy.service.SysUserRoleService;
 import com.xy.service.SysWorkUserService;
 import com.xy.utils.Beans;
-import com.xy.utils.PageBean;
+import com.xy.utils.Emptys;
 import com.xy.utils.R;
 import com.xy.utils.SaTokenUtils;
-import com.xy.vo.SysWorkUserVo;
 import io.swagger.annotations.Api;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
+import javax.servlet.http.HttpServletRequest;
+import java.time.LocalDateTime;
 import java.util.List;
 import java.util.stream.Collectors;
 
-import static com.xy.utils.PlusBeans.toIPage;
-import static com.xy.utils.PlusBeans.toPageBean;
-
 
 /**
  * <p>
@@ -51,18 +51,31 @@ public class SysWorkUserServiceImpl extends ServiceImpl<SysWorkUserMapper, SysWo
 
     private final SysUserRoleService sysUserRoleService;
     private final SysUserDeptService sysUserDeptService;
-    private final SysDeptRelationService sysDeptRelationService;
+
+    private final HttpServletRequest request;
+
+    private final SaTokenAuthorizeConfig saTokenAuthorizeConfig;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public R<Boolean> add(AddDto addDto) {
-        SysWorkUser sysWorkUser = Beans.copy(SysWorkUser.class, addDto).create(Long.parseLong(SaTokenUtils.getId().toString()));
+    public R<Long> register(AddDto addDto) {
+        long longId = Long.parseLong(SaTokenUtils.getId().toString());
+        //校验
+        long count = count(new LambdaQueryWrapper<SysWorkUser>()
+                .eq(SysWorkUser::getAccount, addDto.getAccount())
+        );
+        if (count > 0) {
+            return R.fail("账号已存在");
+        }
         //新增业务用户
+        SysWorkUser sysWorkUser = Beans.copy(SysWorkUser.class, addDto)
+                .create(Long.parseLong(SaTokenUtils.getId().toString()))
+                .setPassword(SecureUtil.md5(addDto.getPassword()));
         save(sysWorkUser);
         List<Long> roleIds = addDto.getRoleIds();
         if (CollUtil.isNotEmpty(roleIds)) {
             List<SysUserRole> sysUserRoleList = roleIds.stream().map(roleId -> new SysUserRole()
-                    .setRoleId(roleId).setWorkUserId(sysWorkUser.getId()).setSysId(sysWorkUser.getSysId())).collect(Collectors.toList());
+                    .setRoleId(roleId).setWorkUserId(sysWorkUser.getId()).setSysId(addDto.getSysId())).collect(Collectors.toList());
             //保存用户角色绑定信息
             sysUserRoleService.saveBatch(sysUserRoleList);
         }
@@ -71,44 +84,46 @@ public class SysWorkUserServiceImpl extends ServiceImpl<SysWorkUserMapper, SysWo
         if (CollUtil.isNotEmpty(deptIds)) {
             //关联部门
             List<SysUserDept> sysUserDeptList = deptIds.stream().map(deptId -> new SysUserDept()
-                    .setDeptId(deptId).setWorkUserId(sysWorkUser.getId()).setSysId(sysWorkUser.getSysId())).collect(Collectors.toList());
+                    .setDeptId(deptId).setWorkUserId(sysWorkUser.getId()).setSysId(addDto.getSysId())).collect(Collectors.toList());
             //保存用户部门 绑定信息
             sysUserDeptService.saveBatch(sysUserDeptList);
         }
-        return R.ok(Boolean.TRUE);
+        return R.ok(sysWorkUser.getId());
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public R<Boolean> update(UpdateDto updateDto) {
-        SysWorkUser sysWorkUser = Beans.copy(SysWorkUser.class, updateDto).update(Long.parseLong(SaTokenUtils.getId().toString()));
+        //更新用户信息
+        SysWorkUser sysWorkUser = Beans.copy(SysWorkUser.class, updateDto)
+                .update(Long.parseLong(SaTokenUtils.getId().toString()))
+                .setPassword(StringUtils.isNotEmpty(updateDto.getPassword()) ? SecureUtil.md5(updateDto.getPassword()) : null);
+        updateById(sysWorkUser);
+        //更新角色信息
         List<Long> roleIds = updateDto.getRoleIds();
         if (CollUtil.isNotEmpty(roleIds)) {
             List<SysUserRole> surList = sysUserRoleService.list(Wrappers.<SysUserRole>lambdaQuery()
                     .eq(SysUserRole::getWorkUserId, sysWorkUser.getId())
-                    .eq(SysUserRole::getSysId, sysWorkUser.getSysId()));
+                    .eq(SysUserRole::getSysId, updateDto.getSysId()));
 
             if (CollUtil.isNotEmpty(surList)) {
                 removeBatchByIds(surList);
                 List<SysUserRole> sysUserRoleList = roleIds.stream().map(roleId -> new SysUserRole()
-                        .setRoleId(roleId).setWorkUserId(sysWorkUser.getId()).setSysId(sysWorkUser.getSysId())).collect(Collectors.toList());
+                        .setRoleId(roleId).setWorkUserId(sysWorkUser.getId()).setSysId(updateDto.getSysId())).collect(Collectors.toList());
                 //保存用户角色绑定信息
                 sysUserRoleService.saveBatch(sysUserRoleList);
             }
-
         }
-
-        //更新用户信息
-        updateById(sysWorkUser);
+        //更新部门信息
         List<Long> deptIds = updateDto.getDeptIds();
         if (CollUtil.isNotEmpty(deptIds)) {
             List<SysUserDept> sysUserDeptList = sysUserDeptService.list(Wrappers.<SysUserDept>lambdaQuery()
                     .eq(SysUserDept::getWorkUserId, sysWorkUser.getId())
-                    .eq(SysUserDept::getSysId, sysWorkUser.getSysId()));
+                    .eq(SysUserDept::getSysId, updateDto.getSysId()));
             if (CollUtil.isNotEmpty(sysUserDeptList)) {
                 removeBatchByIds(sysUserDeptList);
                 List<SysUserDept> newSysUserDeptList = deptIds.stream().map(deptId -> new SysUserDept()
-                        .setDeptId(deptId).setWorkUserId(sysWorkUser.getId()).setSysId(sysWorkUser.getSysId())).collect(Collectors.toList());
+                        .setDeptId(deptId).setWorkUserId(sysWorkUser.getId()).setSysId(updateDto.getSysId())).collect(Collectors.toList());
                 sysUserDeptService.saveBatch(newSysUserDeptList);
             }
         }
@@ -116,28 +131,81 @@ public class SysWorkUserServiceImpl extends ServiceImpl<SysWorkUserMapper, SysWo
     }
 
     @Override
-    public R<PageBean<SysWorkUserVo>> page(PageDto dto) {
-        Long deptId = dto.getDeptId();
-        List<SysDeptRelation> deptRelations = sysDeptRelationService.list(Wrappers.<SysDeptRelation>lambdaQuery()
-                .eq(SysDeptRelation::getAncestor, deptId));
-        //子部门 含自身
-        List<Long> subDeptIds = new ArrayList<>(16);
-        if (CollUtil.isNotEmpty(deptRelations)) {
-            subDeptIds = deptRelations.stream().map(SysDeptRelation::getDescendant).collect(Collectors.toList());
+    public R<String> login(LoginDto loginDto) {
+        long longId = Long.parseLong(SaTokenUtils.getId().toString());
+        //手机短信登录
+        if (!StringUtils.isEmpty(loginDto.getCode())) {
+
         }
-        List<SysUserDept> sysUserDeptList = sysUserDeptService.list(Wrappers.<SysUserDept>lambdaQuery().in(SysUserDept::getDeptId, subDeptIds));
-        List<Long> userIds = new ArrayList<>(16);
-        if (CollUtil.isNotEmpty(sysUserDeptList)) {
-            userIds = sysUserDeptList.stream().map(SysUserDept::getWorkUserId).collect(Collectors.toList());
+        //账号、邮箱、手机、密码登录
+        LambdaQueryWrapper<SysWorkUser> lambdaQueryWrapper = new LambdaQueryWrapper<SysWorkUser>()
+                .and(sysWorkUserLambdaQueryWrapper -> sysWorkUserLambdaQueryWrapper
+                        .eq(SysWorkUser::getAccount, loginDto.getLoginName())
+                        .or()
+                        .eq(SysWorkUser::getEmail, loginDto.getLoginName())
+                        .or()
+                        .eq(SysWorkUser::getPhone, loginDto.getLoginName()))
+                .eq(SysWorkUser::getPassword, SecureUtil.md5(loginDto.getPassword()));
+        SysWorkUser sysWorkUser = getOne(lambdaQueryWrapper);
+        if (sysWorkUser == null) {
+            return R.fail("账号或密码错误");
         }
-        IPage<SysWorkUser> page = page(toIPage(dto.getPage()), Wrappers.<SysWorkUser>lambdaQuery()
-                .eq(SysWorkUser::getSysId, dto.getSysId())
-                .eq(StrUtil.isNotBlank(dto.getAccount()), SysWorkUser::getAccount, dto.getAccount())
-                .eq(StrUtil.isNotBlank(dto.getEmail()), SysWorkUser::getEmail, dto.getEmail())
-                .eq(ObjectUtil.isNotEmpty(dto.getStatus()), SysWorkUser::getStatus, dto.getStatus())
-                .in(CollUtil.isNotEmpty(userIds), SysWorkUser::getId, userIds)
-        );
-        return R.ok(toPageBean(SysWorkUserVo.class, page));
+        if (!sysWorkUser.getStatus()) {
+            return R.fail("账号已被封禁");
+        }
+        //生成token
+        StpUtil.login(sysWorkUser.getId());
+        //更新登录信息
+        SysWorkUser workUser = new SysWorkUser()
+                .setId(sysWorkUser.getId())
+                .setLastLoginId(loginDto.getLoginName())
+                .setLastLoginTime(LocalDateTime.now())
+                .setLoginNum(sysWorkUser.getLoginNum() + 1);
+        updateById(workUser);
+        //缓存权限相关到redis
+        RedisCache.workCache(sysWorkUser.getId());
+        return R.ok(StpUtil.getTokenValue());
+    }
+
+    @Override
+    public R logout() {
+        StpUtil.logout(SaTokenUtils.getId());
+        return R.ok();
+    }
+
+    @Override
+    public R<Boolean> authByLogin() {
+        String satoken = request.getHeader(saTokenAuthorizeConfig.getTokenName());
+        if (!Emptys.check(satoken)) {
+            return R.ok(false);
+        }
+        Object loginIdByToken = StpUtil.getLoginIdByToken(satoken);
+        if (loginIdByToken == null) {
+            return R.ok(false);
+        }
+        return R.ok(true);
+    }
+
+    @Override
+    public R<Boolean> authByInterface(AuthByInterface authByInterface) {
+        //登录鉴权
+        Boolean data = authByLogin().getData();
+        if (!data) {
+            return R.ok(false);
+        }
+        //接口鉴权
+        List<String> menuInterfaceUri = RedisCache.getMenuInterfaceUri(Long.parseLong(SaTokenUtils.getId().toString()), authByInterface.getSystemId());
+        if (!menuInterfaceUri.contains(authByInterface.getUri())) {
+            return R.ok(false);
+        }
+        return R.ok(true);
+    }
+
+    @Override
+    public R<Boolean> authByData(AuthByInterface authByInterface) {
+        long longId = Long.parseLong(SaTokenUtils.getId().toString());
+        boolean dataAuth = RedisCache.getDataAuth(longId, authByInterface.getSystemId(), authByInterface.getUri());
+        return R.ok(dataAuth);
     }
 
 

+ 94 - 0
authorize-api/src/main/java/com/xy/dto/SysMenuDto.java

@@ -1,11 +1,105 @@
 package com.xy.dto;
 
 import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.experimental.Accessors;
 
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.time.LocalDateTime;
+import java.util.List;
+
 @Data
 @ApiModel("菜单交互类")
 @Accessors(chain = true)
 public class SysMenuDto {
+
+    @Data
+    @ApiModel("业务用户菜单树")
+    @Accessors(chain = true)
+    public static class WorkMenu {
+
+        @NotNull(message = "systemId不能为空")
+        @ApiModelProperty(value = "系统id", required = true)
+        private Long systemId;
+    }
+
+    @Data
+    @ApiModel("添加")
+    @Accessors(chain = true)
+    public static class Save {
+
+        @NotNull(message = "systemId不能为空")
+        @ApiModelProperty(value = "系统id", required = true)
+        private Long systemId;
+
+        @NotBlank(message = "code不能为空")
+        @ApiModelProperty(value = "标识", required = true)
+        private String code;
+
+        @ApiModelProperty(value = "名称", required = true)
+        private String name;
+
+        @ApiModelProperty(value = "类型 1=导航列 2=数据页 3=数据接口", required = true)
+        private Integer type;
+
+        @ApiModelProperty(value = "父菜单id")
+        private Long paterId;
+
+        @ApiModelProperty("数据接口uri")
+        private String interfaceUri;
+
+        @ApiModelProperty("前端参数")
+        private String webJson;
+    }
+
+    @Data
+    @ApiModel("返参类")
+    @Accessors(chain = true)
+    public static class Vo {
+
+        @ApiModelProperty("父id")
+        private Long paterId;
+
+        @ApiModelProperty("系统id")
+        private Long sysId;
+
+        @ApiModelProperty("标识")
+        private String code;
+
+        @ApiModelProperty("名称")
+        private String name;
+
+        @ApiModelProperty("类型;1=导航列 2=数据页 3=数据接口")
+        private Integer type;
+
+        @ApiModelProperty("数据接口uri")
+        private String interfaceUri;
+
+        @ApiModelProperty("前端参数")
+        private String webJson;
+
+        @ApiModelProperty("状态")
+        private Boolean status;
+
+        @ApiModelProperty("唯一标识")
+        private Long id;
+
+        @ApiModelProperty("创建时间")
+        private LocalDateTime createTime;
+
+        @ApiModelProperty("更新时间")
+        private LocalDateTime updateTime;
+
+        @ApiModelProperty("创建人")
+        private Long createUser;
+
+        @ApiModelProperty("更新人")
+        private Long updateUser;
+
+        @ApiModelProperty("子级集合")
+        private List<Vo> sonSysMenu;
+    }
+
 }

+ 0 - 6
authorize-api/src/main/java/com/xy/dto/SysSystemDto.java

@@ -51,9 +51,6 @@ public class SysSystemDto {
     @Accessors(chain = true)
     @ApiModel("查询交互")
     public static class Select extends Vo {
-        @ApiModelProperty("分页对象")
-        private PageBean page;
-
         @JsonFormat(pattern = "yyyy-MM-dd")
         @ApiModelProperty(value = "创建时间-起")
         private LocalDate beginCreateTime;
@@ -91,9 +88,6 @@ public class SysSystemDto {
         @ApiModelProperty("更新人")
         private Long updateUser;
 
-        @ApiModelProperty("权限用户id")
-        private Long sysUserId;
-
         @ApiModelProperty("标识")
         private String code;
 

+ 0 - 114
authorize-api/src/main/java/com/xy/dto/SysSystemUserDto.java

@@ -1,114 +0,0 @@
-package com.xy.dto;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.xy.utils.PageBean;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.experimental.Accessors;
-
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotEmpty;
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Pattern;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-
-@Data
-@ApiModel("权限用户交互类")
-@Accessors(chain = true)
-public class SysSystemUserDto {
-
-    @Data
-    @ApiModel("查询交互类")
-    @Accessors(chain = true)
-    public static class Select extends Vo {
-        @ApiModelProperty("分页对象")
-        private PageBean page;
-
-        @JsonFormat(pattern = "yyyy-MM-dd")
-        @ApiModelProperty(value = "创建时间-起")
-        private LocalDate beginCreateTime;
-
-        @JsonFormat(pattern = "yyyy-MM-dd")
-        @ApiModelProperty(value = "创建时间-始")
-        private LocalDate endCreateTime;
-
-        public LocalDateTime getBeginCreateTime() {
-            return beginCreateTime == null ? null : beginCreateTime.atTime(0, 0, 0);
-        }
-
-        public LocalDateTime getEndCreateTime() {
-            return endCreateTime == null ? null : endCreateTime.atTime(23, 59, 59);
-        }
-    }
-
-    @Data
-    @Accessors(chain = true)
-    @ApiModel("修改交互类")
-    public static class Update {
-
-        @NotNull(message = "id不能为空")
-        @ApiModelProperty("唯一标识")
-        private Long id;
-
-        @ApiModelProperty("密码")
-        private String password;
-
-        @ApiModelProperty("状态 true=启用 false=封禁")
-        private Boolean status;
-
-        @ApiModelProperty(value = "是否是登录", hidden = true)
-        private Boolean isLogin;
-
-        @ApiModelProperty(value = "是否是重置密码")
-        private Boolean isAgainPwd;
-    }
-
-    @Data
-    @Accessors(chain = true)
-    @ApiModel("登录交互类")
-    public static class Login {
-        @ApiModelProperty(value = "账号", required = true)
-        @NotBlank(message = "account不能为空")
-        @Pattern(regexp = "^[a-zA-z0-9]{6,11}$", message = "account必须为数字或字母,长度6-11位之间")
-        private String account;
-
-        @ApiModelProperty(value = "密码", required = true)
-        @NotBlank(message = "password不能为空")
-        @Pattern(regexp = "^[a-zA-z0-9]{6,11}$", message = "password必须为数字或字母,长度6-11位之间")
-        private String password;
-    }
-
-    @Data
-    @Accessors(chain = true)
-    @ApiModel("返参类")
-    public static class Vo {
-        @ApiModelProperty("账号")
-        private String account;
-
-        @ApiModelProperty("最后登录时间")
-        private LocalDateTime lastLoginTime;
-
-        @ApiModelProperty("登录次数")
-        private Integer loginNum;
-
-        @ApiModelProperty("状态 true=启用 false=封禁")
-        private Boolean status;
-
-        @ApiModelProperty("唯一标识")
-        private Long id;
-
-        @ApiModelProperty("创建时间")
-        private LocalDateTime createTime;
-
-        @ApiModelProperty("更新时间")
-        private LocalDateTime updateTime;
-
-        @ApiModelProperty("创建人")
-        private Long createUser;
-
-        @ApiModelProperty("更新人")
-        private Long updateUser;
-    }
-}

+ 12 - 7
authorize-api/src/main/java/com/xy/dto/SysWorkUser/AddDto.java

@@ -6,6 +6,8 @@ import lombok.Data;
 import lombok.experimental.Accessors;
 
 import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
 import java.util.List;
 
 @Data
@@ -15,35 +17,38 @@ public class AddDto {
 
 
     @ApiModelProperty(value = "系统ID", required = true)
-    @NotBlank(message = "未选择系统")
+    @NotNull(message = "sysId不能为空")
     private Long sysId;
 
     @ApiModelProperty(value = "账号", required = true)
-    @NotBlank(message = "账号不可为空")
+    @NotBlank(message = "account不可为空")
+    @Pattern(regexp = "^[a-zA-z0-9]{6,11}$", message = "account必须为数字或字母,长度6-11位之间")
     private String account;
 
 
-    @ApiModelProperty(value = "邮箱", required = false)
+    @ApiModelProperty(value = "邮箱")
+    @Pattern(regexp = "^(\\w+([-.][A-Za-z0-9]+)*){3,18}@\\w+([-.][A-Za-z0-9]+)*\\.\\w+([-.][A-Za-z0-9]+)*$", message = "email格式错误")
     private String email;
 
 
     @ApiModelProperty(value = "手机", required = true)
-    @NotBlank(message = "手机号不可为空")
+    @Pattern(regexp = "^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(17[013678])|(18[0,2-9]))\\d{8}$", message = "phone格式错误")
     private String phone;
 
 
     @ApiModelProperty(value = "密码", required = true)
     @NotBlank(message = "密码不可为空")
+    @Pattern(regexp = "^[a-zA-z0-9]{6,11}$", message = "password必须为数字或字母,长度6-11位之间")
     private String password;
 
 
-    @ApiModelProperty(value = "状态", required = false)
+    @ApiModelProperty(value = "状态")
     private Boolean status;
 
-    @ApiModelProperty(value = "角色ID(数组)", required = false)
+    @ApiModelProperty(value = "角色ID(数组)")
     private List<Long> roleIds;
 
-    @ApiModelProperty(value = "部门ID(数组)", required = false)
+    @ApiModelProperty(value = "部门ID(数组)")
     private List<Long> deptIds;
 
 

+ 24 - 0
authorize-api/src/main/java/com/xy/dto/SysWorkUser/AuthByInterface.java

@@ -0,0 +1,24 @@
+package com.xy.dto.SysWorkUser;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+@Data
+@ApiModel("接口鉴权")
+@Accessors(chain = true)
+public class AuthByInterface {
+
+    @NotNull(message = "systemId不能为空")
+    @ApiModelProperty("系统ID")
+    private Long systemId;
+
+    @NotBlank(message = "uri不能为空")
+    @ApiModelProperty("接口uri")
+    private String uri;
+
+}

+ 27 - 0
authorize-api/src/main/java/com/xy/dto/SysWorkUser/LoginDto.java

@@ -0,0 +1,27 @@
+package com.xy.dto.SysWorkUser;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Pattern;
+
+@Data
+@ApiModel("登录")
+@Accessors(chain = true)
+public class LoginDto {
+
+    @ApiModelProperty("账号,邮箱,手机")
+    @NotBlank(message = "lognName不能为空")
+    private String loginName;
+
+    @ApiModelProperty("密码")
+    @Pattern(regexp = "^[a-zA-z0-9]{6,11}$", message = "password必须为数字或字母,长度6-11位之间")
+    private String password;
+
+    @ApiModelProperty("短信验证码")
+    private String code;
+
+}

+ 3 - 1
authorize-api/src/main/java/com/xy/dto/SysWorkUser/UpdateDto.java

@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.experimental.Accessors;
 
+import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 import java.util.List;
 
@@ -17,7 +18,8 @@ public class UpdateDto {
     @NotNull(message = "未选中用户")
     private Long id;
 
-    @ApiModelProperty(value = "系统ID", required = false)
+    @ApiModelProperty(value = "系统ID", required = true)
+    @NotNull(message = "sysId不能为空")
     private Long sysId;
 
     @ApiModelProperty(value = "邮箱", required = false)

+ 101 - 0
authorize-api/src/main/java/com/xy/service/PublicInterface.java

@@ -0,0 +1,101 @@
+package com.xy.service;
+
+import com.xy.annotate.RestMappingController;
+import com.xy.dto.SysMenuDto;
+import com.xy.dto.SysSystemValueDto;
+import com.xy.dto.SysWorkUser.AddDto;
+import com.xy.dto.SysWorkUser.AuthByInterface;
+import com.xy.dto.SysWorkUser.LoginDto;
+import com.xy.dto.SysWorkUser.UpdateDto;
+import com.xy.utils.PageBean;
+import com.xy.utils.R;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * 统一对外接口
+ */
+@RestMappingController("public-interface")
+public interface PublicInterface {
+
+    /**
+     * 系统属性分页查询
+     *
+     * @param select
+     * @return
+     */
+    @PostMapping("sysSystemPage")
+    R<PageBean<SysSystemValueDto.Vo>> page(@RequestBody @Validated SysSystemValueDto.Select select);
+
+    /**
+     * 业务用户注册
+     *
+     * @param addDto
+     * @return
+     */
+    @PostMapping("workUserRegister")
+    R<Long> register(@Valid @RequestBody AddDto addDto);
+
+    /**
+     * 业务用户登录
+     *
+     * @param loginDto
+     * @return
+     */
+    @PostMapping("workUserLogin")
+    R<String> login(@RequestBody @Validated LoginDto loginDto);
+
+    /**
+     * 业务用户登出
+     *
+     * @return
+     */
+    @PostMapping("workUserLogout")
+    R logout();
+
+    /**
+     * 业务用户修改
+     *
+     * @return
+     */
+    @PostMapping("workUserUpdate")
+    R<Boolean> update(@Valid @RequestBody UpdateDto updateDto);
+
+    /**
+     * 业务用户登录鉴权
+     *
+     * @return
+     */
+    @PostMapping("workUserAuthByLogin")
+    R<Boolean> authByLogin();
+
+    /**
+     * 业务用户接口鉴权
+     *
+     * @return
+     */
+    @PostMapping("workUserAuthByInterface")
+    R<Boolean> authByInterface(@RequestBody @Validated AuthByInterface authByInterface);
+
+    /**
+     * 业务用户数据鉴权
+     *
+     * @param authByInterface
+     * @return
+     */
+    @PostMapping("workUserAuthByData")
+    R<Boolean> authByData(@RequestBody @Validated AuthByInterface authByInterface);
+
+    /**
+     * 业务用户菜单树
+     *
+     * @param workMenu
+     * @return
+     */
+    @PostMapping("workUserMenu")
+    R<List<SysMenuDto.Vo>> workMenu(@RequestBody @Validated SysMenuDto.WorkMenu workMenu);
+}

+ 23 - 0
authorize-api/src/main/java/com/xy/service/SysMenuService.java

@@ -1,6 +1,13 @@
 package com.xy.service;
 
 import com.xy.annotate.RestMappingController;
+import com.xy.dto.SysMenuDto;
+import com.xy.utils.R;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +20,20 @@ import com.xy.annotate.RestMappingController;
 @RestMappingController("sys-menu")
 public interface SysMenuService {
 
+    /**
+     * 业务用户菜单树
+     *
+     * @return
+     */
+    @PostMapping("workMenu")
+    R<List<SysMenuDto.Vo>> workMenu(@RequestBody @Validated SysMenuDto.WorkMenu workMenu);
+
+    /**
+     * 添加菜单
+     *
+     * @param save
+     * @return
+     */
+    @PostMapping("save")
+    R save(@RequestBody @Validated SysMenuDto.Save save);
 }

+ 0 - 38
authorize-api/src/main/java/com/xy/service/SysSystemUserService.java

@@ -1,38 +0,0 @@
-package com.xy.service;
-
-import com.xy.annotate.RestMappingController;
-import com.xy.dto.SysSystemUserDto;
-import com.xy.utils.R;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-
-/**
- * <p>
- * 权限用户表 服务类
- * </p>
- *
- * @author lijin
- * @since 2022-12-09
- */
-@RestMappingController("sys-system-user")
-public interface SysSystemUserService {
-
-    /**
-     * 登录
-     *
-     * @param login
-     * @return
-     */
-    @PostMapping("login")
-    R<String> login(@RequestBody @Validated SysSystemUserDto.Login login);
-
-    /**
-     * 注册
-     *
-     * @param login
-     * @return
-     */
-    @PostMapping("register")
-    R<Boolean> register(@RequestBody @Validated SysSystemUserDto.Login login);
-}

+ 24 - 10
authorize-api/src/main/java/com/xy/service/SysWorkUserService.java

@@ -2,12 +2,12 @@ package com.xy.service;
 
 import com.xy.annotate.RestMappingController;
 import com.xy.dto.SysWorkUser.AddDto;
-import com.xy.dto.SysWorkUser.PageDto;
+import com.xy.dto.SysWorkUser.AuthByInterface;
+import com.xy.dto.SysWorkUser.LoginDto;
 import com.xy.dto.SysWorkUser.UpdateDto;
-import com.xy.utils.PageBean;
 import com.xy.utils.R;
-import com.xy.vo.SysWorkUserVo;
 import io.swagger.annotations.ApiOperation;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 
@@ -22,17 +22,31 @@ import javax.validation.Valid;
 public interface SysWorkUserService {
 
 
-    @ApiOperation(value = "新增业务用户信息", notes = "新增业务用户信息")
-    @PostMapping("add")
-    R<Boolean> add(@Valid @RequestBody AddDto addDto);
+    @ApiOperation(value = "注册", notes = "注册")
+    @PostMapping("register")
+    R<Long> register(@Valid @RequestBody AddDto addDto);
 
     @ApiOperation(value = "更新业务用户信息", notes = "更新业务用户信息")
     @PostMapping("update")
     R<Boolean> update(@Valid @RequestBody UpdateDto updateDto);
 
-    @ApiOperation(value = "分页获取业务用户信息", notes = "分页获取角色信息")
-    @PostMapping("page")
-    R<PageBean<SysWorkUserVo>> page(PageDto dto);
- 
+    @PostMapping("login")
+    @ApiOperation("登录")
+    R<String> login(@RequestBody @Validated LoginDto loginDto);
 
+    @PostMapping("logout")
+    @ApiOperation("登出")
+    R logout();
+
+    @PostMapping("authByLogin")
+    @ApiOperation("登录鉴权")
+    R<Boolean> authByLogin();
+
+    @PostMapping("authByInterface")
+    @ApiOperation("接口鉴权")
+    R<Boolean> authByInterface(@RequestBody @Validated AuthByInterface authByInterface);
+
+    @PostMapping("authByData")
+    @ApiOperation("数据鉴权")
+    R<Boolean> authByData(@RequestBody @Validated AuthByInterface authByInterface);
 }

+ 2 - 0
authorize-start/src/main/resources/bootstrap.yml

@@ -32,6 +32,8 @@ sa-token:
   is-log: false
   # 是否输出启动日志
   isPrint: false
+  # 是否开启接口鉴权
+  enablePermission: false
   # 需要过滤的url
   exclude-paths:
     - /**/sys-system-user/login