美文网首页设计师要了解的技术java学习产品成长册
产品 | 权限设计=功能权限+数据权限

产品 | 权限设计=功能权限+数据权限

作者: 戰敭 | 来源:发表于2016-05-06 22:08 被阅读17906次

权限设计=功能权限+数据权限

权限管理 Authority Management

目前主要是通过用户、角色、资源三方面来进行权限的分配。
具体来说,就是赋予用户某个角色,角色能访问及操作不同范围的资源。
通过建立角色系统,将用户和资源进行分离,来保证权限分配的实施。

一般指根据系统设置的安全规则或者安全策略,
用户可以访问而且只能访问自己被授权的资源。


场景举例

企业IT管理员一般都能为系统定义角色,给用户分配角色。
这就是最常见的基于角色访问控制。

场景举例:
  1. 给张三赋予“人力资源经理”角色,“人力资源经理”具有“查询员工”、“添加员工”、“修改员工”和“删除员工”权限。此时张三能够进入系统,则可以进行这些操作;
  2. 去掉李四的“人力资源经理”角色,此时李四就不能够进入系统进行这些操作了。

以上举例,局限于功能访问权限。还有一些更加丰富、更加细腻的权限管理。

比如:
  1. 因为张三是北京分公司的“人力资源经理”,所以他能够也只能够管理北京分公司员工和北京分公司下属的子公司(海淀子公司、朝阳子公司、西城子公司、东城子公司等)的员工;
  2. 因为王五是海淀子公司的“人力资源经理”,所以他能够也只能够管理海淀子公司的员工;
  3. 普通审查员审查财务数据的权限是:在零售行业审核最高限额是¥50万,在钢铁行业最高限额是¥1000万;高级审查员不受该限额限制;
  4. ATM取款每次取款额不能超过¥5000元,每天取款总额不能超过¥20000元。

这些权限管理和数据(可以统称为资源)直接相关,
又称为数据级权限管理、细粒度权限管理或者内容权限管理。


分类

从控制力度来看,可以将权限管理分为两大类:
  1. 功能级权限管理;
  2. 数据级权限管理。
从控制方向来看,也可以将权限管理分为两大类:
  1. 从系统获取数据,比如查询订单、查询客户资料;
  2. 向系统提交数据,比如删除订单、修改客户资料。

概念

用户身份认证,是要解决这样的问题:用户告诉系统“我是谁”,系统就问用户凭什么证明你就是“谁”呢?
所以,用户身份认证,根本就不属于权限管理范畴。
  对于采用用户名、密码验证的系统,那么就是出示密码
  ——当用户名和密码匹配,则证明当前用户是谁;
  对于采用指纹等系统,则出示指纹;
  对于硬件Key等刷卡系统,则需要刷卡。
密码加密,是隶属用户身份认证领域,不属于权限管理范畴。

系统管理,一般是系统的一个模块。
而且该模块一般还含有权限管理子模块。
因此,很多人误认为权限管理系统只是系统的一个小小的子模块。

系统管理里面的权限管理模块,只是一个操作界面,让企业IT管理员能够设置角色等安全策略。
系统背后还有很多权限验证逻辑,这些都并不属于该模块。
总体来说,该模块相当于给权限管理模块提供了一些数据,比如:张三是人力资源经理等。
更多混淆概念,请参考:《对权限管理认识的一些误区》。


技术实现

按照权限管理的力度,逐步介绍权限管理实现技术。

功能权限管理技术实现

功能权限管理技术,一般就使用基于角色访问控制技术RBAC(Role Based Access Control)。该技术被广泛运用于各个系统,非常容易掌握。该技术模型如下图示:


权限验证
功能级的权限验证逻辑非常简单:查看该当前登录用户的角色是否包含该功能的权限。
如果有,则表示有权访问,否则表示无权访问。
对于WEB系统,一般定义一个Filter就可以完成权限验证,无需在各个程序入口进行权限判断。

程序伪代码如下:
// 获取访问功能
*String url=request.getRequestPath();*
// 进行权限验证
*User user=request.getSession().get("user");*
*boolean permit=PrivilegeManager.permit( user, url );*
*if( permit ) {*
*chain.doFilter( request, response );*
*} else {*
// 可以转到提示界面
}
数据级权限管理技术实现

目前,数据级权限管理领域,一直没有统一的技术。

大体上,软件开发人员采用如下技术:
1. 硬编码,也就是将这种逻辑以if/else等形式与业务代码耦合在一起,这种情况居多;
2. 使用规则引擎,也有一些企业将这种逻辑以规则形式提出来,并使用规则引擎解析规则;
3. 使用第三方专业软件,有开源中间件Ralasafe;
    开源框架Spring Security;
    商业产品Oracle Entitlements Server,
    IBM Tivoli Access Manager,
    UPMS通用用户权限系统等。
  • 硬编码形式弊端是非常显然的。
    耦合性强,难以测试;系统组件复用率低;
    系统后期改动代价非常大,牵一发而动全身。
  • 使用规则引擎可以解决很多问题,学习难度尚可。
    但规则引擎并不是专业用于权限管理的,
    所以对于复杂一些的权限管理,就显得力不从心。
  • Ralasafe和Oracle、IBM的商业产品一样,都是中间件形式,
    对应用系统和应用数据库结构没有要求。
    都有管理界面进行直接操控管理,而且都能在线进行测试。
    • 相比较,Ralasafe还可以控制查询权限(即从系统查询订单、查询客户等),
      Oracle、IBM的商业产品没有这方面功能;
    • 从产品学习难度来看,Ralasafe只要有一些IT经验,就能快速上手;
      Oracle、IBM产品即使是专业人员,也难以掌握。
    • Spring Security是框架,需要对你的应用系统进行改动,你的系统必须在该框架进行设计编写。
      它只是帮助开发人员将权限提取出来了,但数据级权限还需要开发人员开发Voter。
      而且配置工作巨大,难以测试。
    • 虽然上述提到的产品,都是Java产品。
      但Ralasfe和Oracle、IBM的商业产品,以中间件形式,
      可以部署在独立服务器上,使用web service等方式与非Java系统交互。

实施

① 功能级权限控制
这是很多系统都能做到的。
让系统使用者(一企业IT管理员)定义角色,给用户分配角色。
成功实施该步骤,用户能在功能级进行权限管理。
整个过程无需软件开发商参与。

② 部分预定义好的数据级权限
有些复杂一点的系统,提供了一些规则和管理界面,
可以让系统使用者(一般是企业IT管理员)输入规则参数。

比如普通审查员审查财务数据的金额区间,勾选某用户能够查询哪些组织机构的订单数据。

这是给企业提供了部分控制数据级权限的能力。
但该能力还非常弱,仅限于已定义好的策略,不能适应安全策略变化。
而且,企业需求肯定会随着业务发展、时间推移,发生变化。

比如:普通审查员审查区间由原来的单一设置区间,改为按照行业、按照地域来设置不同的区间。
用户查询订单不仅和组织机构有关,还和订单业务领域(体育、食品等)有关。

当这些需求发生的时候,企业还要求助于软件开发商进行修改。

③ 企业完全掌控安全策略
企业完整掌控安全策略,应该包括2个方面内容:
  1. 功能级权限管理完全自我掌控;
  2. 数据级权限管理完全自我掌控。

实现这方面需要,还需要考虑企业的IT能力:
IT能力没有软件开发商强,而且权限管理涉及整个系统安全,关系重大。

因此软件必须是这样的:
  1. 图形化、集中管理的,便于企业管理;
  2. 可在线测试的,定制策略后在不影响业务的情况下,进行测试,确保无误。
    目前,就Ralasafe和Oracle、IBM产品满足要求。

注意问题

不良的权限管理系统,必然留下系统漏洞,给黑客可趁之机。
很多软件可以轻松通过URL侵入、SQL注入等模式,轻松越权获得未授权数据。
甚至对系统数据进行修改、删除,造成巨大损失。

很多系统,尤其是采用硬编码方式的系统,存在权限逻辑与业务代码紧密耦合,
同时又分散在系统各个地方,系统漏洞势必非常多,
而且随着系统不断修改,漏洞逐步增多。

好的系统,应该将权限逻辑集中起来,由专业的安全引擎进行设置、解析。
业务逻辑调用安全引擎,获得权限结果,不再使用非专业模式。

这种转变,如图示:


权限可以怎样设计?

相关文章

  • 产品 | 权限设计=功能权限+数据权限

    权限设计=功能权限+数据权限 权限管理 Authority Management 目前主要是通过用户、角色、资源三...

  • 权限管理

    权限管理分为 功能权限和数据权限 功能权限: 哪些人可以做什么操作数据权限: 哪些人可以看哪些数据 数据库表设计 ...

  • 2、用户权限管理,数据库表设计

    一、权限设计 网上资料说权限设计 = 功能权限 + 数据权限,我认为还是很有道理的。之前项目中只涉及到功能权限,没...

  • 关于权限管理的设计

    在做b端产品,不可避免的遇到权限管理,权限设计,根据什么样的角色,授予什么样的权限,然而权限还涉及到数据权限和功能...

  • 权限设计合集

    1.《数据权限设计思路_权限设计数据权限》摘要:方案一:按照岗位体系建立数据权限方案二:针对角色设置数据权限方案三...

  • 系统权限设计

    一、客户需求 系统权限包含功能权限,操作权限,数据权限。功能权限比较好理解,有则功能可见,没有则不可见。接口权限也...

  • 权限系统设计方案

    1权限模型 1.1 权限设计 从业务分类上来讲权限可以分为数据查看权限,数据修改权限等,对应到系统设计中有页面权限...

  • 数据库 权限设计

    数据库 权限设计 -系统权限管理设计-通用权限管理设计 之 数据库结构设计 权限 用户 角色 组 用户表

  • 通用数据权限设计——列权限(一)

    概念 笔者认为WEB系统权限应归纳为功能权限,数据权限,字段权限 功能权限:即菜单、按钮、超链接等,控制用户能否访...

  • 设计案例之通用权限管理设计数据权限

    本文将对这种设计思想作进一步的扩展,介绍数据权限的设计方案。 权限控制可以理解,分为这几种 : 【功能权限】:能做...

网友评论

  • Captain_72aa:权限设计=功能权限+数据权限,对于这个设计,我觉得不妥。权限是用来规范用户行为的,不是为了权利的展示。将权限分割成功能和数据两部分,本身是不科学的,数据是依赖功能的,没有了功能,数据也无法从业务的角度去管理。在授权时,必须要把功能和数据同时考虑,只有功能权限,业务无法进行;只有数据权限,业务同样无法进行。要让业务能正常执行,就需要同时有功能权限和数据权限,这更说明了功能和数据是一体的,不能割裂。按照博主的这个设计,是没有从业务角度考虑,而只是技术人的思维
    戰敭:2B产品,很多业务场景的数据展示需要使用到文中的权限。
    举个栗子:在短信业务平台中,查看短信发送历史。
    数据权限——商户可以浏览自身账号的数据;管理员可以平台所有商户数据;
    功能权限——商户有数据“查询”的权限;管理员有数据“查询”“导出”“删除”等权限;

    正常思路可能会直接划分两个应用来使用(商户平台、管理后台),但有时项目较小,就有可能会直接规划放在同一个应用里面去实现,使用功能权限与数据权限去授权,给不同角色的用户赋予相应的权限。
  • ce46920009c0:这个功能权限是不就相当于界面上的菜单显示权限、按钮显示及控制权限?数据权限是不就相当于对单个数据资源比如某台设备进行操作的权利(可以是删除设备、重启设备等)
  • d2ab12ce0fff:Ralasafe 现在是开源的吗?
    554c50830a7a:可惜已经商业化了~
  • Echo小可爱:你这是来骗赞的吗?这不就是百度百科的,你也是蛮拼!
    戰敭:我自己做阅读笔记,整理好阅读,自用。

本文标题:产品 | 权限设计=功能权限+数据权限

本文链接:https://www.haomeiwen.com/subject/pokjrttx.html