`

数据权限管理方案探讨

阅读更多

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”进行比较。

分享到:
评论

相关推荐

    通用数据权限管理系统设计

    本文将深入探讨一个集成功能权限和数据权限的通用数据权限管理系统的设计思路及其核心组件。 #### 二、基础知识概述 **功能权限**:是指用户可以执行哪些具体的操作,例如创建订单、修改订单等。 **数据权限**:...

    权限管理方案概述.doc

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

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

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

    角色权限管理设计方案

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

    多用户权限与数据管理的一种方法

    本文将深入探讨一种针对多用户环境下的权限与数据管理的方法,旨在确保数据的安全性、完整性和用户访问的有效控制。 ### 多用户权限管理 在多用户环境中,不同的用户可能拥有不同的角色,比如学生、教师、管理员等...

    通用权限管理系统

    通用权限管理系统是一种高效、灵活的解决方案,旨在为多个后台系统提供统一的用户权限管理。在信息化社会中,权限管理成为企业、组织甚至个人数据安全的重要保障,而通用权限管理系统则扮演着核心角色。本文将深入...

    关于权限设计的探讨.pdf

    其中,角色-用户对应表是权限管理的核心,设计思路有很多,可以根据个人情况选择合适的方法。 在权限设计中,我们还需要考虑到权限的分类,例如数据存取权限、功能权限和关键数据表字段权限等。同时,我们也需要...

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

    在这个“C# 权限管理,数据源为XML”的示例中,我们关注的是如何利用XML文件作为存储权限数据的媒介。下面将详细探讨相关知识点: 首先,XML(eXtensible Markup Language)是一种用于存储和交换结构化数据的标记...

    信用管理系统 权限管理

    本文将深入探讨“信用管理系统”的权限管理及其重要性,以及如何通过数据库调用来实现用户权限的定制。 权限管理是信用管理系统的基础功能之一,它涉及到系统内不同用户角色的权限设定、分配和控制。权限管理的目标...

    权限管理 EasyUI

    EasyUI 内置 AJAX 支持,可以通过 $.ajax 或 $.post 等方法轻松地发送请求,获取或更新数据,从而实现动态权限管理界面。 5. **数据库设计**: 数据库文件可能包含以下表:用户表(User)、角色表(Role)、权限表...

    数据权限设计,集成前端页面,后台数据结构

    数据权限设计涉及用户对数据的访问、修改和管理能力,确保数据的安全性,同时提供个性化的用户体验。这里我们将深入探讨这个主题,并结合前端页面集成和后台数据结构来阐述其重要性和实施方法。 首先,数据权限设计...

    BI数据权限解决方案参考.pdf

    数据权限管理在BI(商业智能)系统中是至关重要的,特别是在基于Microsoft SQL Server架构的BI环境中,例如Integration Services、Analysis Services和Reporting Services。虽然Integration Services和Analysis ...

    用户管理和权限管理

    用户管理和权限管理是信息化系统中不可或缺的组成部分,它们确保了系统的安全性和数据的保护,同时提供了灵活的角色分配和访问控制机制。在这个文档中,我们详细探讨了这两个关键领域。 首先,用户管理涉及到对系统...

    动态权限管理源代码+数据库

    这个压缩包包含的"动态权限管理源代码+数据库"提供了一种解决方案,利用Linq to SQL技术和C#编程语言来实现这一功能。下面我们将深入探讨这些技术以及动态权限管理的相关知识点。 首先,Linq to SQL是.NET ...

    权限管理设计方案.doc

    在本文中,我们将深入探讨一种权限管理设计方案,该方案旨在实现高度可扩展性和灵活性,以满足各种业务需求。 首先,我们要明确权限管理中的三个核心概念:用户(User)、角色(Role)和权限(Permission)。用户是系统的...

    OA系统权限管理设计方案

    同时,还探讨了通过职位、项目、角色以及直接指定等方式进行权限分配的具体方法,并讨论了用户和权限管理的相关内容。最后,给出了实现这一设计方案所需的物理数据模型。通过遵循这些设计原则和方法,可以有效地实现...

    通信权限管理系统详细说明三层架构

    通信权限管理系统采用的数据设计方法包括静态数据和动态数据的管理,以及数据表之间的关系设计。 #### 静态数据 静态数据是指系统初始化时设定的基础数据,例如初始超级管理员账户。在通信权限管理系统中,静态...

    权限管理及数据库设计

    权限管理涉及到用户角色、操作权限、访问控制等方面,而数据库设计则关乎数据的存储、查询效率以及系统的扩展性。下面将深入探讨这两个重要知识点。 首先,权限管理是确保系统安全性和数据隐私的关键。它通常基于...

    用户权限管理设计方案

    这个设计方案主要关注如何有效地设计和实施用户权限系统,确保每个用户只能访问他们被授权的数据和功能,从而保护系统的完整性和数据的安全性。下面我们将深入探讨这个话题。 首先,权限管理的核心在于用户角色。...

    电信设备-一种大型企业信息系统权限数据管理比对方法.zip

    本文将深入探讨一种适用于大型企业的信息系统权限数据管理比对方法,旨在提高管理效率,降低安全风险。 标题中的“电信设备”可能指的是该大型企业中涉及到的特定业务场景,即电信行业的信息管理系统。在这个领域,...

Global site tag (gtag.js) - Google Analytics