0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

大型SaaS系统的数据范围权限设计与实现

jf_ro2CN3Fa 来源:CSDN 2023-03-24 11:36 次阅读


toB 的系统,除了普通的权限管理之外,往往还需要数据范围权限。本文介绍一种,简单的易实现的 Saas 多租户数据范围权限系统的简单设计与实现。

权限的概述

我们一般说权限的时候是在说「功能权限和数据权限」

功能权限指用「户登陆系统后能看到什么模块,能看到哪些页面」

而数据权限指的「是用户在某个模块里能看到几条数据,能看到哪些数据」

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 视频教程:https://doc.iocoder.cn/video/

功能权限

在企业系统中,通过配置用户的功能权限可以解决不同的人分管不同业务的需求,基于RBAC模型,RBAC(Role Based Access Control)模型,它的中文是基于角色的访问控制,主要是将功能组合成角色,再将角色分配给用户,也就是说「角色是功能的合集。」

为何要基于RBAC

企业A一共有12个功能,需要创建100个用户,这些用户中有管财务的、有管人事的、有管销售的等等。如果不引入RBAC模型,我们需要每创建一个用户就要分配一次功能,至少(每个用户只有一个功能)操作100次,如果人数增加到1000甚至10000,并且一个用户可能会有多个功能的时候,操作会非常繁琐,如图:

53f9cf3a-c9f4-11ed-bfe3-dac502259ad0.png为何要基于RBAC

经过多次操作发现:分配给某些人的功能都是相同的,比如分配给A、B等10个用户的功能都是客户管理、订单管理及供应商管理这几个模块,那是不是可以把这几个功能模块打成一个包整体分给需要的用户呢?

这个包就叫做角色。由于角色和功能的对应关系相对固定,给用户分配权限的时候只分配角色即可。

542e89f0-c9f4-11ed-bfe3-dac502259ad0.png为何要基于RBAC

总结:

  1. 解耦用户和功能,降低操作错误率;
  2. 降低功能权限分配的繁琐程度。
5444429a-c9f4-11ed-bfe3-dac502259ad0.png为何要基于RBAC

功能粒度

功能的粒度从粗到细一般分为:「模块级->页面级->接口级(接口级的功能权限指的是哪个角色能调用哪些接口)。」

从后台角度:为了系统安全,代码肯定都会实现到接口级。那我们做粒度选择的意义是什么?当然是为用户降本增效。只是粒度越粗,用户操作越简单,灵活性却越低。

用户的优先级

我们常用的优先级顺序是查看「详情>查看列表>增加、删除、编辑、其他操作按钮」

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/yudao-cloud
  • 视频教程:https://doc.iocoder.cn/video/

数据权限

数据权限解决的是用户能看到多少数据量和什么数据的问题,例如A和B两个用户都能看到销售模块,但A能看到320条数据,B只能看到100条数据,且A能看到的320条数据中包含着B能看到的100条数据,这些都是由数据权限决定的。

数据权限和什么有关系

数据权限一般和企业的组织架构相关,而组织架构分为树状和扁平状的(还有更复杂组织架构,此处暂不做说明)

545ea720-c9f4-11ed-bfe3-dac502259ad0.png数据权限和什么有关系

「数据权限主要和组织架构有关」 ,组织架构中树状架构较为复杂,需要统一或者分模块的定义层级间数据共享问题。

数据权限定义过程中如果出现同一结点下的【用户间层级问题(上下级)】需要回到功能权限的【角色定义】去解决。

数据权限的操作步骤

思想

「数据权限的控制是通过部门的菜单展示来实现的。」

用到数据权限的地方

  1. 用户添加时候,选择部门的下拉框
546f642a-c9f4-11ed-bfe3-dac502259ad0.png数据权限
  1. 部门管理的列表
547f0c2c-c9f4-11ed-bfe3-dac502259ad0.png部门管理的列表
  1. 角色管理,新增弹框页面,选择部门的树状菜单
5495d696-c9f4-11ed-bfe3-dac502259ad0.png角色管理

部门管理中部门列表的数据权限

controller层加载部门列表,加载全部部门信息

54ad70bc-c9f4-11ed-bfe3-dac502259ad0.png数据权限

sevice层逻辑:将当前登录用户所拥有的部门id设置成查询部门列表的where的筛选条件

54ecbea2-c9f4-11ed-bfe3-dac502259ad0.png数据权限55022dc8-c9f4-11ed-bfe3-dac502259ad0.png数据权限

定义一个commonDataservice层:获取用户所具有的所有部门ids

  1. 在commonDataService类中的getCurrUserDataDeptIds()方法,获取当前登录用户的部门数据ids列表
55161c66-c9f4-11ed-bfe3-dac502259ad0.png图片
  1. 如果当前登录用户id为超级管理员,则加载全部菜单信息,如下图所示:
5534ffaa-c9f4-11ed-bfe3-dac502259ad0.png图片
  1. 如果当前登录用户id不为超级管理员,通过用户id,获取sys_role_dpet,sys_user_role这两张表进行关联(「已拥有制定部门的权利且未占用」 ),获取该登录用户所属的部门id
55427a7c-c9f4-11ed-bfe3-dac502259ad0.png数据权限
  1. 数据权限用户已经分配且已经拥有的部门(「已拥有制定部门的权利且已占用」 ),「作用是选择了一个一级部门,那么一级部门所包含的二级部门,三级部门等也要赋值给用户,也就是说拥有的部门下面还有子部门,那么也具有该部门以及子部门的拥有权,使用递归算法全部遍历获得。」 如下图所示
5550f106-c9f4-11ed-bfe3-dac502259ad0.png数据权限556840e0-c9f4-11ed-bfe3-dac502259ad0.png数据权限5576121a-c9f4-11ed-bfe3-dac502259ad0.png数据权限
  1. 将当前登录用户所拥有的部门id通过逗号进行拼接
5589eb5a-c9f4-11ed-bfe3-dac502259ad0.png数据权限

用户新增弹框中的部门列表的数据权限

同样调用的是SysDepartController中的depart/list的方法,逻辑见2.3节

55a32dc2-c9f4-11ed-bfe3-dac502259ad0.png数据权限55b6c882-c9f4-11ed-bfe3-dac502259ad0.png数据权限

角色管理中新增弹框中的部门列表的数据权限

同样调用的是SysDepartController中的depart/list的方法,逻辑见2.3节

55ce4796-c9f4-11ed-bfe3-dac502259ad0.png数据权限55e2aca4-c9f4-11ed-bfe3-dac502259ad0.png数据权限

操作案例

  1. 例如用户debug用户的角色为操作权限角色,分配部门为开发一部下面的测试部门
55f23390-c9f4-11ed-bfe3-dac502259ad0.png数据权限
  1. 使用超级管理员,给操作权限角色分配数据权限,这里选择新分配一个开发二部下面的测试部,如下图所示:
5620da42-c9f4-11ed-bfe3-dac502259ad0.png数据权限
  1. 使用debug用户登录查询
564137c4-c9f4-11ed-bfe3-dac502259ad0.png用户登录查询

关于数据范围权限的设计与实现,你有什么好的方案?欢迎留言评论!



审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模块
    +关注

    关注

    7

    文章

    2473

    浏览量

    46478
  • SaaS
    +关注

    关注

    1

    文章

    350

    浏览量

    36523
  • 数据权限
    +关注

    关注

    0

    文章

    4

    浏览量

    6054
收藏 人收藏

    评论

    相关推荐

    基于SaaS模式的数字电视字幕控制系统

    【作者】:巫江;杨峰;唐继勇;管金称;【来源】:《电视技术》2010年02期【摘要】:介绍了基于SaaS模式的字幕控制系统,实现分散编辑集中管理。通过使用XML作为中间标准数据传输格式
    发表于 04-23 11:21

    什么是SaaS

    ,服务提供商会全权管理和维护软件,对于许多小型企业来说,SaaS是采用先进技术的最好途径,它消除了企业购买、构建和维护基础设施和应用程序的需要。 SaaS模式逐渐在全球得到认可,并得到大范围的普及
    发表于 07-13 09:23

    SaaS投资有哪些门道?

    般给用户提供服务。企业主不用承担高昂的服务器成本、忍受反人类的复杂系统,依靠SaaS便能拥有一套简单强大的企业管理系统,高效化的运营不再只是一个PPT上的故事。一时之间,SaaS成为V
    发表于 08-18 09:56

    阿里云发布新版SaaS上云工具包,全面助力SaaS上云

    的应用系统部署上去。这的确是通常意义的上云。 但对SaaS而言,有更多的维度需要考虑,经过将近一年的探索,阿里云把SaaS上云定义为产品上云, 商品上市和服务上心, 简称三上:产品上云: 包含通常意义
    发表于 10-12 17:02

    入驻在线教育saas系统会面临哪些问题?

    在线教育系统开办在线教育的现象,将来很可能将受到管理和约束。3、品牌与数据绑架由于saas型教育系统本身的属性,虽然入驻价格很具诱惑,但因为教育机构的
    发表于 09-24 15:26

    奥威软件SaaS BI系统:一站式数据可视化解决方案

    BI系统SaaS化已成趋势,越来越多的企业开始寻找SaaS BI系统,以求以更低的成本实现数据
    发表于 08-01 10:21

    PLM系统数据权限控制研究

    基于PLM系统中影响数据权限的4种因素,提出了基于权限规则的动态权限控制机制。为了使数据对象的生
    发表于 03-07 15:17 0次下载
    PLM<b class='flag-5'>系统</b>中<b class='flag-5'>数据</b><b class='flag-5'>权限</b>控制研究

    权限系统中的数据权限设计经验分享

    RBAC模型 数据权限 数据规则 关联资源、用户 继续优化 小结 在项目实际开发中我们不光要控制一个用户能访问哪些资源,还需要控制用户只能访问资源中的某部分数据。 控制一个用户能访问哪
    的头像 发表于 10-11 17:50 1236次阅读

    基于Saas多租户数据范围权限系统的简单设计与实现

    数据权限用户已经分配且已经拥有的部门(「已拥有制定部门的权利且已占用」),「作用是选择了一个一级部门,那么一级部门所包含的二级部门,三级部门等也要赋值给用户,也就是说拥有的部门下面还有子部门,那么也具有该部门以及子部门的拥有权,使用递归算法全部遍历获得。
    发表于 03-24 11:36 1494次阅读

    大型SaaS系统数据范围权限的三种实现方案

    如果是基于请求头携带租户信息的情况,那么在使用中可能会遇到一个坑,如果当使用多线程的时候,新开启的异步线程并不会自动携带当前线程的Request请求。
    发表于 04-26 09:14 462次阅读

    基于Mybatis拦截器实现数据范围权限

    前端的菜单和按钮权限都可以通过配置来实现,但很多时候,后台查询数据数据权限需要通过手动添加SQL来
    的头像 发表于 06-20 09:57 833次阅读
    基于Mybatis拦截器<b class='flag-5'>实现</b><b class='flag-5'>数据</b><b class='flag-5'>范围</b><b class='flag-5'>权限</b>

    如何实现基于Mybatis拦截器实现数据范围权限呢?

    前端的菜单和按钮权限都可以通过配置来实现,但很多时候,后台查询数据数据权限需要通过手动添加SQL来
    的头像 发表于 06-20 09:59 569次阅读
    如何<b class='flag-5'>实现</b>基于Mybatis拦截器<b class='flag-5'>实现</b><b class='flag-5'>数据</b><b class='flag-5'>范围</b><b class='flag-5'>权限</b>呢?

    求一种SaaS模式下多租户系统数据隔离实现方案

    开发过SaaS系统平台的小伙伴一定对多租户这个概念不陌生,简单来说一个租户就是一个公司客户,多个租户共用同一个SaaS系统,一旦SaaS
    的头像 发表于 07-27 10:34 550次阅读

    Saas多租户数据范围权限系统的简单设计与实现

    在企业系统中,通过配置用户的功能权限可以解决不同的人分管不同业务的需求,基于RBAC模型,RBAC(Role Based Access Control)模型,它的中文是基于角色的访问控制,主要是将功能组合成角色,再将角色分配给用户,也就是说「角色是功能的合集。」
    发表于 09-25 10:25 1329次阅读
    <b class='flag-5'>Saas</b>多租户<b class='flag-5'>数据</b><b class='flag-5'>范围</b><b class='flag-5'>权限</b><b class='flag-5'>系统</b>的简单设计与<b class='flag-5'>实现</b>

    oracle系统权限和对象权限的区别

    Oracle系统权限和对象权限是Oracle数据库中的两种不同类型的权限控制机制。虽然它们都是用于限制用户对
    的头像 发表于 12-05 16:21 340次阅读