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

权限管理最佳实践:三&四,数据级权限管理方案探讨

阅读更多

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

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

 

大体内容有:

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

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

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

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

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

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

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

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

 

数据级权限

数据级权限,无外乎这些类型:

1,数据库行列级:比如领导查询数据范围和普通员工查询的数据范围不同,客户经理能够查询客户联系方式字段,而其他人不能查看客户联系方式字段。

2,字段内容控制:比如普通审查员审查50w以下财务数据,刚入职客户经理只能将客户级别调整不能超过3级。

 

从用户与数据的交互方向可以分为2大类:

1,从系统获取数据(查询);

2,向系统提交数据之前的判断。

现实困惑

这种权限与业务紧密耦合,很难找到通用方法。绝大部分系统仍然采用if/else来编程,而且这种逻辑分散到系统的各个环节,甚至还会在系统多处出现重复判断。

也有不少网友尝试5表模型等,试图通过数据模型构造好的ACCESS CONTROL LIST来控制。这种构造ENTRY模式,当数据量小的时候,是可行的,维护工作量也不大。当数据量大的时候,显然不能奏效。甚至无法运行,维护工作量非常大。

主要表现在:

1,where 语句里面的in(..., ..., ..., ..., ...) 子条件过长,或者使用in (select ... from ACL_ENTRY where ... )性能也是非常低下的;

2,当删除某用户的时候,需要在ACL_ENTRY表里面,删除相关记录;

3,当删除某业务数据的时候,也需要在ACL_ENTRY表里面,删除掉相关记录;

4,数据量大,ACL_ENTRY数据量承几何级增长。

 

也有企业尝试使用规则引擎来解决。这是非常好的尝试,提升了系统开发效率、组件复用率。

主要表现在:

1,首先,主动的实践了一项最佳项目实践:权限与业务松耦合。

2,通过松耦合,大幅优化了系统结构。

3,进一步提高了组件复用率。

只是,规则引擎毕竟不是专业于权限管理领域,对于复杂需求,或者有些需求实现起来还是很别扭。看起来像if/else的规则表达罢了。

 

Ralasafe和IBM、Oracle商业产品一样,都使用规则进行描述。大家的区别在于:谁满足需求更多、更容易了。

框架or中间件

框架的好处,显然是有个体系结构,团队遵循该方式进行开发、组装即可。提供了一种标准和开发模式。

中间件的好处,显然是提供了自由,而且易于结合、易于分工。提供了一种服务方式。

 

我本人希望自由,所以讨厌框架,偏爱中间件。但我对选用中间件、框架的选择标准是非常中肯的,供大家参考。

Metadmin 写道
在系统结构分层的场景,适合使用框架。
在系统功能分离的场景,适合使用中间件。
 那么具体到权限管理领域,显然是功能分离,中间件更合适。这么做,还将不给原有系统、新开发系统的既定框架造成冲突。一个系统里面使用多个框架,是非常痛苦的事情。殊不知在SSH的海洋里面,有多少人将N多时间“Kill”在沙滩上?!

Ralasafe体系结构及应用集成

Ralasafe是中间件,采用服务模型。在业务需要的地方,调用Ralasafe接口,或者将Ralasafe接口向LOG4J那样wrap到你的aspect里面去。

 

Ralasafe按照权限的方向,提供2种数据级权限管理服务,也正好对应2个接口:

1,从系统获取数据, Ralasafe.query( int privilegeId, User user, CustomizedWhere where, int fromIndex, int size );

2,向系统提交数据之前的判断,Ralasafe.permit( int privilegeId, User user, Object businessData);

Ralasafe还针对web应用,提供了WebRalasafe

 

接口非常简单,在接口层只要告知Ralasafe:当前这个是谁,他/她想干什么。

权限逻辑,全部在Ralasafe图形化管理界面,点击鼠标完成配置,并进行在线测试。无需编程。

所以,使用Ralasafe编程工作量非常少。也给不少开发人员造成“不知道怎样与应用集成”的错觉。

Ralasafe的用户怎么来

Ralasafe并不会给你的应用系统“假定”有哪些字段。你的应用系统用户可以由任意字段,通过XML文件安装到Ralasafe即可。该XML文件,主要指明:用户存在那张表(也可以是视图,这样可以从多张表关联读取数据。比如ralasafe-demo,就关联到company表读取了companyLevel和companyName字段); 哪些字段是唯一字段; 哪些字段是主键;各字段对应类型。

 

然后,在所有权限规则里面,可以读取这些用户字段。比如ralasafe-demo应用(下载地址:

http://www.ralasafe.org/zh/download/download.jsp ) 用户含有companyLevel字段,在定制“总公司”用户分类的时候,就将该用户companyLevel字段与总公司级别“1”进行比较。

 

(下期真正开始探讨数据级权限管理实现了)

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

 

 

 

分享到:
评论
15 楼 chiwey 2011-02-28  
最近研究了一下Ralasafe,感觉确实不错。多谢lz分享
顺带说一下,论坛的访问速度好慢
14 楼 eagle_speed 2010-12-06  
ltian 写道
从你们的API 看,似乎是直接侵入到SQL一级,好的数据级权限控制系统绝不会要求别人用特定的函数或者API来访问数据源的。说的不对地方请指正!

其实兰大哥对权限有很深的造诣,可以谈谈自己对数据级权限控制方面想法及一些设计模型,指点一下门外的汉子
13 楼 Agrael 2010-12-03  
xifo 写道
现在JavaEye的朋友怎么这样眼高手低了,人家辛辛苦苦写出来的连载,你不愿看也就罢了,居然投了5个隐藏帖,实在看不过去。

中国特色的民主。
12 楼 bairo007 2010-12-03  
daisi2008 写道
数据级权限
我现在也有这个方面的需求 我现在分为垂直和横向
security控制访问url 垂直方向上级有下级所有权限
横向我现在卡住了 有一个很繁琐的方式就是通过手动授权 把授权信息放在一张表里记录 但是这样的后果就是和业务强耦合 资源点分布很多代码修改量大

有没有什么好的思路提供探讨下

daisi2008 写道
数据级权限
我现在也有这个方面的需求 我现在分为垂直和横向
security控制访问url 垂直方向上级有下级所有权限
横向我现在卡住了 有一个很繁琐的方式就是通过手动授权 把授权信息放在一张表里记录 但是这样的后果就是和业务强耦合 资源点分布很多代码修改量大

有没有什么好的思路提供探讨下


我们现在也有这种需要控制到横向的数据权限,不知道怎么解决。比如说一个人员修改个人信息的时候,只可以修改自己的部分信息,这个可以修改的信息可在权限系统配置。不知道有没有什么好的思路,尽量在业务代码里控制权限的部分减少。
11 楼 metadmin 2010-09-10  
给出你的案例,我们一起讨论讨论。或者去Ralasafe论坛讨论。
10 楼 daisi2008 2010-09-10  
数据级权限
我现在也有这个方面的需求 我现在分为垂直和横向
security控制访问url 垂直方向上级有下级所有权限
横向我现在卡住了 有一个很繁琐的方式就是通过手动授权 把授权信息放在一张表里记录 但是这样的后果就是和业务强耦合 资源点分布很多代码修改量大

有没有什么好的思路提供探讨下
9 楼 muerjie 2010-09-10  
讨论基于url角色权限控制,与数据级的权限控制主题,就值得一看
8 楼 ltian 2010-09-09  
从你们的API 看,似乎是直接侵入到SQL一级,好的数据级权限控制系统绝不会要求别人用特定的函数或者API来访问数据源的。说的不对地方请指正!
7 楼 xieshaohu 2010-09-09  
分析得不错。期待下一篇
6 楼 liu78778 2010-09-09  
我就是属于那无法再投的,所以说LZ比较杯具,或者又说明【高手们】认为我们认为属于“精华”的都不值一哂
5 楼 H_eaven 2010-09-08  
讨论基于url角色权限控制,与数据级的权限控制主题,就值得一看.
4 楼 chanly 2010-09-08  
好帖子,一直对权限控制没更好的想法,我差点陷入5表中。
3 楼 bluemusic 2010-09-08  
这里[高手]众多,很多人想投精华也因为发的隐藏帖多了,积分扣到0无法再投
2 楼 xifo 2010-09-08  
现在JavaEye的朋友怎么这样眼高手低了,人家辛辛苦苦写出来的连载,你不愿看也就罢了,居然投了5个隐藏帖,实在看不过去。
1 楼 JavaStudyEye 2010-09-08  


最近我在搞权限这一块!

看了楼主的文章,使我受益匪浅!

真的很期待!

相关推荐

    角色权限管理设计方案

    本文将深入探讨“角色权限管理设计方案”,基于提供的描述和标签,我们将详细阐述这一主题,以便理解如何有效地设计和实现一个权限控制系统。 首先,我们要明白权限管理的核心目标是确保用户只能访问他们被授权的...

    权限管理方案概述.doc

    权限管理是信息系统中至关重要的一个环节,主要目的是确保不同职责的人员只能访问和操作与其工作相关的功能和资源,从而保障系统的安全性和数据的完整性。在本文档中,我们将深入探讨几种常见的权限分配方案及其逻辑...

    Java开发企业级权限管理系统

    根据提供的文件信息,我们可以深入探讨如何使用Java来开发一个企业级权限管理系统。权限管理系统是现代企业软件架构中的关键组成部分,它帮助企业确保数据安全并有效控制用户访问资源的能力。接下来,我们将详细阐述...

    DB2数据库管理最佳实践pdf

    DB2数据库管理最佳实践是IBM公司推出的一款关系型数据库管理系统,广泛应用于企业级的数据存储、管理和分析。这份PDF文档很可能是对DB2数据库在实际操作中的优化策略、配置技巧和故障排查方法的深入探讨,旨在帮助...

    ASP.net 2.0三级权限管理

    在这个“ASP.NET 2.0三级权限管理”主题中,我们将深入探讨如何实现不同层次的用户访问权限。 首先,权限管理通常分为三个级别:用户、角色和资源。用户是最基本的单位,代表系统中的个人账户。角色是用户的一种...

    权限管理解决方案参考.pdf

    《权限管理解决方案》是用友咨询实施方法论的一部分,主要关注如何在企业信息系统中有效地进行权限管理和控制。本文将深入探讨该解决方案中的关键概念、架构和管理策略。 1. **基础原理** 权限管理的基础原理是...

    企业级开发的权限管理

    接下来,我们将根据提供的部分信息来深入探讨权限管理的核心概念、不同类型的权限以及如何构建一个高效且灵活的权限管理系统。 #### 权限类型概述 1. **对象权限**(A类权限):这类权限主要针对特定的对象或资源...

    数据重现:文件系统原理精解与数据恢复最佳实践.pdf

    根据提供的文件标题、描述以及部分上下文,我们可以深入探讨文件系统的基本原理以及数据恢复的最佳实践。虽然提供的部分内容并未包含实际的技术细节,但基于标题“数据重现:文件系统原理精解与数据恢复最佳实践”和...

    tp5权限管理系统,含数据库,权限分组,权限管理

    本文将围绕“tp5权限管理系统,含数据库,权限分组,权限管理”这一主题,深入探讨其核心概念、实现方式及实际操作步骤。 首先,权限管理系统的基石是数据库设计。在TP5中,通常会涉及三张核心表:用户(User)表,...

    web权限管理

    在这个主题中,我们将深入探讨Web权限管理的核心概念、实现机制以及相关的技术。 一、权限管理基础 1. 用户角色:在Web权限管理中,用户通常被分配到不同的角色,如管理员、普通用户或访客。每个角色具有特定的权限...

    授权到窗口按钮的权限管理.rar_c#权限管理_授权_授权管理_权限_权限管理

    本文将深入探讨C#中的权限管理系统,包括授权、授权管理以及权限控制的相关概念和实践方法。 首先,我们要理解“权限”这一核心概念。在软件系统中,权限通常指的是用户或角色对系统资源(如文件、功能、窗口按钮等...

    通用的权限管理,ssh项目中权限管理的一个小示例

    在IT行业中,权限管理是系统安全的关键组成部分,尤其是在企业级应用中。SSH(Spring、Struts、Hibernate)是一个常见的Java Web开发框架,用于构建高效、模块化的应用程序。在这个"通用的权限管理,ssh项目中权限...

    通用权限管理系统设计篇

    在IT行业中,权限管理系统是构建安全、高效应用的关键组成部分,特别是在企业级系统中。"通用权限管理系统设计篇"着重探讨了如何设计一个适用于多种场景、能够处理不同用户和角色权限的系统。在这个主题下,我们将...

    强者优化之权限管理

    在IT领域,权限管理是确保系统安全性和数据保护的关键环节。"强者优化之权限管理"这一主题涵盖了如何高效、安全地对系统中的用户权限进行配置和优化,以达到最佳的系统运行状态。权限管理涉及多个方面,包括用户身份...

    C# 权限管理,数据源为XML

    在IT领域,权限管理是系统安全的关键组成部分,尤其是在开发企业级应用时。C#作为.NET框架的主要编程语言,提供了丰富的工具和技术来实现这一目标。在这个“C# 权限管理,数据源为XML”的示例中,我们关注的是如何...

    DMSFrame通用权限管理系统源码

    总的来说,DMSFrame通用权限管理系统源码是一个完整的权限管理解决方案,它涉及了权限分配的多个层面,对于理解权限管理系统的设计和实现,以及提升开发者在企业级应用开发中的能力,都有着重要的价值。

    FastAPI+Vue3,RBAC权限管理,实现 菜单、路由、按钮、接口 权限控制;笔记ht-mini-rbac.zip

    在IT行业中,权限管理是构建安全、高效应用的关键部分,特别是在企业级系统中。本笔记主要探讨了如何利用FastAPI和Vue3框架实现基于角色的访问控制(Role-Based Access Control,简称RBAC)来管理菜单、路由、按钮...

    thinkphp权限管理系统.zip

    四、权限系统设计与实践 1. 菜单管理:首先,我们需要构建一个菜单系统,用于表示用户的可操作权限。菜单结构可以是树形的,通过父子关系表示层级。 2. 角色分配:根据业务需求,创建不同的角色并分配相应的菜单...

    通用权限管理

    虽然具体内容无法在此直接引用,但我们可以根据通用权限管理的常见实践来深入探讨这个主题。 1. **角色与权限**:在权限管理系统中,用户通过角色来获得权限。角色是一种预定义的权限集合,比如管理员、普通用户等...

Global site tag (gtag.js) - Google Analytics