专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

从零开始,手打一个权限管理系统(第十章数据权限)

  前言
  这章主要讲解如何实现对表数据权限的控制,让授权用户只能看到指定范围的数据。一、实现思路
  我们用组织机构ID(orgid)来作为数据权限的过滤字段,通过对sql语句添加where条件来实现对数据的过滤;这里我们需要用到MyBatisPlus的一个数据权限的插件DataPermissionInterceptor,通过实现自定义的数据权限处理器DataPermissionHandler,就可以满足我们在sql语句里面添加过滤条件的需求。二、主要代码
  1、自定义数据拦截器,实现DataPermissionHandler接口packagecom。ailot。cloud。base。data。datascope;importcn。hutool。core。collection。CollUtil;importcn。hutool。db。Db;importcn。hutool。db。Entity;importcom。ailot。cloud。base。common。constants。CommonConstant;importcom。ailot。cloud。base。common。exception。CheckedException;importcom。ailot。cloud。base。data。enums。DataScopeTypeEnum;importcom。ailot。cloud。base。security。constant。SecurityConstants;importcom。ailot。cloud。base。security。model。JwtUser;importcom。ailot。cloud。base。security。utils。SecurityUtils;importcom。baomidou。mybatisplus。core。toolkit。ObjectUtils;importcom。baomidou。mybatisplus。extension。plugins。handler。DataPermissionHandler;importlombok。SneakyThrows;importnet。sf。jsqlparser。expression。Expression;importnet。sf。jsqlparser。expression。StringValue;importnet。sf。jsqlparser。expression。operators。conditional。AndExpression;importnet。sf。jsqlparser。expression。operators。relational。ExpressionList;importnet。sf。jsqlparser。expression。operators。relational。InExpression;importnet。sf。jsqlparser。expression。operators。relational。ItemsList;importnet。sf。jsqlparser。schema。Column;importorg。springframework。security。core。GrantedAuthority;importjavax。sql。DataSource;importjava。util。ArrayList;importjava。util。Arrays;importjava。util。Comparator;importjava。util。List;importjava。util。stream。Collectors;publicclassDataScopeHandlerimplementsDataPermissionHandler{privatefinalDataScopePropertiesdataScopeProperties;privatefinalDataSourcedataSource;publicDataScopeHandler(DataScopePropertiesdataScopeProperties,DataSourcedataSource){this。dataScopePropertiesdataScopeProperties;this。dataSourcedataSource;}SneakyThrowsOverridepublicExpressiongetSqlSegment(Expressionwhere,StringmappedStatementId){查询需要配置数据权限的方法ListStringmapperIdsdataScopeProperties。getMapperIds();if(CollUtil。isEmpty(mapperIds)){returnwhere;}else{if(!CollUtil。contains(mapperIds,mappedStatementId)){returnwhere;}}ListStringorgIdsnewArrayList();JwtUseruserSecurityUtils。getUser();if(usernull){thrownewCheckedException(用户信息为空);}获取角色ID列表ListStringroleIdListuser。getAuthorities()。stream()。map(GrantedAuthority::getAuthority)。filter(authorityauthority。startsWith(SecurityConstants。ROLE))。map(authorityauthority。split()〔1〕)。collect(Collectors。toList());获取角色信息EntityqueryDb。use(dataSource)。query(SELECTFROMCommonConstant。UPMSDATABASE。sysrolewhereidIN(CollUtil。join(roleIdList,,)))。stream()。min(Comparator。comparingInt(oo。getInt(dstype)))。get();IntegerdsTypequery。getInt(dstype);查询全部if(DataScopeTypeEnum。ALL。getType()dsType){returnwhere;}自定义if(DataScopeTypeEnum。CUSTOM。getType()dsType){部门范围StringdsScopequery。getStr(dsscope);orgIds。addAll(Arrays。stream(dsScope。split(,))。map(String::toString)。collect(Collectors。toList()));}只查询本级if(DataScopeTypeEnum。OWNLEVEL。getType()dsType){orgIds。add(user。getOrgId());}ItemsListitemsListnewExpressionList(orgIds。stream()。map(StringValue::new)。collect(Collectors。toList()));InExpressioninExpressionnewInExpression(newColumn(CommonConstant。ORGSCOPE),itemsList);returnObjectUtils。isNotEmpty(where)?newAndExpression(where,inExpression):inExpression;}}
  简单说一下这个代码的逻辑,首先是拿到需要数据权限拦截的方法,然后获取当前用户的角色,通过角色就可以获取到数据权限类型(dstype);这里我们定义了三种类型的数据权限(全部、自定义、本级),全部就不用加where条件,自定义就是获取到指定范围dsscope的数据,本级就是当前用户所在部门的数据,然后我们只需要将这些条件拼接起来,生成一个新的sql语句就可以了。
  2、配置拦截器
  要使用数据拦截器需要在Mybatis配置文件里面初始化DataPermissionInterceptordataPermissionInterceptornewDataPermissionInterceptor();dataPermissionInterceptor。setDataPermissionHandler(newDataScopeHandler(dataScopeProperties,dataSource));MybatisPlusInterceptorinterceptornewMybatisPlusInterceptor();数据权限拦截interceptor。addInnerInterceptor(dataPermissionInterceptor);
  3、在yml文件里面配置需要拦截的方法base:datascope:mapperIds:com。ailot。cloud。upms。api。mapper。SysUserMapper。pageUser
  至此数据权限的配置就已经全部完成了,后面只需要在有拦截需求的表加上拦截字段,在yml配置文件上添加需要拦截的方法就可以实现数据权限的过滤了。三、效果展示
  当前版本tag:1。0。9
  代码仓库四、体验地址
  后台数据库只给了部分权限,报错属于正常!
  想学的老铁给点点关注吧!!!
  欢迎留言交流!!!
  我是阿咕噜,一个从互联网慢慢上岸的程序员,如果喜欢我的文章,记得帮忙点个赞哟,谢谢!

皱纹害怕6种水果,女性多吃点,滋养肌肤,更年轻态爱美是每个女人的天性,尤其现在生活条件好了,女性朋友更加注重保养,不过对于女性朋友来说,最担心的事情就是衰老,最害怕皱纹爬上自己的脸庞。不过我们谁都无法阻挡住岁月的脚步,随着年龄的让大楼装满人!芯片人才争夺激烈,上海这家新型研发机构哪来的信心?8月艳阳下,上海处理器技术创新中心崭新的外立面被照得熠熠发光。不久前,这幢九层大楼正式竣工,成为张江科学城里又一道风景线。作为市科委直属的新型研发机构,处理器中心由中国科学院计算技资讯华为nova10z发布华为nova10z发布首发1599元8128GB1699元(首发1599元)8256GB1899元(首发1799元)疑似搭载海思麒麟710A处理器160。68mm73。3mm8。4手机如何开启地震预警通知昨天四川地震已造成人员伤亡,重庆地区也有强烈震感,本人昨天就被晃得有点头晕。面对这种突如其来的不可抗的地质灾害,只有跑和躲才能争取让自己处于安全的境地,如果能提前一两分钟收到预警,华为Mate50Pro现身GeekBench处理器或为台积电代工骁龙8赶在9月6日下午的华为发布会前,Mate50Pro首个跑分曝光。测试软件为GeekBench5,单核1266分,多核3938分。机型识别为华为DCOAL00,频率信息为13。19G4款价格亲民的手机推荐,配置好价格低,还有良好的使用体验现在又有一批消费者想要换新手机,但如果你目前手机还能正常使用,建议先等等,两个月后有双十一电商活动,届时大部分机型都会有降价优惠。但如果现在就想换,预算又不是很高,那么可以考虑下面最强生产力鸿蒙设备,助力艺术创作,华为MatePadPro12。6英寸发布9月6日,华为Mate50系列及全场景新品秋季发布会正式召开,华为发布了多款新品。其中,华为MatePad系列也迎来了一位新成员华为MatePadPro12。6英寸,这款拥有12。1500左右最具性价比的手机,颜值性能皆都有大家好,今天给大家继续推荐一款1500元价位的超级性价比手机,这一部手机虽然定价为千元机,但是上的配置基本上都是2000多的手机才具有的配置,那么这一款就是红米note11Tpro1699元起!iQOOZ6系列开售至今好评率高达99不久前,iQOO带来了旗下最新力作iQOOZ6系列。9月1日,iQOOZ6系列新品全渠道正式开售,首销就取得了多平台全价位段销量销售额双冠军的好成绩。9月6日,手机中国从iQOO官OPPO新旗舰配置曝光搭载骁龙8Gen2或配备3个5000万像素后摄镜头正当华为Mate50系列高调官宣,即将发布,vivo和荣耀旗下新机不断曝光的时候,OPPO的声浪貌似突然降低了下来。而日前,网间突然曝出了疑似将搭载高通骁龙8Gen2处理器的OPP同样搭载骁龙8芯片,价格相差整整3000元,聪明人该怎么选?2022下半年推出的骁龙8旗舰芯片,口碑相当之高,性能强悍而且功耗还低。根据实际测试来看,在运行原神这款游戏时,骁龙8平均功耗为7。7W,而骁龙8仅6。6W。功耗降低了,帧率却更稳
科普避免医美踩雷,医学美容专家支招审美可以参考这个方法!图说同济大学附属同济医院整形美容外科主任崔海燕教授来源采访对象提供(下同)刚刚过去不久的央视315晚会曝光了一批不可注射的美容针,让医美再一次被推上了风口浪尖。越来越多人对美有着强晚清彩色清晰照片,四个青楼女子合照姿势豪迈,小脚妇人摆拍一张照片,一段历史。历史镜像馆之前发过很多晚清老照片,但基本都是黑白的。如果是彩色的晚清老照片又会是怎样的感觉呢?今天带大家看一组通过后期技术上色后的老照片,更真切地感受那个时代的研究证明睡得越早,死得越早?到底几点睡对身体最好?答案来了研究证明睡得越早,死得越早?到底几点睡对身体最好?常言道早睡早起身体好,那么所谓的早睡是几点睡?大家好,我是傻姐美食,我们大多数人都知道睡眠少了不好,睡的太晚也不好,熬夜就更不好了头发疯长的方法缓解脱发促进生发健发维生素B6促进血液代谢,参与毛囊的细胞分裂,缺乏维生素B6会掉头发。帮助头发健康生长,使掉落的头发重新长出。多吃开心果香蕉玉米牛肉鸡蛋生发维生素A缺VA毛囊角化过度,头发毛躁稀我不要做干物女!这个春日和我们一起把鸡蛋肌吃回来都说春困秋乏,但你知道吗?其实告别冬季,我们的肌肤也同样会出现春困的症状。时冷时暖的春日,皮肤新陈代谢加快,油脂分泌会变得活跃起来,洗脸之后总感觉紧绷甚至瘙痒,即使涂抹了护肤品也依泰安晚新闻3月20日市内去年泰安累计策划入库项目1053个,项目数量计划投资单体投资均创历史新高日前,记者从市发展改革委了解到,去年以来,全市上下高度重视项目策划工作,牢固树立项目为王谋划在前的理念,潍坊市人民医院儿科专家提醒遇见这种黑豆子,千万不要食用潍坊市人民医院儿科急诊作为一个面向小朋友的窗口,经常会遇到各种各样的熊孩子,其中以吃错东西最为稀奇古怪。2月16日晚,该院小儿内一科就收治了这样一位小患者。据孩子的妈妈说,当天下午产妇吃的月子餐鸡蛋发黑有腥味,医院食堂称食材新鲜,当地卫健局介入极目新闻记者张皓杜光然3月20日,有产妇家属反映,在辽宁庄河妇幼保健院食堂购买的月子餐西红柿鸡蛋汤,吃的时候发现鸡蛋发黑,有腥味。21日,涉事医院食堂的工作人员回应称,不会用坏的鸡男人生孩子必须坐月子!!过去你知道哪些?在过去古代,男人也可以生孩子坐月子,过去不叫产妇,而是叫产翁!产翁的由来为了改母系社会为父系社会,男性扮演女性分娩和坐月子。远古时期的母权制度下,女性是日常生活的主宰者,女性生小孩鸡蛋和它天生一对,春天多做给孩子吃,简单一蒸,比吃肉还营养暖暖的春风迎面吹,桃花朵朵开,春暖花开的日子,很适合约上闺蜜出门踏青。闺蜜说有一阵子没见到我家孩子,看着又长高了不少。的确如此,孩子2个月长了3厘米,老母亲甚是欣慰。春天是孩子生长番茄废料被用于制造不含双酚A的食品罐头涂料你可能听说过一些食品包装塑料中的BPA(双酚A)是如何与各种健康问题联系起来的。因此,科学家们正在开发一种更无害的替代品,它是由本来会被丢弃的西红柿废料制成。近年来,研究表明,摄入
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网