Lambda 表达式应用 权限管理_用户的角色修改

需求

  1. 前台发送用户新的角色列表,后台查询出用户原有的角色列表。
  2. 1.获取出需增加的角色列表 => 在新角色列表中,但是不在原角色列表中的角色
  3. 2.获取出需删除的角色列表 => 在原角色列表中,但是不在新角色列表中的角色

分析

其实是对集合中的元素进行过滤,获取符合条件的元素。

演示代码

  1. package com.mozq.sb.sbmybatis01.coll;
  2. import java.util.Arrays;
  3. import java.util.List;
  4. import java.util.stream.Collectors;
  5. /**
  6. * @description:
  7. * @author: changzhou.xie@yuantiaokj.com
  8. * @date: 2019/10/18 10:44
  9. */
  10. public class ListTest {
  11. public static void main(String[] args) {
  12. List<Integer> L1 = Arrays.asList(1, 2, 3);
  13. List<Integer> L2 = Arrays.asList(2, 3, 4);
  14. //L3 = L1 - (L1 交 L2) 在L1不在L2中的元素
  15. List<Integer> L3 = L1.stream().filter(e ->!L2.contains(e)).collect(Collectors.toList());
  16. System.out.println(L3);
  17. //L4 = L2 - (L1 交 L2) 在L2不在L1集合中的元素
  18. List<Integer> L4 = L2.stream().filter(e->!L1.contains(e)).collect(Collectors.toList());
  19. System.out.println(L4);
  20. //L5 = L1 交 L2 既在L1也在L2集合中的元素
  21. List<Integer> L5 = L1.stream().filter(e -> L2.contains(e)).collect(Collectors.toList());
  22. System.out.println(L5);
  23. }
  24. }

项目代码

  1. @Override
  2. @Transactional
  3. public void updateRolesOfUser(Integer userId, Integer companyId, List<Integer> roleIds) {
  4. log.info("[为用户修改角色]|入参userId={},companyId={},roleIds={}",userId,companyId,roleIds);
  5. // [MOZQ_ADD] 检查用户是否是当前砂场的,获取其中属于当前砂厂角色id列表
  6. List<SysRole> roles = new ArrayList<>();
  7. if(!roleIds.isEmpty()){
  8. roles = sysRoleDao.findRolesByRoleIdsAndCompanyIdAndStatus(roleIds, companyId, null);
  9. }
  10. List<Integer> checkedRoleIds = roles.stream().map(SysRole::getId).collect(Collectors.toList());
  11. log.info("[为用户修改角色][检查后属于当前砂厂的角色列表]checkedRoleIds={}",checkedRoleIds);
  12. //获取用户当前的角色列表
  13. List<SysRole> rolesOfUser = sysRoleDao.findRolesOfUser(userId, null);
  14. List<Integer> roleIdsOfUser = new ArrayList<>();
  15. if(!rolesOfUser.isEmpty()){
  16. roleIdsOfUser = rolesOfUser.stream().map(SysRole::getId).collect(Collectors.toList());
  17. log.info("[为用户修改角色][用户当前具有的角色]roleIdsOfUser={}", roleIdsOfUser);
  18. }
  19. List<Integer> roleIdsOfUserTemp = roleIdsOfUser;
  20. //获取真正需要添加的角色列表
  21. List<Integer> realAddRoleIds = checkedRoleIds.stream().filter(e ->! roleIdsOfUserTemp.contains(e)).collect(Collectors.toList());
  22. log.info("[为用户修改角色][真正需要添加的角色]realAddRoleIds={}", realAddRoleIds);
  23. sysUserDao.addRolesToUser(userId,companyId,realAddRoleIds);
  24. //获取真正需要删除的角色列表
  25. List<Integer> realDeleteRoIds = roleIdsOfUserTemp.stream().filter(e -> !checkedRoleIds.contains(e)).collect(Collectors.toList());
  26. log.info("[为用户修改角色][真正需要删除的角色]realDeleteRoIds={}", realDeleteRoIds);
  27. sysUserDao.deleteRolesFromUser(userId,companyId,realDeleteRoIds);
  28. }

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. NOIP模拟赛 最佳组合

    题目描述 Description \(Bzeroth\) 大陆最终还是覆灭了,所以你需要为地灾军团服务了. 地灾军团军师黑袍不擅长写题面,所以你只需要看简化版的题意即可. 给定 \(3\) 个长度均为 ...

  2. [PHP] 破Laravel白屏问题

    可能解决方法如下: 1.Nginx在配置文件中添加 location / {     try_files $uri $uri/ /index.php?$query_string;    } 2.app ...

  3. ReverseInteger:实现int整数的反转

    原文链接 Given a 32-bit signed integer, reverse digits of an integer. Example 1: Input: 123 Output: 321 ...

  4. python接口自动化4-常用取token值方法

    前言 在接口测试中我们经常是需要一个登陆token,或者获取其他用到的参数来关联下一个接口用到的参数.这里介绍一些本人常用的方法. 一.简介 不过在哪里我们也是能实现自动化api测试的,我们都知道to ...

  5. ssh框架被淘汰的原因

    SSH就是Struts2+Spring+Hibernate. 三个组件的简单介绍 Struts2:通俗的讲就是为了完成MVC模型中的C的功能,也就是编写具体的业务逻辑的地方.从他的设计上来看就是请求到 ...

  6. MySQL for OPS 03:索引和执行计划

    写在前面的话 啥是索引?以一本书为例,如果想要找到某一指定章节的某一小节,书薄还好,如果书厚,可能就会找的头皮发麻.于是便出现了目录,让用户更容易查找到自己所需要的东西.索引就类似一张表的目录.其存在 ...

  7. mysql快速安装教程详解

    Mysql 一.在https://www.cnblogs.com/zyx110/p/10799387.html中下载如下图中的压缩包 二.将mysql压缩包解压至c盘根目录下 三.把配置文件中的东西复 ...

  8. 【论文阅读】Objects as Points 又名 CenterNet | 目标检测

    目录 Abstract Instruction 分析 CenterNet 的Loss公式 第一部分:\(L_k\) 第二部分:\(L_{size}\) 第三部分:\(L_{off}\) Abstrac ...

  9. 利用Java EE里jsp制作登录界面

    jsp连接数据库.百度经验. 1.在新建的Project中右键新建Floder 2.创建名为lib的包 3.创建完毕之后的工程目录 4.接下来解压你下载的mysql的jar包,拷贝其中的.jar文件 ...

  10. mask-rcnn代码解读(六):resize_image()函数的解析

    我已经根据resize_image()函数的解析对原图像与resize图像进行了解析, 若有读者想对原图像与目标图像不同尺寸验证,可根据以下代码,调整函数参数, 其细节如下: import cv2 a ...