展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

权限资源管理

  • 在demo15的基础上开发
# 使用注解控制权限,所以需要在security配置类上开启配置;否则注解不生效
@EnableGlobalMethodSecurity(prePostEnabled = true)
  • 查看数据库,test用户拥有的角色权限为普通管理员;普通管理员拥有的权限资源为28

  • 访问接口http://localhost/permission/list,跳转到403页面

  • 将普通管理员拥有的权限资源修改为29,在次测试,获取成功

  • 代码实现

# 控制层
@Controller
@RequestMapping("/permission")
public class SysPermissionController {
private static final String HTML_PREFIX = "system/permission/";
// 跳转到分页查询页面
@PreAuthorize("hasAuthority('sys:permission')")
@GetMapping(value = {"/", ""})
public String permission() {
return HTML_PREFIX + "permission-list";
}
// 业务层对象
@Autowired
private SysPermissionService sysPermissionService;
// 查询所有权限资源
@PreAuthorize("hasAuthority('sys:permission:list')")
@GetMapping("/list")
@ResponseBody
public MengxueguResult list() {
// MyBatis-plus已经提供的,查询SysPermission表中的所有记录
List<SysPermission> list = sysPermissionService.list();
return MengxueguResult.ok(list);
}
/**
* 跳转新增或者修改页面
* /form 新增
* /form/{id} 修改
* @PathVariable(required = false) 设置为false,则id可传也可不传,不然报500
* @return
*/
@PreAuthorize("hasAnyAuthority('sys:permission:edit', 'sys:permission:add')")
@GetMapping(value = {"/form", "/form/{id}"})
public String form(@PathVariable(required = false) Long id, Model model) {
// 1. 通过权限id查询对应权限信息
SysPermission permission = sysPermissionService.getById(id);
// 绑定后页面可获取
model.addAttribute("permission", permission == null ? new SysPermission() : permission);
return HTML_PREFIX + "permission-form";
}
/**
* 提交新增或修改的数据
* @param permission
* @return
*/
@PreAuthorize("hasAnyAuthority('sys:permission:edit', 'sys:permission:add')")
@RequestMapping(value="", method = {RequestMethod.PUT, RequestMethod.POST})
public String saveOrUpdate(SysPermission permission) {
sysPermissionService.saveOrUpdate(permission);
return "redirect:/permission";
}
/**
* 删除权限资源,及其权限资源下的子资源
* @param id
* @return
*/
@PreAuthorize("hasAuthority('sys:permission:delete')")
@DeleteMapping("/{id}")
@ResponseBody
public MengxueguResult deleteById(@PathVariable("id") Long id) {
sysPermissionService.deleteById(id);
return MengxueguResult.ok();
}
}
# 业务层接口
public interface SysPermissionService extends IService<SysPermission> {
/**
* 通过权限id删除权限资源
* @param id
* @return
*/
boolean deleteById(Long id);
}
# 业务层实现
@Service
public class SysPermissionServiceImpl extends ServiceImpl<SysPermissionMapper, SysPermission> implements SysPermissionService {
@Transactional
@Override
public boolean deleteById(Long id) {
// 1. 删除当前id的权限
baseMapper.deleteById(id);
// 2. 删除parent_id = id 的权限, 删除当前点击的子权限
LambdaQueryWrapper<SysPermission> queryWrapper = new LambdaQueryWrapper();
//delete from sys_permission where parent_id = #{id};
queryWrapper.eq(SysPermission::getParentId, id);
baseMapper.delete(queryWrapper);
return true;
}
}
posted @   DogLeftover  阅读(43)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示