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 表达式应用 权限管理_用户的角色修改的更多相关文章

  1. java权限管理与用户角色权限设计

    java权限管理与用户角色权限设计 实现业务系统中的用户权限管理 B/S系统中的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器 ...

  2. Oracle操作管理之用户和角色

    1.用户管理 (1)建立用户(数据库验证) CREATE USER smith IDENTIFIED BY smith_pwd DEFAULTTABLESPACE users TEMPORARY TA ...

  3. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(27)-权限管理系统-分配用户给角色

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(27)-权限管理系统-分配用户给角色 分配用户给角色,跟分配角色给用户操作是基本一致的. 打开模块维护,展 ...

  4. [.Net MVC] 用户角色权限管理_使用CLK.AspNet.Identity

    项目:后台管理平台 意义:一个完整的管理平台需要提供用户注册.登录等功能,以及认证和授权功能. 一.为何使用CLK.AspNet.Identity 首先简要说明所采取的权限控制方式.这里采用了基于角色 ...

  5. Linux权限管理(用户、组、文件管理)

    一. Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示. 1. 文件查看类命令cat,tac, head, tail, more, less, ls ,file: -ls : l ...

  6. Linux 用户管理_用户相关配置文件详解

    linux的用户管理 linux支持多个用户同时使用同一个用户登陆系统,windows在修改组策略的情况下,也可以多个人使用同一个用户登陆. 远程连接Linux的方式:ssh 远程连接windows的 ...

  7. linux权限管理_文件特殊权限

    一.SetUID功能 设定SetUID的方法 4代表SUID s代表SUID权限 S代表报错了,原因没有执行权限 # chmod 4755 文件名(最好用这种方法) # chmod u+s 文件名 取 ...

  8. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(23)-设置角色遗留问题和为权限设置角色以及EasyUI Tabs的使用

    ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装    ...

  9. ASP.NET MVC5+EF6+EasyUI 后台管理系统(27)-权限管理系统-分配用户给角色

    系列目录 分配用户给角色,跟分配角色给用户操作是基本一致的. 打开模块维护,展开SysRole模块添加一个操作码,并赋予权限 设置好之后将权限授权给管理员,在SysRole的index添加操作码与js ...

随机推荐

  1. luoguP4585 [FJOI2015]火星商店问题

    题意 显然商店编号的限制能用可持久化trie解决. 特殊的商品预先判掉就好了,现在只考虑普通的商品. 发现商品的时间是单点,询问时一段时间,于是将询问区间在线段树上拆成\(log\)个区间,分别放上该 ...

  2. tcp 和UDP

      文章目录前言1. UDP2. TCP2.1 TCP 的三次握手2.2 TCP 四次挥手2.3 累计确认2.4 顺序问题和丢包问题2.5 流量控制的问题2.6 拥塞控制的问题总结及面试问题前言前端的 ...

  3. xml、bean、json互转工具,可直接CV就用

    1.jar包 <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactI ...

  4. Java 基础系列:异常

    Java 中的异常(Exception)又称为例外,是一个在程序执行期间发生的事件,它中断正在执行的程序的正常指令流.为了能够及时有效地处理程序中的运行错误,必须使用异常类. 1. 异常类型 Thro ...

  5. Cntlm 配置上网代理

    下载安装Cntlm之后.仅仅须要改动cntlm.ini文件,提供身份认证必要的信息,然后以服务的方式启动cntlm就能够了. 在cntlm.ini中有例如以下几个重要的配置是可能须要改动的: User ...

  6. python正则图片爬取

    # conding:utf8 import requests import re import time if __name__ == "__main__": # 所有的数据 ur ...

  7. Vue.js 源码分析(十九) 指令篇 v-html和v-text指令详解

    双大括号会将数据解释为普通文本,而非 HTML 代码.为了输出真正的 HTML,你需要使用 v-html 指令,例如: <!DOCTYPE html> <html lang=&quo ...

  8. java构建树形列表(带children属性)

    一些前端框架提供的树形表格需要手动构建树形列表(带children属性的对象数组),这种结构一般是需要在Java后台构建好. 构建的方式是通过id字段与父id字段做关联,通过递归构建children字 ...

  9. 机器学习(六)--------神经网络(Neural Networks)

    无论是线性回归还是逻辑回归都有这样一个缺点,即:当特征太多时, 计算的负荷会非常大. 比如识别图像,是否是一辆汽车,可能就需要判断太多像素. 这时候就需要神经网络. 神经网络是模拟人类大脑的神经网络, ...

  10. Elasticsearch 7.x从入门到精通

    Elasticsearch是一个分布式.可扩展.近实时的搜索与数据分析引擎,它能从项目一开始就赋予你的数据以搜索.分析和探索的能力. 通过本专栏的学习,你可以了解到,Elasticsearch在互联网 ...