`
metadmin
  • 浏览: 166292 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

权限管理最佳实践:四,数据级查询权限管理

阅读更多

 

-------------------------------------------- 总大纲 ---------------------------------

Ralasafe开源有段时间了,大约有2个月了。根据社区的反馈,我打算围绕Ralasafe最佳实践,书写一系列BLOG。

 

大体内容有:

1, 登录控制: 哪些页面需要登录后才能访问,登录用户名、密码验证,登录转向页面;

2, URL权限控制:哪些页面访问需要进行角色权限验证,怎样验证最简单有效,如何处理验证失败情况;

3, 数据级权限管理方案探讨:选择中间件呢还是框架?

4, Ralasafe体系结构: 用户怎么读取,用户有哪些字段,怎样与应用基础;

5, 数据级查询权限管理: 如何给不同的人分配不同的查询数据权限,返回where条件呢,还是直接返回结果集?

6, 数据级决策权限管理: 如何给不同的人分配不同的数据操作权限,当用户不具备权限怎么办?

7, 其他细小的权限控制: 如下拉框显示内容;按钮、链接是否显示,图片是否显示等。

-------------------------------------------- ------- --------------------------------

 

 

数据级权限管理需求

数据级权限管理需求主要有:

1,支持不同用户查询到数据是不同的;

2,支持数据库行级、列级查询;

3,支持分页查询——包括2个方面:a,分页查出数据;b,能告知总数据条数是多少;

4,支持自定义条件(比如:张三在自己的查询权限范围内,查询50w以上的订单)。

理论分析

能够将数据级权限,与业务分离出来——是多年来开发人员追求的目标。一旦遇到疑难杂症,马上会让人联想到高难度的API编程,或者绚丽的XML配置。

 

不过,我今天的分析,会极其简单。不过我强烈建议大家看下去。如果对该方案有所怀疑,请使用你的应用案例进行试验。我当时不敢确认的时候,就是这么做的。

(当初,我提出该方案的时候,我们团队认为该方案过于简单,不可行。我坚持让他们实现该方案。等产品做出来后,他们略有所悟,认为该方案可行。当,我让他们做demo的时候,将该方案运用于案例的时候,他们拍腿叫道:超级太棒了!我希望你也有该感受)

 

分类思想的提出

首先,我们思考这个问题:为什么我们在程序里面使用了if/else?为什么数据级权限难以处理?

原因就是:1,有很多种情况;2,我们需要针对不同的人、不同的情况做不同的权限逻辑。比如:

if  是总公司用户?  then 查询所有订单;
else if  是分公司用户?  then 查询本分公司(${用户的公司})及下属子公司订单;
else //  是子公司用户了
then 查询本子公司订单(${用户的公司})

 

在RBAC模型里面有用户群组概念,也有不少开发人员将用户群组引入数据级权限管理领域。群组很好的将用户归组,但不足之处是要事先将用户归入组内。比如,在将张三指定到“总公司用户组”之前,他不属于该用户组,即便张三的机构属性显示他属于总公司。

我们对群组进行稍微改造:使用规则来定义群组,满足该规则的用户,我们则认为该用户属于该群组。传统编程里面的if/else判断条件,基本都可以使用规则或者规则表达式组来描述。此时,张三的机构属性显示是总公司,那么他就属于总公司用户组;如果他的机构属性是某个分公司,那么他就属于分公司用户组了。无需进行额外操作(指定、重新指派等,一切都是动态智能的)。

 

OK,至此,我们提出了使用规则描述的“用户分类”。该规则应该能读取用户信息、上下文信息、数据查询等,并进行相关运算(比较、集合运算等)

 

至此,我们可以基于用户要分类,为每个用户分类分配一个查询。(该查询可以接受相关参数,比如用户参数、上下文参数等)

那么上述例子,使用分类思想,可以这么解决:

用户分类:总公司用户类 —— 查询:查询所有订单

用户分类:分公司用户类 —— 查询:查询本分公司及下属子公司订单;

用户分类:子公司用户类 —— 查询:查询本子公司订单。

与功能权限结合

我认为功能权限与数据权限分开非常合适。功能权限由企业IT管理员维护;数据权限由软件开发商维护。有人会说这样不好,比如这个案例怎么处理:

普通审查员可以审查50w财务数据;中级审查员审查50w~500w的财务数据。这个50w、500w,企业需要自行维护。

 

OK,我认为这50w、500w应该称为“权限策略数据”,可以保存到数据库里面,做为基础数据或者数据字典由企业通过界面自行维护。而软件开发商,开发的“数据级权限”策略读取这些数据。(当然,你可以缓存。。。。)

Ralasafe方案

怎样实现数据级查询权限

为了理解本节内容,建议下载ralasafe demo应用,对照图形界面,更容易理解些。

Ralasafe使用管理界面来定制用户分类、定制数据查询。为了确保定制无误,Ralasafe支持在线测试。比如定制用户分类后,可以选择一个用户进行测试。数据查询等都是可以在线测试的。

 

定制完毕后,将用户分类和数据查询配对,赋给特点权限。一个权限,可以赋多个(用户分类——数据查询)配对。和前面的理论分析一样。

 

具体定制,怎样配对,可以参考文档,配有图片,在此不做多说。定制用户分类定制数据查询给权限授权策略(即配对)。

怎样与应用结合

Ralasafe提供org.ralasafe.Ralasafeorg.ralasafe.WebRalasafe两个接口类。里面的query方法对应数据级查询权限。在应用系统相应的地方,调用该方法即可。我建议在系统的控制层调用,即:servlet或者action。

 

ralasafe demo例子,EmployeServlet就是这么调用的:(demo演示员工查询,不是订单查询

// 通过Ralasafe接口获取当前用户被授权查看的员工
Collection employees = WebRalasafe.query(req, Privilege.QUERY_EMPLOYEE);
// 将数据放入request,供前台展示
req.setAttribute("employees", employees);

OK,就这么简单。需要编程的工作量非常非常少,达到了极致。世界从此清净了。

 

(WebRalasafe.query方法接受req<HttpRequest>参数,从这里读取User。Ralasafe.query方法则直接传入User,可供非web类应用调用) 

系统结构

Ralasafe由权限引擎和管理界面组成。权限引擎解析权限策略;管理界面生成、维护权限策略。如图示:

 

 

注:ralasafe团队博客在javaeye/baidu/blogjava等空间,同步发布。ralasafe官方网站:http://www.ralasafe.org/zh

 

 

 

 

 

分享到:
评论
2 楼 balaschen 2010-09-09  
这个适用面太简单了,举个例子,在OA类的文档管理系统中,每个文档(记录)的查看权限是由该文档定义的(类似操作系统的文件夹的安全性设置),每个文档可以设置哪些人,哪些部门,哪些群组可以看(群组和部门又可以嵌套),这样的场景下,用户是无需分类的,数据查询要如何定义?

楼主的方案有一个潜在的假设,这个假设就是你的业务数据的查询,是可以通过简单定义来实现的,如果业务数据查询的复杂度超出“数据查询定义”的范围,就无能为力了。

我一贯的观点,数据权限是没有万能胶的,只有在特定的业务领域,才有存在的可能。
1 楼 neusoft 2010-09-09  
我们都是使用oracle的 vpd 来做数据权限的,还算好用吧,可能是我们的场景比较简单

相关推荐

    【推荐】最强大数据学习与最佳实践资料合集(基础+架构+数仓+治理+案例)(100份).zip

    推荐,最强大数据学习与最佳实践资料合集,基础+架构+治理+案例,共100份。 一、基础篇 快手EB级HDFS挑战与实践 Hive任务开发规范 一文看懂Hadoop生态圈 资料-CentOS7搭建Hadoop-2.7.7集群 ClickHouse官方中文文档 ...

    2023数据治理峰会(公开)PPT汇总(18份).zip

    DCMM助力工业企业数字化转型发展最佳实践 5、数据资产管理 音乐实时数仓治理优化实践 6、指标体系 增长指标体系构建及分析实践 基于指标中台的敏捷数据分析平台 数据指标监控实践 埋点体系建设与治理

    react-admin::party_popper: 神奇的React管理员

    :gear: 最佳实践:良好的工程实践助您持续产出高质量代码 :locked_with_key: 优秀的权限设计:目前能找到的最好的权限实现方案 :party_popper: 推荐 微前端版本 正在同步开发中... 好用的水印组件 :scroll: 目录 ├...

    【重磅】史上最全的阿里云分享的云原生技术学习资料合集(120份).zip

    函数计算最佳实践:快速开发一个分布式 Puppeteer 网页截图服务 函数计算最佳实践:如何轻松构建弹性高可用的音视频处理系统? 基于 DLedger 构建高可用的 Apache RocketMQ 集群 基于 RocketMQ + Knative 驱动云原生...

    JAVA毕业设计之科研工作量管理系统的设计与实现(springboot+mysql)完整源码.zip

    总之,综上所述,科研工作量管理系统结合了现代Web开发的最佳实践,采用了高效的Spring Boot框架和可靠的MySQL数据库,实现了一套完整的功能来管理科研工作量。系统的设计注重用户体验,同时保证了数据处理的安全性...

    dva-admin:dva admin antd仪表板

    dva-管理员 目的 期望打造一套基于, , 于一体的,企业级后台管理系统 期望可以单纯由前端来解决用户权限,并...基于 , , , 企业级后台管理系统最佳实践 基于实现突破性独立开发 基于Antd UI设计语言,提供后台管理

    JAVA毕业设计之基于springboot的智能家居系统(springboot+mysql)完整源码.zip

    总之,这个基于Spring Boot的智能家居系统是一个利用现代Java技术和开发最佳实践构建的系统,它提供了一套完整的解决方案,以满足现代家庭对于智能化、自动化和高效能源管理的需求。通过这个系统,用户可以方便地...

    Enterprise Library 3.0(一)

    &lt;br/&gt;Enterprise Library是微软Patterns & Practices 项目组 推出的公共模块解决方案,用来解决我们在企业级开发中遇到公共问题,如配置管理、数据访问、缓存管理、记录操作日志、异常管理、加密解密、权限管理...

    Enterprise Library 3.0(三)

    &lt;br/&gt;Enterprise Library是微软Patterns & Practices 项目组 推出的公共模块解决方案,用来解决我们在企业级开发中遇到公共问题,如配置管理、数据访问、缓存管理、记录操作日志、异常管理、加密解密、权限管理...

    Enterprise Library 3.0(二)

    &lt;br/&gt;Enterprise Library是微软Patterns & Practices 项目组 推出的公共模块解决方案,用来解决我们在企业级开发中遇到公共问题,如配置管理、数据访问、缓存管理、记录操作日志、异常管理、加密解密、权限管理...

    计算机专业毕设ASP.NET企业投资价值分析系统(源代码+论文).rar

    4. 用户权限管理:支持多用户角色和权限设置,确保系统数据安全。 5. 系统设置与定制:提供系统设置和定制功能,满足不同用户的个性化需求。 该系统适用于各类投资者、分析师和企业决策者,帮助他们更好地评估企业...

    SQL Server 2008数据库设计与实现

     2.7 最佳实践  2.8 总结 第3章 概念阶段数据建模  3.1 理解需求  3.2 文档化过程  3.3 需求收集  3.3.1 客户访谈  3.3.2 要回答的问题  3.3.3 现存的系统和原型  3.3.4 其他类型的文档  3.4 ...

    Android高级编程--源代码

     ◆android移动开发的最佳实践  ◆简要介绍活动、intent、清单和资源  ◆如何使用布局和定制view创建用户界面  ◆存储和共享应用程序数据的技术  ◆如何创建基于地图的应用程序,如何使用gps和地理编码位置等...

    网上环游:有趣的内容,而您不必Bing搜索。 (是的,人们在使用Bing!)

    2021年3月2日至4日一日管理员说明:本课程涵盖成功的Power BI管理,创建Power BI租户,管理访问和权限,管理资源和容量,高级容量管理,扩大范围的关键方面-嵌入式,与数据网关一起使用以及成功的最佳实践Power BI...

    asp.net知识库

    Coalesys PanelBar + R.a.d Treeview +Xml 构建的Asp.net 菜单和权限管理模块 突破屏蔽限制,自己的网站使劲弹新IE窗口 对页面SCROLLING的CSS不能生效原因 .Net 中IE使用WinForm控件的使用心得。 动态加载用户控件的...

    2019年Oracle Open World大会PPT合集(50份).zip

    Oracle高级压缩——企业数据生命周期管理最佳实践 Oracle上云之舍和得 Oracle升级到19C前关于性能需要关注哪些点? Oracle partitioning 每个人都应该知道的分区知识 Oracle 19C之后版本发布规则以及升级路线 Oracle...

    华为OD的概要介绍与分析

    - **官方网站与文档中心**:华为云官网提供了详尽的OD服务文档,包括快速入门指南、API参考、最佳实践和开发案例,是学习和了解OD服务的第一站。通过这些资源,开发者可以迅速掌握如何创建桶、上传下载对象、设置...

    ABP(2.02)框架相关Demo代码以及报错处理和中文说明手册

    我们在开发企业WEB应用程序时都有一些类似的需求,例如:都需要登录页面、用户/角色管理、权限验证、数据有效性验证、多语言/本地化等等。一个高品质的大型软件都会运用一些最佳实践,例如分层体系结构、领域驱动...

Global site tag (gtag.js) - Google Analytics