Lambda 表达式应用 权限管理_用户的角色修改
Lambda 表达式应用 权限管理_用户的角色修改
需求
前台发送用户新的角色列表,后台查询出用户原有的角色列表。
1.获取出需增加的角色列表 => 在新角色列表中,但是不在原角色列表中的角色
2.获取出需删除的角色列表 => 在原角色列表中,但是不在新角色列表中的角色
分析
其实是对集合中的元素进行过滤,获取符合条件的元素。
演示代码
package com.mozq.sb.sbmybatis01.coll;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* @description:
* @author: changzhou.xie@yuantiaokj.com
* @date: 2019/10/18 10:44
*/
public class ListTest {
public static void main(String[] args) {
List<Integer> L1 = Arrays.asList(1, 2, 3);
List<Integer> L2 = Arrays.asList(2, 3, 4);
//L3 = L1 - (L1 交 L2) 在L1不在L2中的元素
List<Integer> L3 = L1.stream().filter(e ->!L2.contains(e)).collect(Collectors.toList());
System.out.println(L3);
//L4 = L2 - (L1 交 L2) 在L2不在L1集合中的元素
List<Integer> L4 = L2.stream().filter(e->!L1.contains(e)).collect(Collectors.toList());
System.out.println(L4);
//L5 = L1 交 L2 既在L1也在L2集合中的元素
List<Integer> L5 = L1.stream().filter(e -> L2.contains(e)).collect(Collectors.toList());
System.out.println(L5);
}
}
项目代码
@Override
@Transactional
public void updateRolesOfUser(Integer userId, Integer companyId, List<Integer> roleIds) {
log.info("[为用户修改角色]|入参userId={},companyId={},roleIds={}",userId,companyId,roleIds);
// [MOZQ_ADD] 检查用户是否是当前砂场的,获取其中属于当前砂厂角色id列表
List<SysRole> roles = new ArrayList<>();
if(!roleIds.isEmpty()){
roles = sysRoleDao.findRolesByRoleIdsAndCompanyIdAndStatus(roleIds, companyId, null);
}
List<Integer> checkedRoleIds = roles.stream().map(SysRole::getId).collect(Collectors.toList());
log.info("[为用户修改角色][检查后属于当前砂厂的角色列表]checkedRoleIds={}",checkedRoleIds);
//获取用户当前的角色列表
List<SysRole> rolesOfUser = sysRoleDao.findRolesOfUser(userId, null);
List<Integer> roleIdsOfUser = new ArrayList<>();
if(!rolesOfUser.isEmpty()){
roleIdsOfUser = rolesOfUser.stream().map(SysRole::getId).collect(Collectors.toList());
log.info("[为用户修改角色][用户当前具有的角色]roleIdsOfUser={}", roleIdsOfUser);
}
List<Integer> roleIdsOfUserTemp = roleIdsOfUser;
//获取真正需要添加的角色列表
List<Integer> realAddRoleIds = checkedRoleIds.stream().filter(e ->! roleIdsOfUserTemp.contains(e)).collect(Collectors.toList());
log.info("[为用户修改角色][真正需要添加的角色]realAddRoleIds={}", realAddRoleIds);
sysUserDao.addRolesToUser(userId,companyId,realAddRoleIds);
//获取真正需要删除的角色列表
List<Integer> realDeleteRoIds = roleIdsOfUserTemp.stream().filter(e -> !checkedRoleIds.contains(e)).collect(Collectors.toList());
log.info("[为用户修改角色][真正需要删除的角色]realDeleteRoIds={}", realDeleteRoIds);
sysUserDao.deleteRolesFromUser(userId,companyId,realDeleteRoIds);
}
Lambda 表达式应用 权限管理_用户的角色修改的更多相关文章
- java权限管理与用户角色权限设计
java权限管理与用户角色权限设计 实现业务系统中的用户权限管理 B/S系统中的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器 ...
- Oracle操作管理之用户和角色
1.用户管理 (1)建立用户(数据库验证) CREATE USER smith IDENTIFIED BY smith_pwd DEFAULTTABLESPACE users TEMPORARY TA ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(27)-权限管理系统-分配用户给角色
原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(27)-权限管理系统-分配用户给角色 分配用户给角色,跟分配角色给用户操作是基本一致的. 打开模块维护,展 ...
- [.Net MVC] 用户角色权限管理_使用CLK.AspNet.Identity
项目:后台管理平台 意义:一个完整的管理平台需要提供用户注册.登录等功能,以及认证和授权功能. 一.为何使用CLK.AspNet.Identity 首先简要说明所采取的权限控制方式.这里采用了基于角色 ...
- Linux权限管理(用户、组、文件管理)
一. Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示. 1. 文件查看类命令cat,tac, head, tail, more, less, ls ,file: -ls : l ...
- Linux 用户管理_用户相关配置文件详解
linux的用户管理 linux支持多个用户同时使用同一个用户登陆系统,windows在修改组策略的情况下,也可以多个人使用同一个用户登陆. 远程连接Linux的方式:ssh 远程连接windows的 ...
- linux权限管理_文件特殊权限
一.SetUID功能 设定SetUID的方法 4代表SUID s代表SUID权限 S代表报错了,原因没有执行权限 # chmod 4755 文件名(最好用这种方法) # chmod u+s 文件名 取 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(23)-设置角色遗留问题和为权限设置角色以及EasyUI Tabs的使用
ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 (2):数据库访问层的设计Demo (3):面向接口编程 (4 ):业务逻辑层的封装 ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(27)-权限管理系统-分配用户给角色
系列目录 分配用户给角色,跟分配角色给用户操作是基本一致的. 打开模块维护,展开SysRole模块添加一个操作码,并赋予权限 设置好之后将权限授权给管理员,在SysRole的index添加操作码与js ...
随机推荐
- NOIP模拟赛 最佳组合
题目描述 Description \(Bzeroth\) 大陆最终还是覆灭了,所以你需要为地灾军团服务了. 地灾军团军师黑袍不擅长写题面,所以你只需要看简化版的题意即可. 给定 \(3\) 个长度均为 ...
- [PHP] 破Laravel白屏问题
可能解决方法如下: 1.Nginx在配置文件中添加 location / { try_files $uri $uri/ /index.php?$query_string; } 2.app ...
- ReverseInteger:实现int整数的反转
原文链接 Given a 32-bit signed integer, reverse digits of an integer. Example 1: Input: 123 Output: 321 ...
- python接口自动化4-常用取token值方法
前言 在接口测试中我们经常是需要一个登陆token,或者获取其他用到的参数来关联下一个接口用到的参数.这里介绍一些本人常用的方法. 一.简介 不过在哪里我们也是能实现自动化api测试的,我们都知道to ...
- ssh框架被淘汰的原因
SSH就是Struts2+Spring+Hibernate. 三个组件的简单介绍 Struts2:通俗的讲就是为了完成MVC模型中的C的功能,也就是编写具体的业务逻辑的地方.从他的设计上来看就是请求到 ...
- MySQL for OPS 03:索引和执行计划
写在前面的话 啥是索引?以一本书为例,如果想要找到某一指定章节的某一小节,书薄还好,如果书厚,可能就会找的头皮发麻.于是便出现了目录,让用户更容易查找到自己所需要的东西.索引就类似一张表的目录.其存在 ...
- mysql快速安装教程详解
Mysql 一.在https://www.cnblogs.com/zyx110/p/10799387.html中下载如下图中的压缩包 二.将mysql压缩包解压至c盘根目录下 三.把配置文件中的东西复 ...
- 【论文阅读】Objects as Points 又名 CenterNet | 目标检测
目录 Abstract Instruction 分析 CenterNet 的Loss公式 第一部分:\(L_k\) 第二部分:\(L_{size}\) 第三部分:\(L_{off}\) Abstrac ...
- 利用Java EE里jsp制作登录界面
jsp连接数据库.百度经验. 1.在新建的Project中右键新建Floder 2.创建名为lib的包 3.创建完毕之后的工程目录 4.接下来解压你下载的mysql的jar包,拷贝其中的.jar文件 ...
- mask-rcnn代码解读(六):resize_image()函数的解析
我已经根据resize_image()函数的解析对原图像与resize图像进行了解析, 若有读者想对原图像与目标图像不同尺寸验证,可根据以下代码,调整函数参数, 其细节如下: import cv2 a ...