大型Saas系统的权限体系设计(一)

X0 概述

在2B系统开发中,权限体系设计是绕不开的问题。最简单的当然是RBAC模型,只要通过用户、角色、权限几个有限的概念,就可以建立起一套基本可用的权限体系。再复杂一点,可以增加角色的层级概念,使得角色的配置更高效。
但现实工作中,权限控制的需求往往更复杂,不仅涉及到功能授权,也涉及到数据授权,有些系统甚至涉及到更细的数据颗粒度授权,这个时候RBAC模型就显示出诸多的不足。
如何设计一套简单高效的权限体系,使得能够满足各种从简单到复杂的场景的应用,是产品经理和系统架构师需要用心的基础工作

X1 核心痛点

我公司一直想做一套Saas系统,目标是服务于智慧社区的管理,里面涉及到大量的组织、人、财、物、数据的管理,其中组织和人又需要分成多个层级,比如:

  1. 平台公司的组织结构
  2. 平台公司的租户管理
  3. 租户公司的组织结构
  4. 租户公司的客户管理
  5. 客户公司的组织结构
  6. 客户公司的员工管理

等等。

如何能够灵活地设置权限,让不同性质的用户在这个Saas平台上自如地处理业务,同时又严格地限制其数据访问范围,做到安全可控,是一个很大的挑战。

其次,还需要考虑常见的情况,比如:

  1. 一人多岗或者多职,比如分管领导兼任部门领导
  2. 多角色的跨越,比如即是员工又是用户
  3. 相同岗位不同管辖范围授权,比如多公司会计

等等。

还有更苛刻的要求,比如需要考虑不同的岗位对同一个数据拥有不同的访问权限,比如:

  1. 查询字段的限制
  2. 编辑字段的限制
  3. 下载字段的限制

等等。

以上需求都对传统的RBAC权限体系设计构成了巨大挑战。

X2 新权限体系模型

本着宁简勿烦的奥卡姆剃刀原则,对于以上复杂的权限管理需求,首先可以抽象出几个必要的概念。

A. 资源(Resource)

借鉴传统的LDAP产品,我们可以把每一个需要纳入管理的组织、人、财、物、数都看成是一种资源,当然每种资源的描述内容是千差万别的。

B. 资源类型(ResourceType)

不同的资源类型对应不同的元数据,可以有不同数量和类型的字段对其进行描述。不同资源类型之间相互可以有关联关系。

根据一般性的社会需要,可以大致分为:公司、部门、个人、设备(可以再细分)、地域(可以再细分)、小区等。原则上需要拥有单独的元数据描述的资源都需要定义为一种资源类型。

C. 资源详情(ResourceProfile)

如果需要去查看资源的具体的情况,就需要根据“资源类型+资源元数据”打开资源详情,在资源详情上面可以进行各种增删查改操作。

D. 资源目录(ResourceTree)

不同资源相互之间存在层级和依赖关系,并且每个资源只有唯一的父级资源,就构成了一颗自上而下的资源目录或者资源树。资源树是我们后期进行数据权限设置和控制的基础。

E. 权限(Privilidge)

权限比较简单,可以对应系统中某个菜单入口,或者某个操作按钮,或者某类资源的增删查改操作等。

F. 角色(Role)

角色跟RBAC一样,即是一组权限的组合。角色和角色之间可以形成层级关系。

一般而言,父级角色拥有比子级角色更大的权限,子级角色的权限则是父级角色权限的子集。

G. 岗位

对一个组织(公司或部门)可以设定多个岗位,每个岗位需要定义以下内容:

  1. 所属组织(公司或部门)
  2. 角色
  3. 资源类型
  4. 该资源类型可查看字段
  5. 该资源类型可编辑字段
  6. 该资源类型可下载字段
  7. 该资源类型的访问池(可以是资源目录中某些节点组合,也可以是具体的资源组合)

以上定义完整,即构成一个部门的一个岗位。

H. 用户

对用户而言,首要的是能够登录认证。只要在系统的资源目录中,并且账号密码验证通过即可访问该系统。

其次是用户操作具体业务和访问具体资源的授权检查,这个就需要通过给用户配置一个或多个岗位来实现。

当用户完成登录操作后,系统应该同步获取其拥有的岗位,并且能够在系统层级做不同岗位的切换。

X3 新权限体系关系图

X4 分级授权策略

回归到Saas系统,平台如何管理租户,租户如何管理客户,客户如何管理员工?这个就需要采取分而治之的策略。简单说就是,平台只负责为租户创建账号,然后限定其功能权限和数据权限,剩下的资源目录和权限体系由其自己去管理,租户对客户的管理也是如此。

但不同类型的管理员所能创建的岗位和访问的资源必然是受限的。

这就实现了一套复杂权限管理体系的架构设计。

后续如何具体形成数据库表和业务逻辑,请等待下级......

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
基于SAAS模式的多用户数据体系结构。 信任,或是缺乏充分信任,都是妨碍“软件即服务”(SaaS) 推广的首要问题。我们可以说,关于产 品、客户、雇员、供应商等的数据是商业运营中最重要的资产。当然,SaaS 的核心也是数据。SaaS 应用使客户能通过网络集中存取数据,成本低于使用本地安装的应用。不过,为了充分发挥 SaaS 的 优势,企业必须在一定程度上放弃对自身数据的控制,要在确保数据安全并避免泄密方面充分信赖 SaaS 服务商。 为了赢得客户的信任,希望开展 SaaS 业务的架构师首先应创建成熟稳定、安全可靠的 SaaS 数据体 系结构,使用户和客户都能够放心地将重要的商业数据交给第三方合伙伙伴进行管理和控制,而且该架 构还应该能够以极低成本实现高效管理和维护。 本文是我们介绍多用户应用设计系列文章中的第二篇。第一篇文章《抓住长尾市场的架构战略》从较高 层面介绍了 SaaS 模式及其挑战和优势。该文的网络版刊登在 MSDN 上,网址为: msdn.microsoft.com/library/en-us/dnbda/html/ArchStratCtchLngTail.asp。本系列的其他文 章将侧要于讨论工作流程、用户界面设计以及整体安全性等问题。 在本文中,我们将讨论如何处理从完全隔离的数据直到完全共享的数据,并根据不同地点的数据隔离和 共享情况指出创建数据体系结构的三种方法。随后,我们将探讨决定采用何种方法时应考虑的技术和商 业因素。最后,针对确保安全性、创建可扩展数据模型以及数据基础结构的可扩展性等方面,我们将提 出一些设计模式。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值