feat: 添加权限检查功能,增强系统完整
This commit is contained in:
parent
a2cd19675e
commit
87bb3fb069
40
src/main/java/com/jsl/oa/config/startup/PermissionList.java
Normal file
40
src/main/java/com/jsl/oa/config/startup/PermissionList.java
Normal 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", "删除头部图片"));
|
||||
}
|
||||
}
|
|
@ -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
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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] 系统进行安全密钥准备");
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user