package com.lei.acl.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.lei.acl.entity.Permission;
import com.lei.acl.entity.RolePermission;
import com.lei.acl.entity.User;
import com.lei.acl.helper.MemuHelper;
import com.lei.acl.helper.PermissionHelper;
import com.lei.acl.mapper.PermissionMapper;
import com.lei.acl.service.PermissionService;
import com.lei.acl.service.RolePermissionService;
import com.lei.acl.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* <p>
* 权限 服务实现类
* </p>
*
* @author testjava
* @since 2020-01-12
*/
@Service
public class PermissionServiceImpl extends ServiceImpl<PermissionMapper, Permission> implements PermissionService {
@Autowired
private RolePermissionService rolePermissionService;
@Autowired
private UserService userService;
//获取全部菜单
@Override
public List<Permission> queryAllMenu() {
QueryWrapper<Permission> wrapper = new QueryWrapper<>();
wrapper.orderByDesc("id");
List<Permission> permissionList = baseMapper.selectList(wrapper);
List<Permission> result = bulid(permissionList);
return result;
}
//根据角色获取菜单
@Override
public List<Permission> selectAllMenu(String roleId) {
List<Permission> allPermissionList = baseMapper.selectList(new QueryWrapper<Permission>().orderByAsc("CAST(id AS SIGNED)"));
//根据角色id获取角色权限
List<RolePermission> rolePermissionList = rolePermissionService.list(new QueryWrapper<RolePermission>().eq("role_id",roleId));
//转换给角色id与角色权限对应Map对象
// List<String> permissionIdList = rolePermissionList.stream().map(e -> e.getPermissionId()).collect(Collectors.toList());
// allPermissionList.forEach(permission -> {
// if(permissionIdList.contains(permission.getId())) {
// permission.setSelect(true);
// } else {
// permission.setSelect(false);
// }
// });
for (int i = 0; i < allPermissionList.size(); i++) {
Permission permission = allPermissionList.get(i);
for (int m = 0; m < rolePermissionList.size(); m++) {
RolePermission rolePermission = rolePermissionList.get(m);
if(rolePermission.getPermissionId().equals(permission.getId())) {
permission.setSelect(true);
}
}
}
List<Permission> permissionList = bulid(allPermissionList);
return permissionList;
}
//给角色分配权限
@Override
public void saveRolePermissionRealtionShip(String roleId, String[] permissionIds) {
rolePermissionService.remove(new QueryWrapper<RolePermission>().eq("role_id", roleId));
List<RolePermission> rolePermissionList = new ArrayList<>();
for(String permissionId : permissionIds) {
if(StringUtils.isEmpty(permissionId)) continue;
RolePermission rolePermission = new RolePermission();
rolePermission.setRoleId(roleId);
rolePermission.setPermissionId(permissionId);
rolePermissionList.add(rolePermission);
}
rolePermissionService.saveBatch(rolePermissionList);
}
//递归删除菜单
@Override
public void removeChildById(String id) {
List<String> idList = new ArrayList<>();
this.selectChildListById(id, idList);
idList.add(id);
baseMapper.deleteBatchIds(idList);
}
//根据用户id获取用户菜单
@Override
public List<String> selectPermissionValueByUserId(String id) {
List<String> selectPermissionValueList = null;
if(this.isSysAdmin(id)) {
//如果是系统管理员,获取所有权限
selectPermissionValueList = baseMapper.selectAllPermissionValue();
} else {
selectPermissionValueList = baseMapper.selectPermissionValueByUserId(id);
}
return selectPermissionValueList;
}
@Override
public List<JSONObject> selectPermissionByUserId(String userId) {
List<Permission> selectPermissionList = null;
if(this.isSysAdmin(userId)) {
//如果是超级管理员,获取所有菜单
selectPermissionList = baseMapper.selectList(null);
} else {
selectPermissionList = baseMapper.selectPermissionByUserId(userId);
}
List<Permission> permissionList = PermissionHelper.bulid(selectPermissionList);
List<JSONObject> result = MemuHelper.bulid(permissionList);
return result;
}
/**
* 判断用户是否系统管理员
* @param userId
* @return
*/
private boolean isSysAdmin(String userId) {
User user = userService.getById(userId);
if(null != user && "admin".equals(user.getUsername())) {
return true;
}
return false;
}
/**
* 递归获取子节点
* @param id
* @param idList
*/
private void selectChildListById(String id, List<String> idList) {
List<Permission> childList = baseMapper.selectList(new QueryWrapper<Permission>().eq("pid", id).select("id"));
childList.stream().forEach(item -> {
idList.add(item.getId());
this.selectChildListById(item.getId(), idList);
});
}
/**
* 使用递归方法建菜单
* @param treeNodes
* @return
*/
private static List<Permission> bulid(List<Permission> treeNodes) {
List<Permission> trees = new ArrayList<>();
for (Permission treeNode : treeNodes) {
if ("0".equals(treeNode.getPid())) {
treeNode.setLevel(1);
trees.add(findChildren(treeNode,treeNodes));
}
}
return trees;
}
/**
* 递归查找子节点
* @param treeNodes
* @return
*/
private static Permission findChildren(Permission treeNode,List<Permission> treeNodes) {
treeNode.setChildren(new ArrayList<Permission>());
for (Permission it : treeNodes) {
if(treeNode.getId().equals(it.getPid())) {
int level = treeNode.getLevel() + 1;
it.setLevel(level);
if (treeNode.getChildren() == null) {
treeNode.setChildren(new ArrayList<>());
}
treeNode.getChildren().add(findChildren(it,treeNodes));
}
}
return treeNode;
}
//========================递归查询所有菜单================================================
//获取全部菜单
@Override
public List<Permission> queryAllMenuGuli() {
//1 查询菜单表所有数据
QueryWrapper<Permission> wrapper = new QueryWrapper<>();
wrapper.orderByDesc("id");
List<Permission> permissionList = baseMapper.selectList(wrapper);
//2 把查询所有菜单list集合按照要求进行封装
List<Permission> resultList = bulidPermission(permissionList);
return resultList;
}
//把返回所有菜单list集合进行封装的方法
public static List<Permission> bulidPermission(List<Permission> permissionList) {
//创建list集合,用于数据最终封装
List<Permission> finalNode = new ArrayList<>();
//把所有菜单list集合遍历,得到顶层菜单 pid=0菜单,设置level是1
for(Permission permissionNode : permissionList) {
//得到顶层菜单 pid=0菜单
if("0".equals(permissionNode.getPid(
没有合适的资源?快使用搜索试试~ 我知道了~
基于springcloud 分布式在线视频点播教育网站
共886个文件
xml:321个
java:177个
class:141个
需积分: 50 24 下载量 194 浏览量
2020-08-15
16:48:06
上传
评论 8
收藏 22.01MB ZIP 举报
温馨提示
后端的主要技术架构是:SpringBoot + SpringCloud + MyBatis-Plus + HttpClient + MySQL + Maven+EasyExcel+ nginx 前端的架构是:Node.js + Vue.js +element-ui+NUXT+ECharts
资源推荐
资源详情
资源评论
收起资源包目录
基于springcloud 分布式在线视频点播教育网站 (886个子文件)
024600bd2e204d367ded21ad17d779ba7c710d22 125B
025d91be20f32897c3b542ade8b445dca6e588e0 0B
04b59a796fb6a97e949a0cf7fb9f2d700100f660 379B
05b27b6baa951e9afe529455ceb3be24707bdd12 0B
0714c372b750ea1126a99d3ce42a5863055fb7a6 293B
09e20ff121ef98ca4b339d2339050adaa84f6242 76B
0a1ebbb62570156fc100ee607a75aa651b8c73f7 63B
0a64503d953b6c4201ea11a9ed5b14f4a2d5e6a7 59B
0ab36381717cfeb2ae15973c460b559900f06643 0B
0baa05a6f4fc152eb4bf2ce1717a041d38d9c2ba 0B
0dd57c0ad57d53fe61ecdc9b5ab9bf0121272249 0B
0fea7fbe8dcc66bbf84b77f33ef84e1d40f93f63 0B
1104309c3635d0b8ee69bfd0fec3b7d56055d6ec 0B
12ce7efbca42c234c368f54b7bb6195f89b7e70a 0B
13156520f13f0adc4980cab507928bf572f901ca 101B
1317180905e8425a9c0d687a8d2c46fbda230cc7 0B
14a1b00854b81ce0e9b4d14cf4bc35d0b1b9d762 76B
1555c01982a6042ddf0e7d3e9221980468cbefdb 0B
15ee2361e0c68e3fc5ec635f4ad839a8299712e6 0B
18e6052d4543e4167b58b24f5ee593303e0a3d2b 0B
1952ea412d028ee69b0d1b8fa094828edf5660cd 0B
1cbf20d48eb9d7717f2d027dae059f70ef2a2c84 0B
1e6765db43eea7947922819b11a2c9386a7e04c3 105B
1e7843054ae674a39a474cd12e75b5409dc28ef7 76B
1f2839f56412e15512ded4073441ae842eabcb54 0B
1fe187f767b03769ffdbcc1bc833bf4d6fbca20e 74B
21bcb5de0eb896be0769f48d4e6a48ad8cf3aaf7 0B
222e77436307b563d043ff0edd3e5d678321c70a 0B
2250508c908f5591119077f07af417d8db4daaeb 0B
22a9e31795e9416da532450848aad06a7172c5c5 0B
22c0a13464db1bfc078a3e8b7c0a45ff80e3ce70 0B
2385c593d1df8e2485003fa57a764afdfce5ef63 0B
24b5921f0398ab4cf53ee6c4571656aba0c2487f 2KB
25a827b00a5f9fe27f314d49971752844928f397 382B
25e12190ef8dabba0180281fc2d54ebe63f1aa38 0B
2bb83dd43ff74bd2017133cd9dea6897cfe43de3 0B
2e2b94b42fc57038bfe6e545d5c418b5ff01b3e6 0B
2e2e44589dfeee71e6f28838602e54490183a572 0B
2ecd9713b5f0b8d18eec45bf2cd518dbaf681637 354B
30b23fb64fdd403050c694e8393b471a73dda2ef 0B
338c151ce1220eb127fb0358aae58b8a63815484 2KB
35dd7cdea1041223a7b716aaeee45b20b5380414 0B
35e72e93dd535c0b82af5c04e1bf816ea5ba27c4 0B
3780805e9867fcd0ad02467a261ee4aceffca4cd 412B
386df1f48e4711ac7fd4f4af100c4e2b404bdc7c 0B
399d92a0a4704fa20568c46eeb82208f5d6ff678 0B
39c21dd60a0e25dbdb2f368901c05d1cb9824a30 0B
3c70c60e74c56cfc427843ddaa61b66c54c063d3 0B
3d71930a3bda7ab6ddef3803781c998addb923e7 0B
3eceda2d149a6073f059a5dff03f6a17198ed995 0B
4032629da7949e35c4c62bf37496043c6442e49f 0B
4082cdcf7d3dfe770d2c6faabc61df038f5d569b 1KB
40d7ef008ec36a10f76d82e3f547c8da0010d1f8 0B
42e9ae143ba727042aa1e316bc7415b1b7f481a5 0B
442292b8a7efeabbe4cc176709b833b1792140ec 0B
4551e5f49aab310f54e52068338f053b41dc5982 0B
45541d57afacca928b3965f91092eda1d8a3b1c4 0B
45b3c69a8b126ccbe0e09e81f009c62a23299c7f 0B
45b799455170d30ced8d8595cc7bc702701ea4c2 78B
488bdbea7e8b73c44bd2a54e63f6012f10969196 0B
4a27a9a7139cb0413cdcfb8652ed7310aeb145de 0B
4db5317fd99ba4547565649ec80711b5a5334fc3 0B
50496eb43992d5751d027734288f8a27fff760ac 0B
51deeea9cac49747c91e98c648608b724a2ff4a3 76B
59553d3b4b2d1c2ee4282e2e9e5de7fe0d003b30 0B
595840180774ab459b72d496c3d2c557e28a2deb 172B
5b222e30a022173668cd2a6e69b914eb5d944478 0B
5bef950a97874c2870d8b9e1b132a4dad72640d2 295B
5ef514d0e08a242b0ee6df51936e705b7b9b19c2 0B
5ffe0b812ad8a9d5331f6d6e1d8645583020a744 0B
6549c1866cb5df1c07bc944c7f19f473d04f3506 0B
661975dcae0d38f4bde97bc23462fde7f50bca3c 0B
6895f40ab00be2de842183bf668f24228d3c99b5 320B
6b35eb45a95af94f9f202732980706804c52a1d1 0B
6ca41134e727cda68741ad1e6882047cfb3545f3 111B
6f03970e1153429c5f17c8152517ea6f2f2184a8 0B
6f587e119556a7e980bbc629a6323a0e894703cf 258B
6f6f9d22d948ed632e401ec9a9b1c72a3fd2afee 0B
70edc377e2569fffec5188878bbdedac92e69436 0B
711bc69c2d6cb479de6467b22ebf94cee78f2a2e 0B
72c67174f6be19b85a40da9fe023916bd4b72022 0B
7364d340d3dd6d33ed875b484a43efbfefe7f76f 0B
751d26fca494866f0150fa61df4e304c62df13e3 110B
75c44f5078ddacec59419d461112ef304e4d9c2a 87B
75d257447f8e4c1e68d97f93cd6ce9ffce05de47 790B
785a11d34ec679a789dbd35bd2973abf9cf46068 0B
78e9340e5fc81a93353edae6cf44bf7388086539 0B
78ee01336a4432dfda7a9cdb24a1494e4b0efc5a 111B
7a0a9eba071f9665213f25a47ae5d2ec6fede0d8 0B
7cd529528d357ddd2cde488b2860172cf701b12a 142B
801b2d57c7a0bd92c556314daa98729e559d405a 124B
81735bd0e150613806c2f1c8e853a84c5f4a67c7 0B
8196e03089851b8d3fe3a0a124100f2b937c53b0 78B
81afac93b3db55691e7b1037e11d5832e92fbc95 0B
81cd55006c5456db9b38a717bc49b092a863015b 551B
83a2a8aab1329da47490be50399e4aa574e5910b 0B
83bf746f2008c65a12a8edefaaed1d4f7fc52db6 0B
83f053e78e2ef2711f67ae06d58e279e6592063f 0B
843f0136be5cce168236e300621818553b86920a 0B
84c89110165c2e376452709c217bca2af3f2d1ba 0B
共 886 条
- 1
- 2
- 3
- 4
- 5
- 6
- 9
资源评论
BadRequest400
- 粉丝: 32
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 脑部肿瘤检测YOLOV8
- 问题2.zip
- Fooocus软件AI作画必备模型-东方审美,人工智能,AI模型根据提示词作画
- QT登录模块,登录时获取txt文件内账号密码进行判断,注册时写入到本地文件user.txt
- 湖南麒麟系统下,因某些原因无法正常进入系统时可以进入单用户模式
- tsunami-udp 是一款专为网络加速诞生的小工具 用TCP进行传输控制、用UDP进行数据传输
- 基于FreeRTOS、LCD1602 、STM32CubeMX、GP2Y0A21YK0F红外测距传感器的测距proteus仿真
- C语言中的一些算法和面试题
- A72BDB68-F5FA-4D0F-906E-EACAA6A1EFA5.rar
- TTP229-BSF数据手册
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功