SpringBoot整合SpringSecurity实现权限控制(七):权限分配

SpringBoot整合SpringSecurity实现权限控制(七):权限分配系列⽂章⽬录
本⽂⽬录
⼀、实现原理
在前⾯的系列⽂章中,我们已经实现了⽤户管理、⾓⾊管理与菜单管理,接下来我们把这三个功能串起来:
1. 通过权限分配把让⾓⾊关联到各个功能菜单。⽐如让系统管理员⾓⾊关联到⽤户管理、⾓⾊管理等菜单。
2. 通过⾓⾊设置让⽤户关联到单个或多个⾓⾊。⽐如让张三⽤户关联到系统管理员⾓⾊。
3. ⽤户关联到⾓⾊,⾓⾊关联到菜单,也即让⽤户间接拥有了系统的功能。
⼆、后端实现
钨铜电触头2.1 创建权限表
该表存储⾓⾊id与菜单id的关联信息
/**
* 权限表
*
* @author zhuhuix
* @date 2021-10-26
*/
@ApiModel(value ="权限信息")
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@TableName("sys_permission")
public class SysPermission {
@TableId(value ="id", type = IdType.AUTO)
private Long id;
交换机面板// ⾓⾊id
private Long roleId;
// 菜单id
private Long menuId;
private Timestamp createTime;
public SysPermission(Long roleId, Long menuId, Timestamp createTime){
}
}
2.2 添加操作权限表的Mapper接⼝
通过继承mybatis-plus的BaseMapper接⼝创建操作权限表的DAO接⼝,该BaseMapper接⼝已经包含了基本的增删改查操作。
/**
* 权限表DAO接⼝
*
* @author zhuhuix
* @date 2021-10-26
*/
@Mapper
public interface SysPermissionMapper extends BaseMapper<SysPermission>{
// BaseMapper接⼝已经默认实现了基本的增删改查操作
}
2.3 实现⾓⾊权限分配的服务
在原有⾓⾊管理的服务接⼝中加⼊获取⾓⾊权限与保存⾓⾊权限的接⼝.
* @date 2021-09-13
* @date 2021-10-26 增加getPermission,savePermission  */
public interface SysRoleService {
....
/**
* 获取⾓⾊权限
*
* @param roleId ⾓⾊id
* @return ⾓⾊权限列表
*/
List<SysPermission>getPermission(Long roleId);
/**
* 保存⾓⾊权限
*
* @param roleId ⾓⾊id
* @param menus 权限表
* @return 是否成功
*/
Boolean savePermission(Long roleId,Set<Long> menus); }
实现获取⾓⾊权限与保存⾓⾊权限的接⼝
*/
@Slf4j
@Service
@RequiredArgsConstructor
@Transactional(propagation = Propagation.SUPPORTS, readOnly =true, rollbackFor = Exception.class) public class SysRoleServiceImpl implements SysRoleService {
private final SysRoleMapper sysRoleMapper;
private final SysPermissionMapper sysPermissionMapper;
...
@Override
public List<SysPermission>getPermission(Long roleId){
QueryWrapper<SysPermission> queryWrapper =new QueryWrapper<>();
queryWrapper.lambda().eq(SysPermission::getRoleId, roleId);
return sysPermissionMapper.selectList(queryWrapper);
}
抗菌防臭袜@Override
@Transactional(rollbackFor = Exception.class)
public Boolean savePermission(Long roleId, Set<Long> menus){
// 先根据roleId删除原有权限
QueryWrapper<SysPermission> queryWrapper =new QueryWrapper<>();
queryWrapper.lambda().eq(SysPermission::getRoleId, roleId);
sysPermissionMapper.delete(queryWrapper);
// 再插⼊roleId新权限
for(Long menu : menus){
int rowCount = sysPermissionMapper.insert(
new SysPermission(roleId, menu, Timestamp.w())));
if(rowCount <=0){
throw new RuntimeException("保存权限失败");引道结构图
}
}
return true;
}
}
2.4 在Controller层添加访问API接⼝
*/
@Slf4j
@RestController
@AllArgsConstructor
@RequestMapping("/api/role")
@Api(tags ="⾓⾊信息接⼝")
public class SysRoleController {
private final SysRoleService sysRoleService;
....
@ApiOperation("获取⾓⾊权限信息")
@GetMapping("{roleId}/permission")
public ResponseEntity<Object>getPermission(@PathVariable Long roleId){
return ResponseEntity.Permission(roleId));
}
@ApiOperation("保存⾓⾊权限信息")
@PostMapping("{roleId}/permission")
public ResponseEntity<Object>savePermission(@PathVariable Long roleId,@RequestBody Set<Long> menus){ return ResponseEntity.ok(sysRoleService.savePermission(roleId,menus));
}
}
三、前端实现
3.1 添加⾓⾊权限api访问接⼝
根据后端API,在⾓⾊信息api访问中添加读取权限与保存权限的接⼝
机器人上下料/**
* ⾓⾊访问后端api
* 2021-10-26 添加getPermission,savePermission
*/
import request from'@/utils/request'
...
export function getPermission(roleId){
return request({
url:'/api/role/'+ roleId +'/permission',
method:'get'
})
}
export function savePermission(roleId, data){
return request({
url:'/api/role/'+ roleId +'/permission',
楼梯组合
method:'post',
data
})
}
3.2 添加⾓⾊分配权限的页⾯

本文发布于:2024-09-20 20:42:35,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/100538.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:权限   管理   实现   关联   保存   添加   操作
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议