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
- 粉丝: 1853
- 资源: 4660
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Java校内实训的千峰教育Java设计源码分享
- 基于Java和HTML的MVC架构与代理设计模式人员管理系统源码
- 基于Python和HTML的设备租借管理系统设计源码
- 基于HTML、Java、JavaScript和CSS的图书管理系统设计源码
- 基于Flask框架的简单Python留言板设计源码
- 基于Pytorch的Python人脸年龄编辑算法源码
- 基于Java封装的echarts工具类设计源码
- 基于Python37和PyQt5的Modbus-TCP通讯协议与SQL Server2005数据读取设计源码
- 基于Django框架的全面功能音乐网站管理系统设计源码
- 基于Python及多语言的管信小组作业设计源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功