patch: 日志修补,增加Redis
This commit is contained in:
parent
73cea8544b
commit
1a12bcc49d
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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) {
|
||||
// 获取权限信息
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 方法");
|
||||
// 用户权限校验
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
62
src/main/java/com/jsl/oa/utils/redis/RoleRedisUtil.java
Normal file
62
src/main/java/com/jsl/oa/utils/redis/RoleRedisUtil.java
Normal 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;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user