feat: 添加权限检查功能,增强系统完整

This commit is contained in:
筱锋xiao_lfeng 2024-04-17 00:48:26 +08:00
parent a2cd19675e
commit 87bb3fb069
Signed by: XiaoLFeng
GPG Key ID: F693AA12AABBFA87
5 changed files with 97 additions and 5 deletions

View File

@ -0,0 +1,40 @@
package com.jsl.oa.config.startup;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import java.util.ArrayList;
@Getter
public class PermissionList {
@Getter
@RequiredArgsConstructor
public static class PermissionVO {
private final String name;
private final String desc;
}
private final ArrayList<PermissionList.PermissionVO> permissionList = new ArrayList<>();
private final ArrayList<PermissionList.PermissionVO> permissionPrincipal = new ArrayList<>();
private final ArrayList<PermissionList.PermissionVO> permissionDeveloper = new ArrayList<>();
public PermissionList() {
permissionList.add(new PermissionVO("auth:logout", "账户登出"));
permissionList.add(new PermissionVO("auth:change_password", "修改密码"));
permissionList.add(new PermissionVO("info:get_header_image", "获取头部图片"));
permissionList.add(new PermissionVO("info:edit_header_image", "编辑头部图片"));
permissionList.add(new PermissionVO("info:delete_header_image", "删除头部图片"));
permissionPrincipal.add(new PermissionVO("auth:logout", "账户登出"));
permissionPrincipal.add(new PermissionVO("auth:change_password", "修改密码"));
permissionPrincipal.add(new PermissionVO("info:get_header_image", "获取头部图片"));
permissionPrincipal.add(new PermissionVO("info:edit_header_image", "编辑头部图片"));
permissionPrincipal.add(new PermissionVO("info:delete_header_image", "删除头部图片"));
permissionDeveloper.add(new PermissionVO("auth:logout", "账户登出"));
permissionDeveloper.add(new PermissionVO("auth:change_password", "修改密码"));
permissionDeveloper.add(new PermissionVO("info:get_header_image", "获取头部图片"));
permissionDeveloper.add(new PermissionVO("info:edit_header_image", "编辑头部图片"));
permissionDeveloper.add(new PermissionVO("info:delete_header_image", "删除头部图片"));
}
}

View File

@ -1,5 +1,6 @@
package com.jsl.oa.config.startup;
import com.google.gson.Gson;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.io.Resource;
@ -11,6 +12,7 @@ import org.springframework.util.FileCopyUtils;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
@Slf4j
@RequiredArgsConstructor
@ -76,4 +78,17 @@ public class PrepareData {
}
}
}
public void checkPermission(String roleName, ArrayList<PermissionList.PermissionVO> permissions) {
ArrayList<String> newPermissions = new ArrayList<>();
permissions.forEach(it -> newPermissions.add(it.getName()));
Gson gson = new Gson();
String getPermissionString = gson.toJson(newPermissions);
log.debug("[Preparation] 更新角色 {} 权限", roleName);
jdbcTemplate.update(
"UPDATE organize_oa.oa_role SET permissions = ? WHERE role_name = ?",
getPermissionString,
roleName
);
}
}

View File

@ -37,6 +37,7 @@ import java.util.HashMap;
@RequiredArgsConstructor
public class StartupConfiguration {
private final JdbcTemplate jdbcTemplate;
private final PermissionList getPermission = new PermissionList();
private PrepareData prepareData;
@Bean
@ -78,20 +79,49 @@ public class StartupConfiguration {
};
}
@Bean
@Order(3)
public CommandLineRunner permissionDataPreparation() {
return args -> {
log.info("[Preparation] 系统进行权限表完整性检查");
getPermission.getPermissionList().forEach(permissionVO -> {
try {
jdbcTemplate.queryForObject(
"SELECT id FROM organize_oa.oa_permissions WHERE name = ?",
Long.class,
permissionVO.getName()
);
} catch (DataAccessException e) {
log.debug("[Preparation] 缺失 {} 权限,正在创建", permissionVO.getName());
jdbcTemplate.update(
"INSERT INTO organize_oa.oa_permissions (name, description) VALUES (?,?)",
permissionVO.getName(),
permissionVO.getDesc()
);
}
});
};
}
/**
* 对数据表进行完整性检查
* <hr/>
* 对数据表进行完整性检查检查数据表是否有数据缺失等信息
*/
@Bean
@Order(3)
@Order(4)
public CommandLineRunner roleDataPreparation() {
return args -> {
log.info("[Preparation] 系统进行数据表完整性检查");
log.info("[Preparation] 系统进行角色表完整性检查");
// 检查角色信息是否完整
prepareData.checkRole("console", "超级管理员");
prepareData.checkRole("principal", "负责人");
prepareData.checkRole("developer", "开发者");
// 对权限的检查
prepareData.checkPermission("console", getPermission.getPermissionList());
prepareData.checkPermission("principal", getPermission.getPermissionPrincipal());
prepareData.checkPermission("developer", getPermission.getPermissionDeveloper());
};
}
@ -102,7 +132,7 @@ public class StartupConfiguration {
* 账户
*/
@Bean
@Order(4)
@Order(5)
public CommandLineRunner defaultConsoleDataPreparation() {
return args -> {
log.info("[Preparation] 系统进行默认超级管理员信息检查");
@ -162,7 +192,7 @@ public class StartupConfiguration {
}
@Bean
@Order(5)
@Order(6)
public CommandLineRunner prepareDefaultConfigData(Gson gson) {
return args -> {
// 检查加密密钥是否存在
@ -209,7 +239,7 @@ public class StartupConfiguration {
* 准备安全密钥用于加密解密等操作
*/
@Bean
@Order(6)
@Order(7)
public CommandLineRunner prepareKey() {
return args -> {
log.info("[Preparation] 系统进行安全密钥准备");

View File

@ -1,5 +1,6 @@
package com.jsl.oa.controllers;
import com.jsl.oa.annotations.NeedPermission;
import com.jsl.oa.model.vodata.UserChangePasswordVO;
import com.jsl.oa.model.vodata.UserForgetPasswordVO;
import com.jsl.oa.model.vodata.UserLoginVO;
@ -146,6 +147,7 @@ public class AuthController {
* @since v1.1.0
*/
@GetMapping("/auth/logout")
@NeedPermission("auth:logout")
public BaseResponse authLogout(HttpServletRequest request) {
return authService.authLogout(request);
}
@ -162,6 +164,7 @@ public class AuthController {
* @since v1.1.0
*/
@PutMapping("/auth/password")
@NeedPermission("auth:change_password")
public BaseResponse authChangePassword(
@RequestBody @Validated UserChangePasswordVO userChangePasswordVO,
@NotNull BindingResult bindingResult,

View File

@ -1,5 +1,6 @@
package com.jsl.oa.controllers;
import com.jsl.oa.annotations.NeedPermission;
import com.jsl.oa.model.vodata.business.info.CarouselVO;
import com.jsl.oa.services.InfoService;
import com.jsl.oa.utils.BaseResponse;
@ -41,6 +42,7 @@ public class InfoController {
* @return 图片信息
*/
@GetMapping("/info/header-image/get")
@NeedPermission("info:get_header_image")
public BaseResponse infoGetHeaderImage(@RequestParam(required = false) Integer id) {
return infoService.getHeaderImage(id);
}
@ -54,6 +56,7 @@ public class InfoController {
* @return 编辑结果
*/
@PutMapping("/info/header-image/edit")
@NeedPermission("info:edit_header_image")
public BaseResponse infoEditHeaderImage(
@RequestBody @Validated CarouselVO carouselVO,
HttpServletRequest request,
@ -79,6 +82,7 @@ public class InfoController {
* @return 删除结果
*/
@DeleteMapping("/info/header-image/del")
@NeedPermission("info:delete_header_image")
public BaseResponse infoDelHeaderImage(@RequestParam Integer id, HttpServletRequest request) {
return infoService.delHeaderImage(request, id);
}