patch: 权限板块日志补丁

This commit is contained in:
筱锋xiao_lfeng 2024-01-22 19:09:40 +08:00
parent 9f82efd772
commit 377261e938
No known key found for this signature in database
GPG Key ID: F693AA12AABBFA87
7 changed files with 170 additions and 19 deletions

View File

@ -20,6 +20,8 @@ public class RedisConstant {
public static final String TYPE_EMAIL = "mail:";
// 登陆相关
public static final String TYPE_AUTH = "auth:";
// 权限相关
public static final String TYPE_PERMISSION = "permission:";
/*
* 表分类
@ -30,4 +32,6 @@ public class RedisConstant {
public static final String TABLE_TOKEN = "token:";
// 用户相关
public static final String TABLE_USER = "user:";
// 角色相关
public static final String TABLE_ROLE = "role:";
}

View File

@ -9,6 +9,18 @@ import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
/**
* <h1>Redis工具类</h1>
* <hr/>
* 用于操作Redis
*
* @param <R> 泛型
* @since v1.1.0
* @version v1.1.0
* @see RedisConfiguration
* @see com.jsl.oa.common.constant.RedisConstant
* @author xiao_lfeng
*/
@RequiredArgsConstructor
public abstract class RedisOperating<R> {
protected final RedisTemplate<String, R> redisTemplate;

View File

@ -1,9 +1,14 @@
package com.jsl.oa.dao;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.jsl.oa.common.constant.BusinessConstants;
import com.jsl.oa.mapper.PermissionMapper;
import com.jsl.oa.model.doData.PermissionDO;
import com.jsl.oa.utils.redis.PermissionRedisUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
@ -23,32 +28,60 @@ import java.util.List;
@RequiredArgsConstructor
public class PermissionDAO {
private final PermissionMapper permissionMapper;
private final PermissionRedisUtil<String> permissionRedisUtil;
private final Gson gson;
public List<String> getPermission(Long uid) {
/**
* <h2>获取用户权限信息</h2>
* <hr/>
* 通过用户 ID 获取用户权限信息
*
* @param uid 用户ID
* @return {@link List<String>}
*/
public List<String> getPermission(@NotNull Long uid) {
log.info("\t> 执行 DAO 层 PermissionDAO.getPermission 方法");
List<PermissionDO> permissionList = permissionMapper.permissionUserPid(uid);
List<String> getPermissionForString = new ArrayList<>();
for (PermissionDO permission : permissionList) {
// 寻找是否存在父亲
StringBuilder permissionString = new StringBuilder();
if (permission.getPid() != null) {
// 存在父亲
this.getFatherPermission(permissionString, permission.getPid());
// 寻找子类
this.getChildPermission(permissionString, permission.getId(), getPermissionForString);
getPermissionForString.add(permissionString.toString());
} else {
// 不存在父亲
permissionString.append(permission.getName());
this.getChildPermission(permissionString, permission.getId(), getPermissionForString);
getPermissionForString.add(permissionString.toString());
List<String> getPermissionForString;
String permissionRedisString = permissionRedisUtil.getData(BusinessConstants.NONE, uid.toString());
if (permissionRedisString == null) {
log.info("\t\t> 从 MySQL 获取数据");
List<PermissionDO> permissionList = permissionMapper.permissionUserPid(uid);
getPermissionForString = new ArrayList<>();
for (PermissionDO permission : permissionList) {
// 寻找是否存在父亲
StringBuilder permissionString = new StringBuilder();
if (permission.getPid() != null) {
// 存在父亲
this.getFatherPermission(permissionString, permission.getPid());
// 寻找子类
this.getChildPermission(permissionString, permission.getId(), getPermissionForString);
getPermissionForString.add(permissionString.toString());
} else {
// 不存在父亲
permissionString.append(permission.getName());
this.getChildPermission(permissionString, permission.getId(), getPermissionForString);
getPermissionForString.add(permissionString.toString());
}
}
// 存入 Redis
permissionRedisUtil.setData(BusinessConstants.NONE, uid.toString(), gson.toJson(getPermissionForString), 1440);
} else {
log.info("\t\t> 从 Redis 获取数据");
getPermissionForString = gson.fromJson(permissionRedisString, new TypeToken<List<String>>() {}.getType());
}
// 存入 Redis
return getPermissionForString;
}
/**
* <h2>获取子类权限信息</h2>
* <hr/>
* 通过父类 ID 获取子类权限信息<br/>
* 递归调用
*
* @param permissionString 父类权限信息
* @param id 父类 ID
* @param getPermissionForString 存储权限信息
*/
private void getChildPermission(StringBuilder permissionString, Long id, List<String> getPermissionForString) {
// 获取子类权限信息
List<PermissionDO> permissionList = permissionMapper.getChildPermission(id);
@ -73,6 +106,15 @@ public class PermissionDAO {
}
}
/**
* <h2>获取父类权限信息</h2>
* <hr/>
* 通过子类 ID 获取父类权限信息<br/>
* 递归调用
*
* @param permissionString 父类权限信息
* @param pid 父类 ID
*/
public void getFatherPermission(StringBuilder permissionString, Long pid) {
// 获取权限信息
PermissionDO permissionDO = permissionMapper.getPermissionById(pid);

View File

@ -4,6 +4,7 @@ import com.jsl.oa.common.constant.BusinessConstants;
import com.jsl.oa.common.constant.RedisConstant;
import com.jsl.oa.config.redis.RedisConfiguration;
import com.jsl.oa.config.redis.RedisOperating;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
@ -22,6 +23,7 @@ import java.util.concurrent.TimeUnit;
* @see com.jsl.oa.common.constant.RedisConstant
* @since v1.1.0
*/
@Slf4j
@Component
public class EmailRedisUtil<R> extends RedisOperating<R> {
@ -41,6 +43,7 @@ public class EmailRedisUtil<R> extends RedisOperating<R> {
@Override
public Long getExpiredAt(@NotNull BusinessConstants businessConstants, String email) {
String key = RedisConstant.TYPE_EMAIL + RedisConstant.TABLE_EMAIL + businessConstants.getValue() + email;
log.info("\t\t> 读取 Redis 键为 {} 的过期时间", key);
return redisTemplate.getExpire(key);
}
@ -56,6 +59,7 @@ public class EmailRedisUtil<R> extends RedisOperating<R> {
@Override
public Boolean delData(@NotNull BusinessConstants businessConstants, String email) {
String key = RedisConstant.TYPE_EMAIL + RedisConstant.TABLE_EMAIL + businessConstants.getValue() + email;
log.info("\t\t> 删除 Redis 键为 {} 的数据", key);
return redisTemplate.delete(key);
}
@ -71,6 +75,7 @@ public class EmailRedisUtil<R> extends RedisOperating<R> {
@Override
public R getData(@NotNull BusinessConstants businessConstants, String email) {
String key = RedisConstant.TYPE_EMAIL + RedisConstant.TABLE_EMAIL + businessConstants.getValue() + email;
log.info("\t\t> 读取 Redis 键为 {} 的数据", key);
return redisTemplate.opsForValue().get(key);
}
@ -88,6 +93,7 @@ public class EmailRedisUtil<R> extends RedisOperating<R> {
public Boolean setData(@NotNull BusinessConstants businessConstants, String email, R value, Integer time) {
// 处理数据
String key = RedisConstant.TYPE_EMAIL + RedisConstant.TABLE_EMAIL + businessConstants.getValue() + email;
log.info("\t\t> 设置 Redis 键为 {} 的数据", key);
redisTemplate.opsForValue().set(key, value);
redisTemplate.expire(key, time, TimeUnit.MINUTES);
return true;

View File

@ -0,0 +1,61 @@
package com.jsl.oa.utils.redis;
import com.jsl.oa.common.constant.BusinessConstants;
import com.jsl.oa.common.constant.RedisConstant;
import com.jsl.oa.config.redis.RedisOperating;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import java.util.concurrent.TimeUnit;
/**
* <h1>权限Redis工具类</h1>
* <hr/>
* 权限Redis工具类
*
* @param <R> 泛型
* @since v1.1.0
* @version v1.1.0
* @see com.jsl.oa.common.constant.RedisConstant
* @author xiaofeng
*/
@Slf4j
@Component
public class PermissionRedisUtil<R> extends RedisOperating<R> {
public PermissionRedisUtil(RedisTemplate<String, R> redisTemplate, StringRedisTemplate stringRedisTemplate) {
super(redisTemplate, stringRedisTemplate);
}
@Override
public Long getExpiredAt(@NotNull BusinessConstants businessConstants, String field) {
String key = RedisConstant.TYPE_PERMISSION + RedisConstant.TABLE_ROLE + businessConstants.getValue() + field;
log.info("\t\t> 读取 Redis 键为 {} 的过期时间", key);
return redisTemplate.getExpire(key);
}
@Override
public Boolean delData(@NotNull BusinessConstants businessConstants, String field) {
String key = RedisConstant.TYPE_PERMISSION + RedisConstant.TABLE_ROLE + businessConstants.getValue() + field;
log.info("\t\t> 删除 Redis 键为 {} 的数据", key);
return redisTemplate.delete(key);
}
@Override
public R getData(@NotNull BusinessConstants businessConstants, String field) {
String key = RedisConstant.TYPE_PERMISSION + RedisConstant.TABLE_ROLE + businessConstants.getValue() + field;
log.info("\t\t> 读取 Redis 键为 {} 的数据", key);
return redisTemplate.opsForValue().get(key);
}
@Override
public Boolean setData(@NotNull BusinessConstants businessConstants, String field, R value, Integer time) {
String key = RedisConstant.TYPE_PERMISSION + RedisConstant.TABLE_ROLE + businessConstants.getValue() + field;
log.info("\t\t> 写入 Redis 键为 {} 的数据", key);
redisTemplate.opsForValue().set(key, value);
redisTemplate.expire(key, time, TimeUnit.MINUTES);
return true;
}
}

View File

@ -3,6 +3,7 @@ package com.jsl.oa.utils.redis;
import com.jsl.oa.common.constant.BusinessConstants;
import com.jsl.oa.common.constant.RedisConstant;
import com.jsl.oa.config.redis.RedisOperating;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
@ -11,6 +12,20 @@ import org.springframework.stereotype.Component;
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
* <h1>Token Redis 工具类</h1>
* <hr/>
* 用于 Token Redis 操作
*
* @param <R> 泛型
* @version v1.1.0
* @since v1.1.0
* @see RedisOperating
* @see RedisTemplate
* @see StringRedisTemplate
* @author xiao_lfeng
*/
@Slf4j
@Component
public class TokenRedisUtil<R> extends RedisOperating<R> {
public TokenRedisUtil(RedisTemplate<String, R> redisTemplate, StringRedisTemplate stringRedisTemplate) {
@ -20,18 +35,21 @@ public class TokenRedisUtil<R> extends RedisOperating<R> {
@Override
public Long getExpiredAt(@NotNull BusinessConstants businessConstants, String field) {
String key = RedisConstant.TYPE_AUTH + RedisConstant.TABLE_TOKEN + businessConstants.getValue() + field;
log.info("\t\t> 读取 Redis 键为 {} 的过期时间", key);
return redisTemplate.getExpire(key);
}
@Override
public Boolean delData(@NotNull BusinessConstants businessConstants, String field) {
String key = RedisConstant.TYPE_AUTH + RedisConstant.TABLE_TOKEN + businessConstants.getValue() + field;
log.info("\t\t> 删除 Redis 键为 {} 的数据", key);
return redisTemplate.delete(key);
}
@Override
public R getData(@NotNull BusinessConstants businessConstants, String field) {
String key = RedisConstant.TYPE_AUTH + RedisConstant.TABLE_TOKEN + businessConstants.getValue() + field;
log.info("\t\t> 读取 Redis 键为 {} 的数据", key);
return redisTemplate.opsForValue().get(key);
}
@ -39,6 +57,7 @@ public class TokenRedisUtil<R> extends RedisOperating<R> {
public Boolean setData(@NotNull BusinessConstants businessConstants, String field, R value, Integer time) {
// 处理数据
String key = RedisConstant.TYPE_AUTH + RedisConstant.TABLE_TOKEN + businessConstants.getValue() + field;
log.info("\t\t> 写入 Redis 键为 {} 的数据", key);
redisTemplate.opsForValue().set(key, value);
redisTemplate.expire(key, time, TimeUnit.MINUTES);
return true;
@ -46,6 +65,7 @@ public class TokenRedisUtil<R> extends RedisOperating<R> {
public List<R> getList(@NotNull BusinessConstants businessConstants) {
String key = RedisConstant.TYPE_AUTH + RedisConstant.TABLE_TOKEN + businessConstants.getValue() + "*";
log.info("\t\t> 读取 Redis 键为 {} 的数据", key);
return this.getList(key);
}
}

View File

@ -3,6 +3,7 @@ package com.jsl.oa.utils.redis;
import com.jsl.oa.common.constant.BusinessConstants;
import com.jsl.oa.common.constant.RedisConstant;
import com.jsl.oa.config.redis.RedisOperating;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
@ -20,6 +21,7 @@ import java.util.concurrent.TimeUnit;
* @version v1.1.0
* @author xiao_lfeng
*/
@Slf4j
@Component
public class UserRedisUtil<R> extends RedisOperating<R> {
public UserRedisUtil(RedisTemplate<String, R> redisTemplate, StringRedisTemplate stringRedisTemplate) {
@ -29,18 +31,21 @@ public class UserRedisUtil<R> extends RedisOperating<R> {
@Override
public Long getExpiredAt(@NotNull BusinessConstants businessConstants, String field) {
String key = RedisConstant.TYPE_AUTH + RedisConstant.TABLE_USER + businessConstants.getValue() + field;
log.info("\t\t> 读取 Redis 键为 {} 的过期时间", key);
return redisTemplate.getExpire(key);
}
@Override
public Boolean delData(@NotNull BusinessConstants businessConstants, String field) {
String key = RedisConstant.TYPE_AUTH + RedisConstant.TABLE_USER + businessConstants.getValue() + field;
log.info("\t\t> 删除 Redis 键为 {} 的数据", key);
return redisTemplate.delete(key);
}
@Override
public R getData(@NotNull BusinessConstants businessConstants, String field) {
String key = RedisConstant.TYPE_AUTH + RedisConstant.TABLE_USER + businessConstants.getValue() + field;
log.info("\t\t> 读取 Redis 键为 {} 的数据", key);
return redisTemplate.opsForValue().get(key);
}
@ -48,6 +53,7 @@ public class UserRedisUtil<R> extends RedisOperating<R> {
public Boolean setData(@NotNull BusinessConstants businessConstants, String field, R value, Integer time) {
// 处理数据
String key = RedisConstant.TYPE_AUTH + RedisConstant.TABLE_USER + businessConstants.getValue() + field;
log.info("\t\t> 写入 Redis 键为 {} 的数据", key);
redisTemplate.opsForValue().set(key, value);
redisTemplate.expire(key, time, TimeUnit.MINUTES);
return true;