fix(roleAuthority): 优化角色权限关联查询

This commit is contained in:
verto 2024-02-01 22:33:29 +08:00
parent e26d837e35
commit 22bb6a47c5
7 changed files with 34 additions and 28 deletions

View File

@ -3,7 +3,7 @@ package com.zsc.edu.bill.framework.security;
import com.zsc.edu.bill.modules.system.entity.Authority; import com.zsc.edu.bill.modules.system.entity.Authority;
import com.zsc.edu.bill.modules.system.entity.RoleAuthority; import com.zsc.edu.bill.modules.system.entity.RoleAuthority;
import com.zsc.edu.bill.modules.system.entity.User; import com.zsc.edu.bill.modules.system.entity.User;
import com.zsc.edu.bill.modules.system.repo.RoleAuthoritiesReposity; import com.zsc.edu.bill.modules.system.repo.RoleAuthoritiesRepository;
import com.zsc.edu.bill.modules.system.repo.UserRepository; import com.zsc.edu.bill.modules.system.repo.UserRepository;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetails;
@ -12,9 +12,7 @@ import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -25,14 +23,14 @@ import java.util.stream.Collectors;
public class JpaUserDetailsServiceImpl implements UserDetailsService { public class JpaUserDetailsServiceImpl implements UserDetailsService {
private final UserRepository userRepo; private final UserRepository userRepo;
private final RoleAuthoritiesReposity roleAuthoritiesReposity; private final RoleAuthoritiesRepository roleAuthoritiesRepository;
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
User user = userRepo.selectByUsername(username); User user = userRepo.selectByUsername(username);
List<RoleAuthority> roleAuthorities= roleAuthoritiesReposity.selectByRoleId(user.getRoleId()); List<RoleAuthority> roleAuthorities= roleAuthoritiesRepository.selectByRoleId(user.getRoleId());
user.role.authorities=roleAuthorities.stream() user.role.authorities=roleAuthorities.stream()
.map(i -> Authority.valueOf(i.getAuthority())) .map(i -> Authority.valueOf(i.getAuthority()))
.collect(Collectors.toSet()); .collect(Collectors.toSet());

View File

@ -3,6 +3,8 @@ package com.zsc.edu.bill.modules.system.entity;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable; import java.io.Serializable;
@ -11,12 +13,13 @@ import java.io.Serializable;
* @author * @author
*/ */
@AllArgsConstructor @AllArgsConstructor
@Data @Getter
@Setter
@TableName("sys_role_authorities") @TableName("sys_role_authorities")
public class RoleAuthority implements Serializable { public class RoleAuthority implements Serializable {
private Long roleId; private Long roleId;
private String authority; private String authority;
private static final long serialVersionUID = 1L;
} }

View File

@ -2,10 +2,15 @@ package com.zsc.edu.bill.modules.system.repo;
import com.zsc.edu.bill.modules.system.entity.RoleAuthority; import com.zsc.edu.bill.modules.system.entity.RoleAuthority;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Select;
import java.util.List; import java.util.List;
import java.util.Set;
public interface RoleAuthoritiesReposity extends BaseMapper<RoleAuthority> { /**
* @author Yao
*/
public interface RoleAuthoritiesRepository extends BaseMapper<RoleAuthority> {
@Select("select * from sys_role_authorities where role_id=#{roleId}")
List<RoleAuthority> selectByRoleId(Long roleId); List<RoleAuthority> selectByRoleId(Long roleId);
} }

View File

@ -1,14 +1,14 @@
package com.zsc.edu.bill.modules.system.service.impl; package com.zsc.edu.bill.modules.system.service.impl;
import com.zsc.edu.bill.modules.system.entity.RoleAuthority; import com.zsc.edu.bill.modules.system.entity.RoleAuthority;
import com.zsc.edu.bill.modules.system.repo.RoleAuthoritiesReposity; import com.zsc.edu.bill.modules.system.repo.RoleAuthoritiesRepository;
import com.zsc.edu.bill.modules.system.service.RoleAuthService; import com.zsc.edu.bill.modules.system.service.RoleAuthService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@Service @Service
public class RoleAuthServiceImpl extends ServiceImpl<RoleAuthoritiesReposity, RoleAuthority> implements RoleAuthService { public class RoleAuthServiceImpl extends ServiceImpl<RoleAuthoritiesRepository, RoleAuthority> implements RoleAuthService {
@Override @Override
public boolean removeByRoleId(Long roleId) { public boolean removeByRoleId(Long roleId) {
return remove(new LambdaQueryWrapper<RoleAuthority>().eq(RoleAuthority::getRoleId, roleId)); return remove(new LambdaQueryWrapper<RoleAuthority>().eq(RoleAuthority::getRoleId, roleId));

View File

@ -9,11 +9,15 @@ mybatis-plus:
spring: spring:
datasource: datasource:
url: jdbc:mysql://59.110.238.182:3306/study?useSSL=false&allowPublicKeyRetrieval=true&createDatabaseIfNotExist=true&characterEncoding=utf8&serverTimezone=Hongkong url: jdbc:mysql://localhost:3306/bill?useSSL=false&allowPublicKeyRetrieval=true&createDatabaseIfNotExist=true&characterEncoding=utf8&serverTimezone=Hongkong
username: root username: root
password: 2002 password: 123123
driver-class-name: com.mysql.cj.jdbc.Driver driver-class-name: com.mysql.cj.jdbc.Driver
servlet: servlet:
multipart: multipart:
max-file-size: 40MB max-file-size: 40MB
max-request-size: 40MB max-request-size: 40MB
storage:
attachment: ./storage/attachment
temp: ./storage/temp

View File

@ -1,17 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?> <?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"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zsc.edu.bill.modules.system.repo.RoleAuthoritiesReposity"> <mapper namespace="com.zsc.edu.bill.modules.system.repo.RoleAuthoritiesRepository">
<resultMap id="BaseResultMap" type="com.zsc.edu.bill.modules.system.entity.RoleAuthority"> <!-- <resultMap id="BaseResultMap" type="com.zsc.edu.bill.modules.system.entity.RoleAuthority">-->
<result column="role_id" jdbcType="BIGINT" property="roleId"/> <!-- <result column="role_id" jdbcType="BIGINT" property="roleId"/>-->
<result column="authority" jdbcType="BIGINT" property="authority"/> <!-- <result column="authority" jdbcType="BIGINT" property="authority"/>-->
</resultMap> <!-- </resultMap>-->
<select id="selectByRoleId" parameterType="java.lang.Long" resultMap="BaseResultMap"> <!-- <select id="selectByRoleId" parameterType="java.lang.Long" resultMap="BaseResultMap">-->
select <!-- select * from sys_role_authorities sra where sra.role_id = #{roleId}-->
* <!-- </select>-->
from sys_role_authorities a
where a.role_id = #{roleId}
</select>

View File

@ -3,9 +3,8 @@ package com.zsc.edu.bill.service;
import com.zsc.edu.bill.modules.system.entity.Authority; import com.zsc.edu.bill.modules.system.entity.Authority;
import com.zsc.edu.bill.modules.system.entity.RoleAuthority; import com.zsc.edu.bill.modules.system.entity.RoleAuthority;
import com.zsc.edu.bill.modules.system.entity.User; import com.zsc.edu.bill.modules.system.entity.User;
import com.zsc.edu.bill.modules.system.repo.RoleAuthoritiesReposity; import com.zsc.edu.bill.modules.system.repo.RoleAuthoritiesRepository;
import com.zsc.edu.bill.modules.system.repo.UserRepository; import com.zsc.edu.bill.modules.system.repo.UserRepository;
import com.zsc.edu.bill.modules.system.service.UserService;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
@ -22,13 +21,13 @@ import java.util.Set;
@SpringBootTest @SpringBootTest
public class UserServiceTest { public class UserServiceTest {
@Resource @Resource
private RoleAuthoritiesReposity roleAuthoritiesReposity; private RoleAuthoritiesRepository roleAuthoritiesRepository;
@Resource @Resource
private UserRepository userRepository; private UserRepository userRepository;
@Test @Test
void test() { void test() {
User user=userRepository.selectByUsername("admin"); User user=userRepository.selectByUsername("admin");
List<RoleAuthority> authorities= roleAuthoritiesReposity.selectByRoleId(user.getRoleId()); List<RoleAuthority> authorities= roleAuthoritiesRepository.selectByRoleId(user.getRoleId());
Set<Authority> authorities1=new HashSet<>(); Set<Authority> authorities1=new HashSet<>();
authorities.stream().forEach(authority ->authorities1.add(Authority.valueOf(authority.getAuthority()))); authorities.stream().forEach(authority ->authorities1.add(Authority.valueOf(authority.getAuthority())));
user.role.authorities=authorities1; user.role.authorities=authorities1;