权限系统(2)--operation
权限控制可以看作一个filter模式的应用, 这也符合AOP思想的应用条件。在一个简化的图象中,我们只需要将一个判别函数 isAllowed(subject, operation, resource)插入到所有安全敏感的函数调用之前就可以了。虽然概念上很完美,具体实现的时候仍然有一些细节上的问题。基本的困难在于很难在最细的粒度上指定权限控制规则(连续的?动态的?可扩展的?),因而我们只能在一些关键处指定权限规则,或者设置一些整体性的权限策略,然后通过特定的推理来推导出细粒度的权限规则,这就引出结构的问题。我们需要能够对权限控制策略进行有效的描述(控制策略的结构),并且决定如何与程序结构相结合。subject, operation和resource为了支持推理,都可能需要分化出复杂的结构,而不再是简单的原子性的概念。而在与程序结构结合这一方面,虽然AOP使得我们可以扩展任何函数,但这种扩展需要依赖于cutpoint处所能得到的信息,因而权限控制的有效实施也非常依赖于功能函数本身良好的设计。有的时候因为需要对结构有过于明确的假定,权限控制的实现不得不牺牲一定的通用性。
下面我们将分别讨论一下operation, subject和resource的结构分解的问题。首先是operation。
说到推理结构,让人最先想起的就是决策树,树形结构,在面向对象语言中可以对应于继承。金字塔式的树形结构也正是在现实世界中我们应用最多的控制结构。通过层层分解,operation的结构可以组织为一棵树,
应用程序 ==> 各个子系统 ==> 每个子系统的功能模块 ==> 子功能模块
==> 每个模块的功能点(具有明确的业务含义) ==> 每个功能点对应的访问函数(程序实现中的结构)
一个常见的需求是根据权限配置决定系统菜单树的显示,一般控制用户只能看到自己有权操作的功能模块和功能按钮。这种需求的解决方法是非常直接的。首先,在后台建立子系统到功能模块,功能模块到功能点以及功能点到实现函数之间的映射表(如果程序组织具有严格规范,这甚至可以通过自动搜集得到)。然后,在权限配置时建立用户与功能点之间的关联。此时,通过一个视图,我们就可以搜集到用户对哪些功能模块具有访问权限的信息。
为了控制菜单树的显示,witrix平台中的SiteMap采用如下策略:
1. 如果用户对某个子功能具有操作权限,则所有父菜单项都缺省可用
2. 如果用户对某个功能具有操作权限,并且标记为cascade,则所有子菜单项都自动缺省可用
3. 如果明确指定功能不可用,则该菜单及子菜单都强制不可用
4. 如果明确指定功能对所有人可用,则不验证权限,所有子菜单自动缺省可用
4. 强制设定覆盖缺省值
5. 不可用的菜单缺省不可见
6. 明确标记为可见的菜单即使不可用也可见
7. 父菜单可见子菜单才可见
我们通过预计算来综合考虑这些相互影响的控制策略。尽量将推导运算预先完成也是解决性能问题的不二法门。
在witrix平台中,每一次网络访问的url都符合jsplet框架所要求的对象调用格式,需要指定objectName和objectEvent参数,这就对应于功能点的访问函数。访问控制点集中在objectManager并且访问格式是标准的。使用Spring等AOP方式实现细粒度访问控制,困难似乎在于不容易引入外部配置信息(例如功能点信息等),而且控制点所对应的对象函数格式也不统一,因而多数需要在细粒度上一一指定。
分享到:
相关推荐
总之,基于角色的用户权限系统设计是现代企业信息系统中不可或缺的一部分,它有效地实现了权限管理和安全性控制。通过对角色、用户和权限的合理配置,可以构建出高效且安全的业务操作环境。在实际应用中,开发者需要...
权限系统设计是软件开发中的关键组成部分,主要用于控制不同用户对系统资源的访问和操作。本文主要探讨基于用户、角色、权限的设计思路,并提供一种实现方案。 首先,理解基本概念: 1. **权限**:权限定义了用户...
通用权限系统设计的难点在于如何满足不同系统对权限需求的多样性,同时又保持设计的灵活性和扩展性。 设计目标包括创建一个灵活、通用且方便的权限管理系统。系统中的资源分为静态资源和动态资源两类。静态资源主要...
权限系统设计思路 权限系统是一个非常重要的安全机制,在现代企业中扮演着至关重要的角色。权限系统的设计主要是为了限制用户的访问范围,防止未经授权的访问和操作。下面是权限系统设计思路的详细介绍: 一、权限...
通用权限系统设计旨在确保不同职责的用户在操作系统时拥有适当的操作权限,提高管理效率并确保系统安全性。在大型企业业务系统中,权限管理是至关重要的,因为它允许管理员批量分配权限,避免了为每个员工单独设置...
权限系统的核心由以下三部分构成:1.创造权限,2.分配权限,3.使用权限,然后,系统各部分的主要参与者对照如下:1.创造权限 - Creator创造,2.分配权限 - Administrator 分配,3.使用权限 - User:
权限系统设计是软件开发中一个关键的组成部分,用于确保用户只能访问他们被授权的数据和功能。以下是基于给定文件内容的详细阐述: 1. **基于角色的访问控制(RBAC - Role-Based Access Control)** 这是最常见的...
后台权限系统设计是软件开发中的重要组成部分,尤其在企业级应用和管理信息系统中起到关键作用。权限系统的主要目标是确保用户只能访问他们被授权的操作和数据,从而保护系统的安全性和完整性。以下是对后台权限系统...
【权限管理系统设计方案】是关于如何构建一个有效管理用户权限的系统的详细文档。权限设计的核心在于理解用户、组、角色和权限这四个基本概念及其相互关系。 1. **权限设计概念** - **权限资源**:权限资源是系统...
本项目是基于SpringBoot和Vue3的renren-security权限系统设计源码,包含511个文件,其中主要包含253个java源代码文件,49个vue前端文件,33个svg图片文件等。系统采用了SpringBoot、MyBatis-Plus、Shiro、Vue3、...
#### 系统设计原则 - **安全性**:确保系统的安全性是首要考虑的因素,需要采取多种措施防止未授权访问。 - **灵活性**:系统应能够适应组织结构的变化,支持动态调整部门和角色。 - **可扩展性**:随着企业规模的...
领域驱动设计(Domain-Driven Design,简称DDD)是一种软件开发方法,强调以业务领域为中心进行系统设计,将复杂的业务逻辑转化为清晰的模型。在“基于DDD领域驱动设计通用后台权限系统”中,我们首先需要理解DDD的...
- **设计目标**:权限系统旨在对应用系统的所有资源实施控制,涵盖功能菜单、界面按钮等,以满足不同用户需求。设计应具备通用性,以便在多种环境和开发语言中复用。 - **运行环境**:支持Windows和Linux操作...
2. **权限系统的可扩展性**: - 系统的权限管理模块应具备高度可扩展性,能够轻松集成到任何需要权限控制的系统中,就像一个可重用的组件。这样避免了在每次开发新系统时都需要重复设计权限管理功能。 3. **功能...
Java 权限管理系统数据库设计 ...权限管理系统数据库设计是指在 Java 平台下设计和实现的权限管理系统的数据库结构和设计思路,包括数据库表的设计、字段的设计、权限的设计、角色设计、用户设计等方面的内容。