patch: 日志修补,增加Redis

This commit is contained in:
筱锋xiao_lfeng 2024-01-23 16:50:22 +08:00
parent 73cea8544b
commit 1a12bcc49d
Signed by: XiaoLFeng
GPG Key ID: F693AA12AABBFA87
11 changed files with 291 additions and 88 deletions

View File

@ -71,7 +71,11 @@ public class AuthControllerAspect {
"&& !execution(* com.jsl.oa.controllers.AuthController.authLoginByEmail(..))" +
"&& !execution(* com.jsl.oa.controllers.AuthController.authForgetPassword(..))" +
"&& !execution(* com.jsl.oa.controllers.AuthController.authLogin(..))" +
"&& !execution(* com.jsl.oa.controllers.AuthController.authRegister(..))")
"&& !execution(* com.jsl.oa.controllers.AuthController.authRegister(..)) " +
"&& !execution(* com.jsl.oa.controllers.IndexController.*(..)) " +
"&& !execution(* com.jsl.oa.controllers.CustomController.*(..)) " +
"&& !execution(* com.jsl.oa.controllers.InfoController.infoGetHeaderImage(..)) " +
"&& !execution(* com.jsl.oa.controllers.InfoController.infoGetHeaderUser(..))")
public Object tokenControllerAround(ProceedingJoinPoint pjp) throws Throwable {
// 获取 HttpServletRequest 对象
HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();

View File

@ -3,11 +3,19 @@ package com.jsl.oa.common.constant;
import lombok.Getter;
/**
* <h1>业务常量</h1>
* <hr/>
* 业务常量
*
* @since v1.1.0
* @version v1.1.0
* @author xiao_lfeng
*/
@Getter
public enum BusinessConstants {
BUSINESS_LOGIN("login:", "登陆实现"),
ALL_PERMISSION("all:", "所有权限"),
USER("user:", "用户"),
NONE("", "null");
private final String value;

View File

@ -5,7 +5,7 @@ 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 com.jsl.oa.utils.redis.RoleRedisUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
@ -28,7 +28,7 @@ import java.util.List;
@RequiredArgsConstructor
public class PermissionDAO {
private final PermissionMapper permissionMapper;
private final PermissionRedisUtil<String> permissionRedisUtil;
private final RoleRedisUtil<String> roleRedisUtil;
private final Gson gson;
/**
@ -42,27 +42,14 @@ public class PermissionDAO {
public List<String> getPermission(@NotNull Long uid) {
log.info("\t> 执行 DAO 层 PermissionDAO.getPermission 方法");
List<String> getPermissionForString;
String permissionRedisString = permissionRedisUtil.getData(BusinessConstants.NONE, uid.toString());
String permissionRedisString = roleRedisUtil.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());
} else {
// 不存在父亲
permissionString.append(permission.getName());
}
// 寻找子类
this.getChildPermission(permissionString, permission.getId(), getPermissionForString);
getPermissionForString.add(permissionString.toString());
}
forPermissionToBuildString(permissionList, getPermissionForString);
// 存入 Redis
permissionRedisUtil.setData(BusinessConstants.NONE, uid.toString(), gson.toJson(getPermissionForString), 1440);
roleRedisUtil.setData(BusinessConstants.NONE, uid.toString(), gson.toJson(getPermissionForString), 1440);
} else {
log.info("\t\t> 从 Redis 获取数据");
getPermissionForString = gson.fromJson(permissionRedisString, new TypeToken<List<String>>() {}.getType());
@ -70,14 +57,83 @@ public class PermissionDAO {
return getPermissionForString;
}
public List<String> getAllPermissionBuildString() {
log.info("\t> 执行 DAO 层 PermissionDAO.getPermission 方法");
List<String> getPermissionForString;
String getRedisData = roleRedisUtil.getData(BusinessConstants.ALL_PERMISSION, "string");
if (getRedisData == null) {
log.info("\t\t> 从 MySQL 获取数据");
List<PermissionDO> permissionList = permissionMapper.getAllPermission();
permissionList.removeIf(it -> it.getPid() != null);
getPermissionForString = new ArrayList<>();
forPermissionToBuildString(permissionList, getPermissionForString);
// 存入 Redis
roleRedisUtil.setData(BusinessConstants.ALL_PERMISSION, "string", gson.toJson(getPermissionForString), 1440);
} else {
log.info("\t\t> 从 Redis 获取数据");
getPermissionForString = gson.fromJson(getRedisData, new TypeToken<List<String>>() {}.getType());
}
return getPermissionForString;
}
public List<PermissionDO> getRootPermission() {
log.info("\t> 执行 DAO 层 PermissionDAO.getRootPermission 方法");
String getRedisData = roleRedisUtil.getData(BusinessConstants.ALL_PERMISSION, "all");
if (getRedisData == null) {
log.info("\t\t> 从 MySQL 获取数据");
List<PermissionDO> permissionList = permissionMapper.getAllPermission();
if (!permissionList.isEmpty()) {
List<PermissionDO> getPermissionList = new ArrayList<>();
for (PermissionDO permission : permissionList) {
if (permission.getPid() == null) {
getPermissionList.add(permission);
}
}
roleRedisUtil.setData(BusinessConstants.ALL_PERMISSION, "all", gson.toJson(getPermissionList), 1440);
return getPermissionList;
} else {
return null;
}
} else {
log.info("\t\t> 从 Redis 获取数据");
return gson.fromJson(getRedisData, new TypeToken<List<PermissionDO>>() {
}.getType());
}
}
/**
* <h2>获取全部权限信息</h2>
* <hr/>
* 获取全部权限信息
*
* @param permissionList 权限信息
* @param getPermissionForString 存储权限信息
*/
private void forPermissionToBuildString(@NotNull List<PermissionDO> permissionList, List<String> getPermissionForString) {
for (PermissionDO permission : permissionList) {
// 寻找是否存在父亲
StringBuilder permissionString = new StringBuilder();
if (permission.getPid() != null) {
// 存在父亲
this.getFatherPermission(permissionString, permission.getPid());
} else {
// 不存在父亲
permissionString.append(permission.getName());
}
// 寻找子类
this.getChildPermission(permissionString, permission.getId(), getPermissionForString);
getPermissionForString.add(permissionString.toString());
}
}
/**
* <h2>获取子类权限信息</h2>
* <hr/>
* 通过父类 ID 获取子类权限信息<br/>
* 递归调用
*
* @param permissionString 父类权限信息
* @param id 父类 ID
* @param permissionString 父类权限信息
* @param id 父类 ID
* @param getPermissionForString 存储权限信息
*/
private void getChildPermission(StringBuilder permissionString, Long id, List<String> getPermissionForString) {
@ -111,7 +167,7 @@ public class PermissionDAO {
* 递归调用
*
* @param permissionString 父类权限信息
* @param pid 父类 ID
* @param pid 父类 ID
*/
public void getFatherPermission(StringBuilder permissionString, Long pid) {
// 获取权限信息

View File

@ -1,7 +1,12 @@
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.RoleMapper;
import com.jsl.oa.model.doData.RoleDO;
import com.jsl.oa.model.doData.RoleUserDO;
import com.jsl.oa.utils.redis.RoleRedisUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@ -14,6 +19,8 @@ import java.util.List;
@RequiredArgsConstructor
public class RoleDAO {
public final RoleMapper roleMapper;
private final Gson gson;
private final RoleRedisUtil<String> roleRedisUtil;
public void roleAddUser(Long uid, Long rid) {
log.info("\t> 执行 DAO 层 RoleDAO.roleAddUser 方法");
@ -37,32 +44,67 @@ public class RoleDAO {
public RoleDO getRoleById(Long id) {
log.info("\t> 执行 DAO 层 RoleDAO.getRoleById 方法");
log.info("\t\t> 从 MySQL 获取数据");
return roleMapper.getRoleById(id);
String getRedisData = roleRedisUtil.getData(BusinessConstants.NONE, "all");
if (getRedisData == null) {
log.info("\t\t> 从 MySQL 获取数据");
return roleMapper.getRoleById(id);
} else {
log.info("\t\t> 从 Redis 获取数据");
List<RoleDO> roleList = gson.fromJson(getRedisData, new TypeToken<List<RoleDO>>() {}.getType());
for (RoleDO roleDO : roleList) {
if (roleDO.getId().equals(id)) {
return roleDO;
}
}
return null;
}
}
public List<RoleDO> getRole() {
log.info("\t> 执行 DAO 层 RoleDAO.getRole 方法");
log.info("\t\t> 从 MySQL 获取数据");
return roleMapper.getRole();
String getRedisData = roleRedisUtil.getData(BusinessConstants.NONE, "all");
if (getRedisData == null) {
log.info("\t\t> 从 MySQL 获取数据");
List<RoleDO> roleList = roleMapper.getRole();
roleRedisUtil.setData(BusinessConstants.NONE, "all", gson.toJson(roleList), 1440);
return roleList;
} else {
log.info("\t\t> 从 Redis 获取数据");
return gson.fromJson(getRedisData, new TypeToken<List<RoleDO>>() {}.getType());
}
}
public void roleAdd(RoleDO roleDO) {
log.info("\t> 执行 DAO 层 RoleDAO.roleAdd 方法");
log.info("\t\t> 从 MySQL 获取数据");
roleMapper.roleAdd(roleDO);
List<RoleDO> roleList = roleMapper.getRole();
roleRedisUtil.setData(BusinessConstants.NONE, "all", gson.toJson(roleList), 1440);
}
public boolean roleEdit(RoleDO getRole) {
log.info("\t> 执行 DAO 层 RoleDAO.roleEdit 方法");
log.info("\t\t> 从 MySQL 获取数据");
return roleMapper.roleEdit(getRole);
if (roleMapper.roleEdit(getRole)) {
List<RoleDO> roleList = roleMapper.getRole();
roleRedisUtil.setData(BusinessConstants.NONE, "all", gson.toJson(roleList), 1440);
return true;
} else {
return false;
}
}
public boolean roleDelete(Long id) {
log.info("\t> 执行 DAO 层 RoleDAO.roleDelete 方法");
log.info("\t\t> 从 MySQL 获取数据");
return roleMapper.roleDelete(id);
if (roleMapper.roleDelete(id)) {
List<RoleDO> roleList = roleMapper.getRole();
roleRedisUtil.setData(BusinessConstants.NONE, "all", gson.toJson(roleList), 1440);
return true;
} else {
return false;
}
}
public boolean isExistRoleByRoleName(String roleName) {
@ -77,4 +119,10 @@ public class RoleDAO {
log.info("\t\t> 从 MySQL 获取数据");
return roleMapper.roleChangeUser(uid, rid);
}
public RoleUserDO getRoleUserByUid(Long uid) {
log.info("\t> 执行 DAO 层 RoleDAO.getRoleUserByUid 方法");
log.info("\t\t> 从 MySQL 获取数据");
return roleMapper.getRoleUserByUid(uid);
}
}

View File

@ -2,7 +2,6 @@ package com.jsl.oa.dao;
import com.google.gson.Gson;
import com.jsl.oa.common.constant.BusinessConstants;
import com.jsl.oa.mapper.RoleMapper;
import com.jsl.oa.mapper.UserMapper;
import com.jsl.oa.model.doData.RoleDO;
import com.jsl.oa.model.doData.RoleUserDO;
@ -26,7 +25,8 @@ import java.util.List;
public class UserDAO {
public final UserMapper userMapper;
private final RoleMapper roleMapper;
private final RoleDAO roleDAO;
private final PermissionDAO permissionDAO;
private final Gson gson;
private final UserRedisUtil<String> userRedisUtil;
@ -126,7 +126,7 @@ public class UserDAO {
List<UserDO> userCurrentDO = userMapper.getAllUser(userAllCurrentVO);
List<UserCurrentBackVO> userCurrentDOList = new ArrayList<>();
userCurrentDO.forEach(it -> {
userCurrentDOList.add(Processing.ReturnUserInfo(it, roleMapper));
userCurrentDOList.add(Processing.returnUserInfo(it, roleDAO, permissionDAO));
});
return userCurrentDOList;
@ -138,7 +138,7 @@ public class UserDAO {
List<UserDO> userCurrentDO = userMapper.getAllUserBySearch(userAllCurrentVO);
List<UserCurrentBackVO> userCurrentDOList = new ArrayList<>();
userCurrentDO.forEach(it -> {
userCurrentDOList.add(Processing.ReturnUserInfo(it, roleMapper));
userCurrentDOList.add(Processing.returnUserInfo(it, roleDAO, permissionDAO));
});
return userCurrentDOList;
}

View File

@ -1,7 +1,9 @@
package com.jsl.oa.services.impl;
import com.jsl.oa.annotations.CheckUserAbleToUse;
import com.jsl.oa.common.constant.BusinessConstants;
import com.jsl.oa.mapper.RoleMapper;
import com.jsl.oa.dao.PermissionDAO;
import com.jsl.oa.dao.RoleDAO;
import com.jsl.oa.mapper.UserMapper;
import com.jsl.oa.model.doData.RoleUserDO;
import com.jsl.oa.model.doData.UserDO;
@ -19,7 +21,7 @@ import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
/**
@ -30,13 +32,15 @@ import java.util.regex.Pattern;
* @version v1.1.0
* @see AuthService
* @since v1.0.0
* @author xiao_lfeng
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class AuthServiceImpl implements AuthService {
private final UserMapper userMapper;
private final RoleMapper roleMapper;
private final RoleDAO roleDAO;
private final PermissionDAO permissionDAO;
private final MailService mailService;
private final EmailRedisUtil<Integer> emailRedisUtil;
@ -167,6 +171,7 @@ public class AuthServiceImpl implements AuthService {
}
@Override
@CheckUserAbleToUse
public BaseResponse authChangePassword(HttpServletRequest request, @NotNull UserChangePasswordVO userChangePasswordVO) {
log.info("\t> 执行 Service 层 AuthService.authChangePassword 方法");
// 检查新密码输入无误
@ -193,6 +198,7 @@ public class AuthServiceImpl implements AuthService {
}
@Override
@CheckUserAbleToUse
public BaseResponse authLogout(HttpServletRequest request) {
log.info("\t> 执行 Service 层 AuthService.authLogout 方法");
// 获取用户
@ -206,7 +212,7 @@ public class AuthServiceImpl implements AuthService {
}
@Override
public BaseResponse authForgetPassword(UserForgetPasswordVO userForgetPasswordVO) {
public BaseResponse authForgetPassword(@NotNull UserForgetPasswordVO userForgetPasswordVO) {
log.info("\t> 执行 Service 层 AuthService.authForgetPassword 方法");
// 获取验证码是否有效
Integer redisCode = emailRedisUtil.getData(BusinessConstants.BUSINESS_LOGIN, userForgetPasswordVO.getEmail());
@ -242,8 +248,17 @@ public class AuthServiceImpl implements AuthService {
UserReturnBackVO userReturnBackVO = new UserReturnBackVO();
// Token 上传到 Redis
tokenRedisUtil.setData(BusinessConstants.BUSINESS_LOGIN, userDO.getId().toString(), token, 1440);
RoleUserDO roleUserDO = roleDAO.getRoleUserByUid(userDO.getId());
List<String> getPermissionForString;
if (roleUserDO != null) {
// 获取全部根权限
getPermissionForString = permissionDAO.getAllPermissionBuildString();
} else {
// 获取权限列表信息
getPermissionForString = permissionDAO.getPermission(userDO.getId());
}
// 获取用户角色
RoleUserDO getUserRole = roleMapper.getRoleUserByUid(userDO.getId());
RoleUserDO getUserRole = roleDAO.roleMapper.getRoleUserByUid(userDO.getId());
if (getUserRole == null) {
getUserRole = new RoleUserDO();
getUserRole.setRid(0L)
@ -260,7 +275,7 @@ public class AuthServiceImpl implements AuthService {
.setRole(new UserReturnBackVO.ReturnUserRole()
.setRid(getUserRole.getRid()))
.setToken(token)
.setPermission(new ArrayList<>());
.setPermission(getPermissionForString);
return ResultUtil.success("登陆成功", userReturnBackVO);
}
}

View File

@ -1,5 +1,6 @@
package com.jsl.oa.services.impl;
import com.jsl.oa.annotations.CheckUserHasPermission;
import com.jsl.oa.dao.InfoDAO;
import com.jsl.oa.dao.UserDAO;
import com.jsl.oa.mapper.RoleMapper;
@ -21,6 +22,15 @@ import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
/**
* <h1>信息服务层实现类</h1>
* <hr/>
* 用于信息服务层的实现类
*
* @since v1.0.0
* @version v1.1.0
* @author xiao_lfeng
*/
@Slf4j
@Service
@RequiredArgsConstructor
@ -30,6 +40,7 @@ public class InfoServiceImpl implements InfoService {
private final UserDAO userDAO;
@Override
@CheckUserHasPermission("")
public BaseResponse addHeaderImage(HttpServletRequest request, CarouselVO carouselVO) {
log.info("\t> 执行 Service 层 InfoService.addHeaderImage 方法");
// 用户权限校验

View File

@ -1,10 +1,12 @@
package com.jsl.oa.services.impl;
import com.jsl.oa.annotations.CheckUserHasPermission;
import com.jsl.oa.dao.PermissionDAO;
import com.jsl.oa.dao.RoleDAO;
import com.jsl.oa.dao.UserDAO;
import com.jsl.oa.mapper.PermissionMapper;
import com.jsl.oa.mapper.RoleMapper;
import com.jsl.oa.model.doData.PermissionDO;
import com.jsl.oa.model.doData.RoleUserDO;
import com.jsl.oa.model.voData.PermissionContentVo;
import com.jsl.oa.model.voData.PermissionEditVO;
import com.jsl.oa.services.PermissionService;
@ -19,32 +21,48 @@ import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* <h1>权限服务层实现类</h1>
* <hr/>
* 用于权限服务层的实现类,实现权限的增删改查,以及用户权限的获取
*
* @since v1.0.0
* @version v1.1.0
* @author xiao_lfeng | xiangZr-hhh | 176yunxuan
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class PermissionServiceImpl implements PermissionService {
private final PermissionMapper permissionMapper;
private final RoleMapper roleMapper;
private final RoleDAO roleDAO;
private final PermissionDAO permissionDAO;
private final UserDAO userDAO;
@Override
@CheckUserHasPermission("permission.add")
public BaseResponse permissionAdd(HttpServletRequest request, Long rid, Long pid) {
log.info("\t> 执行 Service 层 PermissionService.permissionAdd 方法");
if (!Processing.checkUserIsAdmin(request, roleMapper)) {
return ResultUtil.error(ErrorCode.NOT_ADMIN);
}
permissionMapper.permissionAdd(rid, pid);
return ResultUtil.success();
}
@Override
@CheckUserHasPermission("permission.user")
public BaseResponse permissionUser(HttpServletRequest request, Long uid) {
log.info("\t> 执行 Service 层 PermissionService.permissionUserPid 方法");
if (userDAO.isExistUser(uid)) {
// 获取权限列表信息
List<String> getPermissionForString = permissionDAO.getPermission(uid);
// 此用户是否为管理员
RoleUserDO roleUserDO = roleDAO.getRoleUserByUid(uid);
List<String> getPermissionForString;
if (roleUserDO != null) {
// 获取全部根权限
getPermissionForString = permissionDAO.getAllPermissionBuildString();
} else {
// 获取权限列表信息
getPermissionForString = permissionDAO.getPermission(uid);
}
return ResultUtil.success(getPermissionForString);
}
return ResultUtil.error(ErrorCode.USER_NOT_EXIST);
@ -52,12 +70,9 @@ public class PermissionServiceImpl implements PermissionService {
@Override
@CheckUserHasPermission("permission.get")
public BaseResponse permissionGet(HttpServletRequest request) {
log.info("\t> 执行 Service 层 PermissionService.permissionGet 方法");
//检验用户权限是否为管理员
if (!Processing.checkUserIsAdmin(request, roleMapper)) {
return ResultUtil.error(ErrorCode.NOT_ADMIN);
}
//获取所有权限数据
List<PermissionDO> permissionDOList = permissionMapper.getAllPermission();
//将数据按父子类封装
@ -67,12 +82,9 @@ public class PermissionServiceImpl implements PermissionService {
}
@Override
@CheckUserHasPermission("permission.edit")
public BaseResponse permissionEdit(PermissionEditVO permissionEditVo, HttpServletRequest request) {
log.info("\t> 执行 Service 层 PermissionService.permissionEdit 方法");
//检验用户权限是否为管理员
if (!Processing.checkUserIsAdmin(request, roleMapper)) {
return ResultUtil.error(ErrorCode.NOT_ADMIN);
}
//根据id获取对应permission数据
PermissionDO permissionDO = permissionMapper.getPermissionById(permissionEditVo.getId());
if (permissionDO == null) {
@ -88,12 +100,9 @@ public class PermissionServiceImpl implements PermissionService {
}
@Override
@CheckUserHasPermission("permission.delete")
public BaseResponse permissionDelete(HttpServletRequest request, Long pid) {
log.info("\t> 执行 Service 层 PermissionService.permissionDelete 方法");
//检验用户权限是否为管理员
if (!Processing.checkUserIsAdmin(request, roleMapper)) {
return ResultUtil.error(ErrorCode.NOT_ADMIN);
}
//删除权限
if (!permissionMapper.deletePermission(pid)) {
return ResultUtil.error(ErrorCode.DATABASE_DELETE_ERROR);

View File

@ -10,7 +10,10 @@ import com.jsl.oa.model.doData.RoleUserDO;
import com.jsl.oa.model.doData.UserDO;
import com.jsl.oa.model.voData.*;
import com.jsl.oa.services.UserService;
import com.jsl.oa.utils.*;
import com.jsl.oa.utils.BaseResponse;
import com.jsl.oa.utils.ErrorCode;
import com.jsl.oa.utils.Processing;
import com.jsl.oa.utils.ResultUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
@ -134,7 +137,7 @@ public class UserServiceImpl implements UserService {
// Token获取信息
UserDO userDO = userDAO.getUserById(Processing.getAuthHeaderToUserId(request));
if (userDO != null) {
return ResultUtil.success(Processing.ReturnUserInfo(userDO, roleDAO.roleMapper));
return ResultUtil.success(Processing.returnUserInfo(userDO, roleDAO, permissionDAO));
} else {
return ResultUtil.error(ErrorCode.USER_NOT_EXIST);
}
@ -173,7 +176,7 @@ public class UserServiceImpl implements UserService {
}
// 返回结果
if (userDO != null) {
return ResultUtil.success(Processing.ReturnUserInfo(userDO, roleDAO.roleMapper));
return ResultUtil.success(Processing.returnUserInfo(userDO, roleDAO, permissionDAO));
} else {
return ResultUtil.error(ErrorCode.USER_NOT_EXIST);
}
@ -260,29 +263,4 @@ public class UserServiceImpl implements UserService {
userProfileVo.setSex(Processing.getSex(userDO.getSex()));
return ResultUtil.success(userProfileVo);
}
/**
* @Description: 判断用户是否为管理员
* @Date: 2024/1/18
* @Param request: 请求头
**/
public BaseResponse isManager(HttpServletRequest request) {
//获取token
String originalAuthorization = request.getHeader("Authorization");
String token = originalAuthorization.replace("Bearer ", "");
//获取操作用户的权限
RoleUserDO roleUserDO = userDAO.getRoleFromUser(JwtUtil.getUserId(token));
//用户权限不为空
if (roleUserDO == null) {
return ResultUtil.error(ErrorCode.USER_ROLE_NOT_EXIST);
}
//用户权限应为管理员
if (!userDAO.isManagerByRoleId(roleUserDO.getRid())) {
return ResultUtil.error(ErrorCode.USER_ROLE_NOT_MANAGER);
}
return ResultUtil.success();
}
}

View File

@ -1,5 +1,7 @@
package com.jsl.oa.utils;
import com.jsl.oa.dao.PermissionDAO;
import com.jsl.oa.dao.RoleDAO;
import com.jsl.oa.exception.ClassCopyException;
import com.jsl.oa.mapper.RoleMapper;
import com.jsl.oa.model.doData.PermissionDO;
@ -257,10 +259,10 @@ public class Processing {
* @param userDO 用户信息
* @return {@link BaseResponse}
*/
public static @NotNull UserCurrentBackVO ReturnUserInfo(@NotNull UserDO userDO, RoleMapper roleMapper) {
public static @NotNull UserCurrentBackVO returnUserInfo(@NotNull UserDO userDO, RoleDAO roleDAO, PermissionDAO permissionDAO) {
UserCurrentBackVO userCurrentBackVO = new UserCurrentBackVO();
// 获取用户角色
RoleUserDO getUserRole = roleMapper.getRoleUserByUid(userDO.getId());
RoleUserDO getUserRole = roleDAO.getRoleUserByUid(userDO.getId());
if (getUserRole == null) {
getUserRole = new RoleUserDO();
getUserRole.setRid(0L)
@ -268,6 +270,16 @@ public class Processing {
} else {
getUserRole.setUid(null);
}
// 获取用户权限
RoleUserDO roleUserDO = roleDAO.getRoleUserByUid(userDO.getId());
List<String> getPermissionForString;
if (roleUserDO != null) {
// 获取全部根权限
getPermissionForString = permissionDAO.getAllPermissionBuildString();
} else {
// 获取权限列表信息
getPermissionForString = permissionDAO.getPermission(userDO.getId());
}
userCurrentBackVO.setUser(new UserCurrentBackVO.ReturnUser()
.setId(userDO.getId())
.setJobId(userDO.getJobId())
@ -291,7 +303,7 @@ public class Processing {
.setIsDelete(userDO.getIsDelete()))
.setRole(new UserCurrentBackVO.ReturnUserRole()
.setRid(getUserRole.getRid()))
.setPermission(new ArrayList<>());
.setPermission(getPermissionForString);
return userCurrentBackVO;
}

View File

@ -0,0 +1,62 @@
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工具类
*
* @since v1.1.0
* @version v1.1.0
* @see com.jsl.oa.common.constant.RedisConstant
* @see com.jsl.oa.common.constant.BusinessConstants
* @see com.jsl.oa.config.redis.RedisOperating
* @author xiao_lfeng
*/
@Slf4j
@Component
public class RoleRedisUtil<R> extends RedisOperating<R> {
public RoleRedisUtil(RedisTemplate<String, R> redisTemplate, StringRedisTemplate stringRedisTemplate) {
super(redisTemplate, stringRedisTemplate);
}
@Override
public Long getExpiredAt(@NotNull BusinessConstants businessConstants, String field) {
String key = RedisConstant.TYPE_AUTH + 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_AUTH + 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_AUTH + 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_AUTH + 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;
}
}