-------------------------------------------- 总大纲 ---------------------------------
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
分享到:
相关推荐
本文将深入探讨“角色权限管理设计方案”,基于提供的描述和标签,我们将详细阐述这一主题,以便理解如何有效地设计和实现一个权限控制系统。 首先,我们要明白权限管理的核心目标是确保用户只能访问他们被授权的...
权限管理是信息系统中至关重要的一个环节,主要目的是确保不同职责的人员只能访问和操作与其工作相关的功能和资源,从而保障系统的安全性和数据的完整性。在本文档中,我们将深入探讨几种常见的权限分配方案及其逻辑...
根据提供的文件信息,我们可以深入探讨如何使用Java来开发一个企业级权限管理系统。权限管理系统是现代企业软件架构中的关键组成部分,它帮助企业确保数据安全并有效控制用户访问资源的能力。接下来,我们将详细阐述...
DB2数据库管理最佳实践是IBM公司推出的一款关系型数据库管理系统,广泛应用于企业级的数据存储、管理和分析。这份PDF文档很可能是对DB2数据库在实际操作中的优化策略、配置技巧和故障排查方法的深入探讨,旨在帮助...
在这个“ASP.NET 2.0三级权限管理”主题中,我们将深入探讨如何实现不同层次的用户访问权限。 首先,权限管理通常分为三个级别:用户、角色和资源。用户是最基本的单位,代表系统中的个人账户。角色是用户的一种...
《权限管理解决方案》是用友咨询实施方法论的一部分,主要关注如何在企业信息系统中有效地进行权限管理和控制。本文将深入探讨该解决方案中的关键概念、架构和管理策略。 1. **基础原理** 权限管理的基础原理是...
接下来,我们将根据提供的部分信息来深入探讨权限管理的核心概念、不同类型的权限以及如何构建一个高效且灵活的权限管理系统。 #### 权限类型概述 1. **对象权限**(A类权限):这类权限主要针对特定的对象或资源...
根据提供的文件标题、描述以及部分上下文,我们可以深入探讨文件系统的基本原理以及数据恢复的最佳实践。虽然提供的部分内容并未包含实际的技术细节,但基于标题“数据重现:文件系统原理精解与数据恢复最佳实践”和...
本文将围绕“tp5权限管理系统,含数据库,权限分组,权限管理”这一主题,深入探讨其核心概念、实现方式及实际操作步骤。 首先,权限管理系统的基石是数据库设计。在TP5中,通常会涉及三张核心表:用户(User)表,...
在这个主题中,我们将深入探讨Web权限管理的核心概念、实现机制以及相关的技术。 一、权限管理基础 1. 用户角色:在Web权限管理中,用户通常被分配到不同的角色,如管理员、普通用户或访客。每个角色具有特定的权限...
本文将深入探讨C#中的权限管理系统,包括授权、授权管理以及权限控制的相关概念和实践方法。 首先,我们要理解“权限”这一核心概念。在软件系统中,权限通常指的是用户或角色对系统资源(如文件、功能、窗口按钮等...
在IT行业中,权限管理是系统安全的关键组成部分,尤其是在企业级应用中。SSH(Spring、Struts、Hibernate)是一个常见的Java Web开发框架,用于构建高效、模块化的应用程序。在这个"通用的权限管理,ssh项目中权限...
在IT行业中,权限管理系统是构建安全、高效应用的关键组成部分,特别是在企业级系统中。"通用权限管理系统设计篇"着重探讨了如何设计一个适用于多种场景、能够处理不同用户和角色权限的系统。在这个主题下,我们将...
在IT领域,权限管理是确保系统安全性和数据保护的关键环节。"强者优化之权限管理"这一主题涵盖了如何高效、安全地对系统中的用户权限进行配置和优化,以达到最佳的系统运行状态。权限管理涉及多个方面,包括用户身份...
在IT领域,权限管理是系统安全的关键组成部分,尤其是在开发企业级应用时。C#作为.NET框架的主要编程语言,提供了丰富的工具和技术来实现这一目标。在这个“C# 权限管理,数据源为XML”的示例中,我们关注的是如何...
总的来说,DMSFrame通用权限管理系统源码是一个完整的权限管理解决方案,它涉及了权限分配的多个层面,对于理解权限管理系统的设计和实现,以及提升开发者在企业级应用开发中的能力,都有着重要的价值。
在IT行业中,权限管理是构建安全、高效应用的关键部分,特别是在企业级系统中。本笔记主要探讨了如何利用FastAPI和Vue3框架实现基于角色的访问控制(Role-Based Access Control,简称RBAC)来管理菜单、路由、按钮...
四、权限系统设计与实践 1. 菜单管理:首先,我们需要构建一个菜单系统,用于表示用户的可操作权限。菜单结构可以是树形的,通过父子关系表示层级。 2. 角色分配:根据业务需求,创建不同的角色并分配相应的菜单...
虽然具体内容无法在此直接引用,但我们可以根据通用权限管理的常见实践来深入探讨这个主题。 1. **角色与权限**:在权限管理系统中,用户通过角色来获得权限。角色是一种预定义的权限集合,比如管理员、普通用户等...