feat: 菜单、角色、字典、部门添加接口权限控制

This commit is contained in:
haoxr
2023-05-21 14:36:33 +08:00
parent 67be91a214
commit b0827b1924
6 changed files with 32 additions and 19 deletions

View File

@@ -4,14 +4,14 @@ package com.youlai.system.common.constant;
* 系统常量 * 系统常量
* *
* @author haoxr * @author haoxr
* @date 2022/10/22 * @since 2022/10/22
*/ */
public interface SystemConstants { public interface SystemConstants {
/** /**
* 根节点ID * 根节点ID
*/ */
Long ROOT_NODE_ID = 0l; Long ROOT_NODE_ID = 0L;
/** /**

View File

@@ -1,5 +1,6 @@
package com.youlai.system.controller; package com.youlai.system.controller;
import com.youlai.system.framework.resubmit.Resubmit;
import com.youlai.system.pojo.vo.Option; import com.youlai.system.pojo.vo.Option;
import com.youlai.system.common.result.Result; import com.youlai.system.common.result.Result;
import com.youlai.system.pojo.form.DeptForm; import com.youlai.system.pojo.form.DeptForm;
@@ -12,6 +13,7 @@ import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springdoc.core.annotations.ParameterObject; import org.springdoc.core.annotations.ParameterObject;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import jakarta.validation.Valid; import jakarta.validation.Valid;
@@ -21,7 +23,7 @@ import java.util.List;
* 部门控制器 * 部门控制器
* *
* @author haoxr * @author haoxr
* @date 2020/11/6 * @since 2020/11/6
*/ */
@Tag(name = "05.部门接口") @Tag(name = "05.部门接口")
@RestController @RestController
@@ -56,6 +58,8 @@ public class SysDeptController {
@Operation(summary = "新增部门", security = {@SecurityRequirement(name = "Authorization")}) @Operation(summary = "新增部门", security = {@SecurityRequirement(name = "Authorization")})
@PostMapping @PostMapping
@PreAuthorize("@ss.hasPerm('sys:dept:add')")
@Resubmit
public Result saveDept( public Result saveDept(
@Valid @RequestBody DeptForm formData @Valid @RequestBody DeptForm formData
) { ) {
@@ -65,6 +69,7 @@ public class SysDeptController {
@Operation(summary = "修改部门", security = {@SecurityRequirement(name = "Authorization")}) @Operation(summary = "修改部门", security = {@SecurityRequirement(name = "Authorization")})
@PutMapping(value = "/{deptId}") @PutMapping(value = "/{deptId}")
@PreAuthorize("@ss.hasPerm('sys:dept:edit')")
public Result updateDept( public Result updateDept(
@PathVariable Long deptId, @PathVariable Long deptId,
@Valid @RequestBody DeptForm formData @Valid @RequestBody DeptForm formData
@@ -75,6 +80,7 @@ public class SysDeptController {
@Operation(summary = "删除部门", security = {@SecurityRequirement(name = "Authorization")}) @Operation(summary = "删除部门", security = {@SecurityRequirement(name = "Authorization")})
@DeleteMapping("/{ids}") @DeleteMapping("/{ids}")
@PreAuthorize("@ss.hasPerm('sys:dept:delete')")
public Result deleteDepartments( public Result deleteDepartments(
@Parameter(description ="部门ID多个以英文逗号(,)分割") @PathVariable("ids") String ids @Parameter(description ="部门ID多个以英文逗号(,)分割") @PathVariable("ids") String ids
) { ) {

View File

@@ -1,24 +1,24 @@
package com.youlai.system.controller; package com.youlai.system.controller;
import com.youlai.system.pojo.form.MenuForm;
import com.youlai.system.pojo.vo.Option;
import com.youlai.system.common.result.Result; import com.youlai.system.common.result.Result;
import com.youlai.system.pojo.entity.SysMenu; import com.youlai.system.framework.resubmit.Resubmit;
import com.youlai.system.pojo.form.MenuForm;
import com.youlai.system.pojo.query.MenuQuery; import com.youlai.system.pojo.query.MenuQuery;
import com.youlai.system.pojo.vo.MenuVO; import com.youlai.system.pojo.vo.MenuVO;
import com.youlai.system.pojo.vo.Option;
import com.youlai.system.pojo.vo.RouteVO; import com.youlai.system.pojo.vo.RouteVO;
import com.youlai.system.service.SysMenuService; import com.youlai.system.service.SysMenuService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springdoc.core.annotations.ParameterObject; import org.springdoc.core.annotations.ParameterObject;
import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.CacheEvict;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
import java.util.List; import java.util.List;
/** /**
@@ -68,6 +68,8 @@ public class SysMenuController {
@Operation(summary = "新增菜单",security = {@SecurityRequirement(name = "Authorization")}) @Operation(summary = "新增菜单",security = {@SecurityRequirement(name = "Authorization")})
@PostMapping @PostMapping
@PreAuthorize("@ss.hasPerm('sys:menu:add')")
@Resubmit
@CacheEvict(cacheNames = "system", key = "'routes'") @CacheEvict(cacheNames = "system", key = "'routes'")
public Result addMenu(@RequestBody MenuForm menuForm) { public Result addMenu(@RequestBody MenuForm menuForm) {
boolean result = menuService.saveMenu(menuForm); boolean result = menuService.saveMenu(menuForm);
@@ -76,6 +78,7 @@ public class SysMenuController {
@Operation(summary = "修改菜单",security = {@SecurityRequirement(name = "Authorization")}) @Operation(summary = "修改菜单",security = {@SecurityRequirement(name = "Authorization")})
@PutMapping(value = "/{id}") @PutMapping(value = "/{id}")
@PreAuthorize("@ss.hasPerm('sys:menu:edit')")
@CacheEvict(cacheNames = "system", key = "'routes'") @CacheEvict(cacheNames = "system", key = "'routes'")
public Result updateMenu( public Result updateMenu(
@RequestBody MenuForm menuForm @RequestBody MenuForm menuForm
@@ -86,6 +89,7 @@ public class SysMenuController {
@Operation(summary = "删除菜单",security = {@SecurityRequirement(name = "Authorization")}) @Operation(summary = "删除菜单",security = {@SecurityRequirement(name = "Authorization")})
@DeleteMapping("/{id}") @DeleteMapping("/{id}")
@PreAuthorize("@ss.hasPerm('sys:menu:delete')")
@CacheEvict(cacheNames = "system", key = "'routes'") @CacheEvict(cacheNames = "system", key = "'routes'")
public Result deleteMenu( public Result deleteMenu(
@Parameter(description ="菜单ID多个以英文(,)分割") @PathVariable("id") Long id @Parameter(description ="菜单ID多个以英文(,)分割") @PathVariable("id") Long id

View File

@@ -1,6 +1,7 @@
package com.youlai.system.controller; package com.youlai.system.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.system.framework.resubmit.Resubmit;
import com.youlai.system.pojo.vo.Option; import com.youlai.system.pojo.vo.Option;
import com.youlai.system.common.result.PageResult; import com.youlai.system.common.result.PageResult;
import com.youlai.system.common.result.Result; import com.youlai.system.common.result.Result;
@@ -14,6 +15,7 @@ import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springdoc.core.annotations.ParameterObject; import org.springdoc.core.annotations.ParameterObject;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import jakarta.validation.Valid; import jakarta.validation.Valid;
@@ -45,6 +47,8 @@ public class SysRoleController {
@Operation(summary = "新增角色",security = {@SecurityRequirement(name = "Authorization")}) @Operation(summary = "新增角色",security = {@SecurityRequirement(name = "Authorization")})
@PostMapping @PostMapping
@PreAuthorize("@ss.hasPerm('sys:role:add')")
@Resubmit
public Result addRole(@Valid @RequestBody RoleForm roleForm) { public Result addRole(@Valid @RequestBody RoleForm roleForm) {
boolean result = roleService.saveRole(roleForm); boolean result = roleService.saveRole(roleForm);
return Result.judge(result); return Result.judge(result);
@@ -61,6 +65,7 @@ public class SysRoleController {
@Operation(summary = "修改角色",security = {@SecurityRequirement(name = "Authorization")}) @Operation(summary = "修改角色",security = {@SecurityRequirement(name = "Authorization")})
@PutMapping(value = "/{id}") @PutMapping(value = "/{id}")
@PreAuthorize("@ss.hasPerm('sys:role:edit')")
public Result updateRole(@Valid @RequestBody RoleForm roleForm) { public Result updateRole(@Valid @RequestBody RoleForm roleForm) {
boolean result = roleService.saveRole(roleForm); boolean result = roleService.saveRole(roleForm);
return Result.judge(result); return Result.judge(result);
@@ -68,6 +73,7 @@ public class SysRoleController {
@Operation(summary = "删除角色",security = {@SecurityRequirement(name = "Authorization")}) @Operation(summary = "删除角色",security = {@SecurityRequirement(name = "Authorization")})
@DeleteMapping("/{ids}") @DeleteMapping("/{ids}")
@PreAuthorize("@ss.hasPerm('sys:role:delete')")
public Result deleteRoles( public Result deleteRoles(
@Parameter(description ="删除角色,多个以英文逗号(,)分割") @PathVariable String ids @Parameter(description ="删除角色,多个以英文逗号(,)分割") @PathVariable String ids
) { ) {

View File

@@ -104,6 +104,7 @@ public class SysUserController {
@Operation(summary = "修改用户密码", security = {@SecurityRequirement(name = "Authorization")}) @Operation(summary = "修改用户密码", security = {@SecurityRequirement(name = "Authorization")})
@PatchMapping(value = "/{userId}/password") @PatchMapping(value = "/{userId}/password")
@PreAuthorize("@ss.hasPerm('sys:user:reset_pwd')")
public Result updatePassword( public Result updatePassword(
@Parameter(description = "用户ID") @PathVariable Long userId, @Parameter(description = "用户ID") @PathVariable Long userId,
@RequestParam String password @RequestParam String password

View File

@@ -2,13 +2,13 @@ package com.youlai.system.service.impl;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.youlai.system.common.constant.SecurityConstants;
import com.youlai.system.common.constant.SystemConstants; import com.youlai.system.common.constant.SystemConstants;
import com.youlai.system.converter.UserConverter; import com.youlai.system.converter.UserConverter;
import com.youlai.system.framework.security.util.SecurityUtils; import com.youlai.system.framework.security.util.SecurityUtils;
@@ -17,7 +17,6 @@ import com.youlai.system.pojo.bo.UserAuthInfo;
import com.youlai.system.pojo.bo.UserBO; import com.youlai.system.pojo.bo.UserBO;
import com.youlai.system.pojo.bo.UserFormBO; import com.youlai.system.pojo.bo.UserFormBO;
import com.youlai.system.pojo.entity.SysUser; import com.youlai.system.pojo.entity.SysUser;
import com.youlai.system.pojo.form.RoleForm;
import com.youlai.system.pojo.form.UserForm; import com.youlai.system.pojo.form.UserForm;
import com.youlai.system.pojo.query.UserPageQuery; import com.youlai.system.pojo.query.UserPageQuery;
import com.youlai.system.pojo.vo.UserExportVO; import com.youlai.system.pojo.vo.UserExportVO;
@@ -182,24 +181,21 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
* *
* @param userId 用户ID * @param userId 用户ID
* @param password 用户密码 * @param password 用户密码
* @return * @return true|false
*/ */
@Override @Override
public boolean updatePassword(Long userId, String password) { public boolean updatePassword(Long userId, String password) {
String encryptedPassword = passwordEncoder.encode(password); return this.update(new LambdaUpdateWrapper<SysUser>()
boolean result = this.update(new LambdaUpdateWrapper<SysUser>()
.eq(SysUser::getId, userId) .eq(SysUser::getId, userId)
.set(SysUser::getPassword, encryptedPassword) .set(SysUser::getPassword, passwordEncoder.encode(password))
); );
return result;
} }
/** /**
* 根据用户名获取认证信息 * 根据用户名获取认证信息
* *
* @param username * @param username 用户名
* @return * @return 用户认证信息 {@link UserAuthInfo}
*/ */
@Override @Override
public UserAuthInfo getUserAuthInfo(String username) { public UserAuthInfo getUserAuthInfo(String username) {
@@ -255,7 +251,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
userInfoVO.setRoles(roles); userInfoVO.setRoles(roles);
// 用户权限集合 // 用户权限集合
Set<String> perms = (Set<String>) redisTemplate.opsForValue().get("USER_PERMS:" + user.getId()); Set<String> perms = (Set<String>) redisTemplate.opsForValue().get(SecurityConstants.USER_PERMS_CACHE_PREFIX+ user.getId());
userInfoVO.setPerms(perms); userInfoVO.setPerms(perms);
return userInfoVO; return userInfoVO;