package cn.edu.sgu.www.easyui.service.impl;
import cn.edu.sgu.www.easyui.base.Pager;
import cn.edu.sgu.www.easyui.component.Tree;
import cn.edu.sgu.www.easyui.dto.PermissionTreeDTO;
import cn.edu.sgu.www.easyui.entity.Permission;
import cn.edu.sgu.www.easyui.entity.RolePermission;
import cn.edu.sgu.www.easyui.enums.PermissionType;
import cn.edu.sgu.www.easyui.exception.GlobalException;
import cn.edu.sgu.www.easyui.mapper.PermissionMapper;
import cn.edu.sgu.www.easyui.mapper.RolePermissionMapper;
import cn.edu.sgu.www.easyui.pager.RolePermissionPager;
import cn.edu.sgu.www.easyui.restful.ResponseCode;
import cn.edu.sgu.www.easyui.service.RolePermissionService;
import cn.edu.sgu.www.easyui.util.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.stereotype.Service;
import java.util.*;
/**
* @author heyunlin
* @version 1.0
*/
@Service
public class RolePermissionServiceImpl implements RolePermissionService {
private final PermissionMapper permissionMapper;
private final RolePermissionMapper rolePermissionMapper;
public RolePermissionServiceImpl(PermissionMapper permissionMapper, RolePermissionMapper rolePermissionMapper) {
this.permissionMapper = permissionMapper;
this.rolePermissionMapper = rolePermissionMapper;
}
@Override
public void init(String userId) {
// 删除用当前户所有角色的权限
rolePermissionMapper.deleteByUserId(userId);
// 查询全部子权限
List<Permission> list = permissionMapper.selectByType(PermissionType.ZQX.getValue());
list.forEach(permission -> {
RolePermission rolePermission = new RolePermission();
rolePermission.setId(null);
rolePermission.setRoleId(1);
rolePermission.setPermissionId(permission.getId());
rolePermissionMapper.insert(rolePermission);
});
}
@Override
public void distribute(PermissionTreeDTO permissionTreeDTO) {
// 获取前端传来的数据
List<String> insertIds = permissionTreeDTO.getInsertIds();
List<String> deleteIds = permissionTreeDTO.getDeleteIds();
Integer roleId = permissionTreeDTO.getRoleId();
UpdateWrapper<RolePermission> wrapper;
if (insertIds != null && deleteIds != null) {
Set<String> insert = new HashSet<>(insertIds);
Set<String> delete = new HashSet<>(deleteIds);
System.out.println("insert:" + insert);
System.out.println("delete:" + delete);
// 求交集
Set<String> inter;
inter = new HashSet<>(insertIds);
inter.retainAll(delete);
// 删除交集
insert.removeAll(inter);
delete.removeAll(inter);
if (!delete.isEmpty()) {
for (String deleteId : delete) {
wrapper = new UpdateWrapper<>();
wrapper.eq("permission_id", deleteId);
wrapper.eq("role_id", roleId);
rolePermissionMapper.delete(wrapper);
}
}
if (!insert.isEmpty()) {
for (String insertId : insert) {
RolePermission permission = new RolePermission();
permission.setId(null);
permission.setRoleId(roleId);
permission.setPermissionId(insertId);
rolePermissionMapper.insert(permission);
}
}
} else if (deleteIds != null) {
for (String deleteId : deleteIds) {
wrapper = new UpdateWrapper<>();
wrapper.eq("permission_id", deleteId);
wrapper.eq("role_id", roleId);
rolePermissionMapper.delete(wrapper);
}
} else if (insertIds != null) {
for (String insertId : insertIds) {
RolePermission permission = new RolePermission();
permission.setId(null);
permission.setRoleId(roleId);
permission.setPermissionId(insertId);
rolePermissionMapper.insert(permission);
}
}
}
@Override
public void insert(RolePermission permission) {
String permissionId = permission.getPermissionId();
// 查询权限信息
Permission perm = permissionMapper.selectById(permissionId);
// 如果是父级权限,为角色添加该权限下的所有子权限
if (perm.getType().equals(PermissionType.FQX.getValue())) {
// 查询权限的所有子权限
List<Permission> permissions = permissionMapper.selectByParentId(permissionId);
// 查询角色已有权限
List<Permission> perms = rolePermissionMapper.selectByRoleId(permission.getRoleId());
if (perms.isEmpty()) {
permissions.forEach(p -> {
permission.setId(null);
permission.setPermissionId(p.getId());
rolePermissionMapper.insert(permission);
});
} else if (!permissions.containsAll(perms)) {
permissions.forEach(p -> {
if (!perms.contains(p)) {
permission.setId(null);
permission.setPermissionId(p.getId());
rolePermissionMapper.insert(permission);
}
});
} else {
throw new GlobalException(ResponseCode.CONFLICT, "角色已经添加了此权限。");
}
} else {
permission.setId(null);
rolePermissionMapper.insert(permission);
}
}
@Override
public void deleteById(Integer id) {
rolePermissionMapper.deleteById(id);
}
@Override
public void updateById(RolePermission permission) {
rolePermissionMapper.updateById(permission);
}
@Override
public List<Tree> listTree(Integer roleId) {
if (roleId == null) {
return new ArrayList<>();
}
// 查询所有父级权限(权限类型为0),并生成权限ID和权限信息的map
Map<String, Permission> parentMap = new HashMap<>();
List<Permission> parentPermissions = permissionMapper.selectByType(PermissionType.FQX.getValue());
for (Permission permission : parentPermissions) {
parentMap.put(permission.getId(), permission);
}
// 查询角色的权限
List<Permission> permissions = rolePermissionMapper.selectByRoleId(roleId);
// 查询全部二级权限(权限类型为1)
List<Permission> subPermissions = permissionMapper.selectByType(PermissionType.ZQX.getValue());
// 并根据父级权限ID分组存放到map中
Map<String, List<Tree>> listHashMap = new HashMap<>();
// 遍历,把查询出来的权限按照parentId存到map中
for (Permission permission : subPermissions) {
Tree children = new Tree();
children.setId(permission.getId());
children.setText(permission.getName());
children.setChecked(permissions.contains(permission));
String parentId = permission.getParentId();
if (listHashMap.containsKey(parentId)) {
listHashMap.get(parentId).add(children);
} else {
listHashMap.put(parentId, new ArrayList<>());
}
}
// 构建返回结果对象
List<Tree> trees = new ArrayList<>();
// 遍历map,生成菜单树
listHashMap.forEach((key, value) -> {
Permission parent = parentMap.get(key);
Tree tree = new Tree();
tree.setSt
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
该项目是一款采用jQuery EasyUI前端框架构建的管理系统,包含699个文件,涵盖312个CSS样式文件、208个PNG图像文件、115个Java源代码文件、19个JavaScript文件、18个GIF图像文件、12个HTML文件、7个XML文件、2个JSON文件、1个LICENSE文件以及1个Markdown文件。系统以HTML和CSS为主要实现语言,辅以JavaScript和Java进行后端逻辑处理,适用于构建功能全面的管理平台。
资源推荐
资源详情
资源评论
收起资源包目录
基于jquery easyui的前端框架管理系统设计源码 (707个子文件)
easyui.css 78KB
easyui.css 75KB
easyui.css 75KB
easyui.css 74KB
easyui.css 74KB
easyui.css 73KB
easyui.css 72KB
easyui.css 71KB
vue.css 12KB
react.css 11KB
angular.css 10KB
tabs.css 9KB
tabs.css 9KB
tabs.css 9KB
tabs.css 9KB
tabs.css 7KB
tabs.css 7KB
tabs.css 7KB
tabs.css 7KB
mobile.css 6KB
color.css 6KB
datagrid.css 6KB
datagrid.css 6KB
datagrid.css 6KB
datagrid.css 6KB
panel.css 6KB
panel.css 6KB
panel.css 6KB
panel.css 6KB
datagrid.css 5KB
datagrid.css 5KB
datagrid.css 5KB
datagrid.css 5KB
panel.css 5KB
panel.css 5KB
panel.css 5KB
panel.css 5KB
linkbutton.css 4KB
linkbutton.css 4KB
linkbutton.css 4KB
linkbutton.css 4KB
linkbutton.css 4KB
window.css 4KB
window.css 4KB
window.css 4KB
window.css 4KB
calendar.css 4KB
calendar.css 4KB
calendar.css 4KB
calendar.css 4KB
calendar.css 4KB
calendar.css 4KB
calendar.css 4KB
calendar.css 4KB
window.css 4KB
window.css 4KB
window.css 4KB
window.css 4KB
tree.css 4KB
tree.css 4KB
tree.css 4KB
tree.css 4KB
tree.css 4KB
tree.css 4KB
tree.css 4KB
tree.css 4KB
textbox.css 3KB
textbox.css 3KB
textbox.css 3KB
textbox.css 3KB
textbox.css 3KB
linkbutton.css 3KB
linkbutton.css 3KB
textbox.css 3KB
textbox.css 3KB
linkbutton.css 3KB
textbox.css 3KB
icon.css 3KB
layout.css 3KB
layout.css 3KB
layout.css 3KB
layout.css 3KB
layout.css 3KB
layout.css 3KB
layout.css 3KB
layout.css 3KB
login.css 3KB
spinner.css 3KB
spinner.css 3KB
spinner.css 3KB
spinner.css 3KB
spinner.css 3KB
spinner.css 3KB
spinner.css 3KB
spinner.css 3KB
index.css 3KB
menu.css 2KB
menu.css 2KB
menu.css 2KB
menu.css 2KB
共 707 条
- 1
- 2
- 3
- 4
- 5
- 6
- 8
资源评论
lsx202406
- 粉丝: 2784
- 资源: 5657
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 你的第一个博客-全套运行代码
- Node.JS网盘系统
- 车辆、飞机、船检测22-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- 时间转换工具(BD时、GPS时、UTC时、北京时间相互转换,可计算日期)
- 坐标转换工具(LBH、XYZ、NEH互相转换,可批量)
- VueWeb 管理系统完成示例(登录、列表、详情、echars图表、地图)
- 车辆、飞机、船检测13-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- 基于51单片机的空气质量烟雾可燃气体检测系统.zip
- 免费DS18B20温度传感器+STM32+Keil
- 目标检测数据集:鸟图像检测数据【VOC标注格式、包含数据和标签】
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功