Просмотр исходного кода

add:功能权限初次提交:登录时候给前端返回该用户有的权限

lyx 4 дней назад
Родитель
Сommit
ee5053b69a

+ 6 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/SystemLoginVo.java

@@ -5,6 +5,9 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
+import shop.alien.entity.store.LifeSysMenu;
+
+import java.util.List;
 
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -23,4 +26,7 @@ public class SystemLoginVo {
 
     @ApiModelProperty(value = "角色id")
     public String roleId;
+
+    @ApiModelProperty(value = "菜单列表")
+    public List<LifeSysMenu> menuList;
 }

+ 3 - 0
alien-entity/src/main/java/shop/alien/mapper/LifeSysMenuMapper.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
 import shop.alien.entity.store.LifeSysMenu;
 
+import java.util.List;
+
 /**
  * 菜单权限表 Mapper 接口
  *
@@ -12,5 +14,6 @@ import shop.alien.entity.store.LifeSysMenu;
  */
 @Mapper
 public interface LifeSysMenuMapper extends BaseMapper<LifeSysMenu> {
+    List<LifeSysMenu> getMenuByUserId(Long userId);
 }
 

+ 13 - 0
alien-entity/src/main/resources/mapper/LifeSysMenuMapper.xml

@@ -32,5 +32,18 @@
         updated_time, remark
     </sql>
 
+
+    <select id="getMenuByUserId" resultType="shop.alien.entity.store.LifeSysMenu">
+        select lsm.*
+        from life_sys_menu lsm
+                 left join life_sys_role_menu lsrm on lsrm.menu_id = lsm.menu_id
+        where lsm.del_flag = 0
+          and lsrm.role_id in (
+            select lsur.role_id
+            from life_sys_user_role lsur
+            where lsur.user_id = #{userId}
+        )
+    </select>
+
 </mapper>
 

+ 35 - 0
alien-gateway/src/main/java/shop/alien/gateway/config/FeignHttpMessageConvertersConfig.java

@@ -0,0 +1,35 @@
+package shop.alien.gateway.config;
+
+import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.converter.HttpMessageConverter;
+import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Feign HttpMessageConverters 配置
+ * 在 WebFlux 环境中,Spring Boot 可能不会自动配置 HttpMessageConverters,
+ * 但 OpenFeign 仍然需要它来进行消息转换
+ *
+ * @author system
+ * @date 2025-01-XX
+ */
+@Configuration
+public class FeignHttpMessageConvertersConfig {
+
+    /**
+     * 手动创建 HttpMessageConverters bean,确保 OpenFeign 能够正常使用
+     * 这个 bean 会被 OpenFeign 的 SpringDecoder 使用
+     */
+    @Bean
+    public HttpMessageConverters httpMessageConverters() {
+        List<HttpMessageConverter<?>> converters = new ArrayList<>();
+        converters.add(new MappingJackson2HttpMessageConverter());
+        return new HttpMessageConverters(converters);
+    }
+}
+
+

+ 22 - 0
alien-gateway/src/main/java/shop/alien/gateway/feign/StoreServiceFeign.java

@@ -0,0 +1,22 @@
+package shop.alien.gateway.feign;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import shop.alien.entity.result.R;
+import shop.alien.entity.store.LifeSysMenu;
+
+import java.util.List;
+
+@FeignClient(name = "alien-store", url = "${feign.alienStore.url}")
+public interface StoreServiceFeign {
+    /**
+     * 根据用户ID查询用户菜单树形结构
+     *
+     * @param userId 用户ID
+     * @param ifTree 是否返回树形结构(0否 1是)
+     * @return 用户菜单树形结构
+     */
+    @GetMapping(value = "/sys/menu/getMenuByUserId")
+    R<List<LifeSysMenu>> getMenuByUserId(@RequestParam("userId") Long userId, @RequestParam(name = "ifTree",required = false) Long ifTree);
+}

+ 11 - 0
alien-gateway/src/main/java/shop/alien/gateway/service/impl/SystemServiceImpl.java

@@ -4,14 +4,17 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 import shop.alien.entity.result.R;
 import shop.alien.entity.store.LifeSys;
+import shop.alien.entity.store.LifeSysMenu;
 import shop.alien.entity.store.UserLoginInfo;
 import shop.alien.entity.store.vo.SystemLoginVo;
 import shop.alien.gateway.config.BaseRedisService;
+import shop.alien.gateway.feign.StoreServiceFeign;
 import shop.alien.gateway.mapper.LifeSysGatewayMapper;
 import shop.alien.gateway.service.SystemService;
 import shop.alien.util.common.JwtUtil;
@@ -38,6 +41,9 @@ public class SystemServiceImpl implements SystemService {
 
     private final LifeSysGatewayMapper lifeSysMapper;
 
+    @Autowired
+    private final StoreServiceFeign storeServiceFeign;
+
     private final BaseRedisService baseRedisService;
 
     @Value("${jwt.expiration-time}")
@@ -78,6 +84,9 @@ public class SystemServiceImpl implements SystemService {
             tokenMap.put("userName", lifeSys.getUserName());
             tokenMap.put("userId", String.valueOf(lifeSys.getId()));
             tokenMap.put("userType", "web");
+            R<List<LifeSysMenu>> menuByUserId = storeServiceFeign.getMenuByUserId(lifeSys.getId().longValue(), 1L);
+            List<LifeSysMenu> data = menuByUserId.getData();
+            tokenMap.put("menuList", JSONObject.toJSONString(data));
             //存入token
             result.setToken(JwtUtil.createJWT("web_" + lifeSys.getId(), lifeSys.getUserName(), JSONObject.toJSONString(tokenMap), effectiveTimeIntLong));
             baseRedisService.setString("web_" + lifeSys.getUserName(), result.getToken());
@@ -85,6 +94,8 @@ public class SystemServiceImpl implements SystemService {
             result.setResult(true);
             //角色Id
             result.setRoleId(lifeSys.getRoleId());
+            //菜单列表
+            result.setMenuList(data);
             //登录结果
             result.setMessage("登录成功!!");
         } else {

+ 12 - 0
alien-store/src/main/java/shop/alien/store/controller/LifeSysMenuController.java

@@ -119,5 +119,17 @@ public class LifeSysMenuController {
         log.info("LifeSysMenuController.getMenuListByParentId => parentId={}", parentId);
         return lifeSysMenuService.getMenuListByParentId(parentId);
     }
+
+    @ApiOperation("根据用户ID查询用户菜单树形结构")
+    @ApiOperationSupport(order = 7)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "userId", value = "用户ID", dataType = "Long", paramType = "query", required = true),
+            @ApiImplicitParam(name = "ifTree", value = "是否返回树形结构(0否 1是)", dataType = "Long", paramType = "query")
+    })
+    @GetMapping(value = "/getMenuByUserId")
+    public R<List<LifeSysMenu>> getMenuByUserId(@RequestParam Long userId, @RequestParam(required = false, defaultValue = "0") Long ifTree) {
+        log.info("LifeSysMenuController.getMenuByUserId => userId={}, ifTree={}", userId, ifTree);
+        return lifeSysMenuService.getMenuByUserId(userId,ifTree);
+    }
 }
 

+ 8 - 0
alien-store/src/main/java/shop/alien/store/service/LifeSysMenuService.java

@@ -59,5 +59,13 @@ public interface LifeSysMenuService {
      * @return R<List<LifeSysMenu>>
      */
     R<List<LifeSysMenu>> getMenuListByParentId(Long parentId);
+
+     /**
+     * 根据用户ID查询用户菜单树形结构
+     *
+     * @param userId 用户ID
+     * @return R<List<LifeSysMenu>>
+     */
+    R<List<LifeSysMenu>> getMenuByUserId(Long userId, Long ifTree);
 }
 

+ 10 - 1
alien-store/src/main/java/shop/alien/store/service/impl/LifeSysMenuServiceImpl.java

@@ -13,7 +13,6 @@ import shop.alien.mapper.LifeSysMenuMapper;
 import shop.alien.store.service.LifeSysMenuService;
 
 import java.util.*;
-import java.util.stream.Collectors;
 
 /**
  * 菜单权限表 服务实现类
@@ -294,6 +293,16 @@ public class LifeSysMenuServiceImpl implements LifeSysMenuService {
         }
     }
 
+    @Override
+    public R<List<LifeSysMenu>> getMenuByUserId(Long userId, Long ifTree) {
+        log.info("LifeSysMenuServiceImpl.getMenuByUserId?userId={}, ifTree={}", userId, ifTree);
+        List<LifeSysMenu> menuByUserId = lifeSysMenuMapper.getMenuByUserId(userId);
+        if (ifTree == null || ifTree == 0) {
+            return R.data(menuByUserId, "查询成功");
+        } else {
+            return R.data(buildMenuTree(menuByUserId), "查询成功");
+        }
+    }
     /**
      * 构建菜单树形结构
      *

+ 5 - 0
pom.xml

@@ -374,6 +374,11 @@
                 <version>5.8.18</version>
             </dependency>
 
+            <dependency>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-starter-security</artifactId>
+            </dependency>
+
             <!--Other End-->
         </dependencies>
     </dependencyManagement>