这是个老话题了,随便GOOGLE或者百度都可以找到一大堆。现在的权限控制基本上都是基于RBAC的,在这里我是基于RBAC与Struts2.*,可能还有些没有完善的地方,提出来与大家讨论一下。
我们知道,权限一般分为操作权限跟数据权限,这里讨论的只是操作权限。其实与其说是讨论,倒不如说是讨教,因为我这边已经有几个方案(主要是持久化这部分),但是一直拿捏不定。
第一种方案:
1.跟大多数的设计一样,分为用户、角色、资源、权限、模块。其中:资源代表的是Struts 2.*中的Action类,权限则是每个Action中的操作方法。例如,PassportAction有这么几个方法:login、logout、regist。PassportAction就是一个资源,而login、logout、regist则代表一个个权限。同时,权限还有一个属性表示是否为默认权限,以减少权限的配置。
2.模块则是与页面相关的资源,比方说系统有一个销售管理的模块,在程序中可能是webapp/${工程名}/application/sale/SaleManage.jsp的页面。在这里,我将模块设计成树形结构,也就是由上下级关系。用户登录后,系统将根据用户持有的模块信息,将所有的模块显示出来。
3.角色则是一组权限跟一组模块的组合。
4.用户则可以同时持有多组角色。
然后是权限验证,因为采用的Struts2.*,可以使用拦截器的方式来实现。大概的思路是这样的,拦截器可以很容易就获取每次请求调用的Action信息,可以根据这些信息从数据库找到相应的资源(当然你也可以做Application级别的缓存)和方法信息。这样就可以得到一个判断结果。至于模块的设计是为了在用户登录系统时可以直接输出模块信息(模块树)。
然后是持久层的设计,在这种方案中我采取的是数据库来保存数据。分别为T_Resource、T_Privilege、T_Module、T_Role、T_Role_Privilege_Link、T_Role_Module_Link、T_User_Role_Link。
Java类的设计就不说,相信大家能做得比我更好。
第二种方案:
设计思想跟第一种方案差不多。只是Resource不再独立成一个类,Privilege则变成一个Url,其中包含两个属性:NameSpace跟ActionName。同时,Privilege不在独立存储,即根据每次请求的Action与method组合而成。至于Role,用xml方式来存储。一种角色用一个Xml存储,xml文件名则是角色名称。
比方说Sale.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Role PUBLIC "Role" "role.dtd" >
<Role>
<PrivilegeSet>
<Privilege>/login</Privilege>
<Privilege></Privilege>
</PrivilegeSet>
<ModuleSet>
<Module></Module>
</ModuleSet>
</Role>
这样我就可以再系统启动的时候便解析这些角色配置文件,然后将角色实例缓存下来(当然,缓存下来的可不仅仅只是角色,还有权限跟模块),然后以角色名(如Sale)为key查找,权限、模块的缓存也相似。
这种方式的一个好处就是,配置完Struts以后权限也配置完成,权限部分不容易出错,而且容易备份,但是一般角色超过某个数量的时候,维护起来相当麻烦,而且要保证Struts的配置文件信息不能轻易变动(虽然在生产型系统中变动的可能性不会很大),还有个缺点就是不方便以可视化的方式进行管理。
分享到:
相关推荐
【老生谈算法】matlab实现跳频通信系统设计 跳频通信系统是无线通信领域中一种抗干扰能力强、安全性高的通信方式。该系统的工作原理是利用伪随机变化码来控制信号载波频率的随机跳变,使得通信过程中载波频率按照...
【达摩老生出品,必属精品,亲测校正,质量保证】 资源名:MATLAB GUI实用源码1:简单的文本框数据传递 资源类型:matlab项目全套源码 源码说明: 全部项目源码都是经过测试校正后百分百成功运行的,如果您下载后不...
【车牌识别MATLAB实现】是计算机视觉和模式识别技术在...总的来说,基于MATLAB的车牌识别设计涵盖了图像处理、模式识别和计算机视觉等多个领域的理论和技术,是智能交通系统中的关键技术,具有广阔的研究和应用前景。
此外,活动背景指出,随着学年的更迭,新生和老生的需求变化,跳蚤市场能够解决物品过剩与需求的问题,提供一个互动交流的平台。活动旨在培养学生的节约意识,同时也为校园文化增添活力。通过这样的活动,学生可以...
### 基于遗传算法的机器人路径规划MATLAB实现 #### 概述 本文档介绍了一个结合了Dijkstra算法与遗传算法的机器人路径规划方法,并提供了MATLAB源代码。该方法首先利用Dijkstra算法找到一个从起点到终点的可行路径...
1. **板书规范书写成绩考核表**:评估教师在黑板上的书写规范,包括标准板面设计、字体格式、内容贴合度和色彩运用,以提高教学质量。 2. **少儿歌曲表演课成绩考核表**:衡量教师在教授儿童歌曲时的表演技巧和教学...
【达摩老生出品,必属精品,亲测校正,质量保证】 资源名:维也纳大学的LTE链路级仿真平台,实现了LTE两路及仿真的整过程_matlab 资源类型:matlab项目全套源码 源码说明: 全部项目源码都是经过测试校正后百分百成功...
学生公寓管理系统通常采用B/S(Browser/Server)架构,即浏览器/服务器模式。用户通过浏览器进行操作,服务器端负责处理请求、存储数据和响应信息。这种架构使得系统具有良好的跨平台性和易用性,无需在客户端安装...
【老生谈算法】matlab实现基于粒子群算法的PID控制器优化设计主要涉及以下几个关键知识点: 1. **PID控制器**:PID(比例-积分-微分)控制器是一种广泛应用的反馈控制算法,通过调整三个参数Kp(比例系数)、Ki...
2. **老生回访**:每年至少一次,交流幼儿表现。 3. **长期缺席**:及时上门了解幼儿情况。 4. **师德规范**:家访时体现教师的专业形象。 【家长委员会制度】 家长委员会是家长参与幼儿园管理的平台: 1. **成员...
通过对语音信号的分帧处理、噪声协方差估计以及卡尔曼滤波器的设计与实现,能够有效提高语音信号的质量。通过MATLAB平台实现卡尔曼滤波不仅便于理解和调试,也为进一步的研究提供了坚实的基础。
【VB毕业设计:毕业生管理系统】 本项目是一个基于Visual Basic(VB)开发的毕业生管理系统,它涵盖了学生信息管理、成绩管理、就业信息管理等多个模块,旨在为高校提供一个方便、高效的学生信息处理平台。通过这个...
4. **活动地点**:包括新生报到处(B号楼门口、B215、H楼建筑大厅、宿舍)。 5. **策划与执行单位**:信息工程系团委、青年志愿者协会,合作赞助商。 6. **参与人员**:信息工程系青年志愿者。 7. **活动对象**:...
【老生谈算法】单纯形法Matlab程序 在优化问题中,单纯形法是一种解决线性规划问题的常用算法。线性规划是寻找线性函数的最大值或最小值,同时满足一系列线性等式和不等式约束。单纯形法通过迭代方式,逐步将非基...
【老生谈算法】基于matlab的fir滤波器设计主要涵盖了数字信号处理中的关键步骤,包括信号的读取、频谱分析、噪声信号的构建、滤波器的设计与应用。以下将详细阐述这些知识点: 1. **信号的读取**: 在MATLAB中,`...
【老生谈算法】matlab实现基于蚁群算法的机器人路径规划 在本文档中,我们探讨了如何使用MATLAB实现一种基于蚁群算法(Ant Colony Optimization, ACO)的机器人路径规划方法。蚁群算法是一种模拟自然界中蚂蚁寻找...
【老生谈算法】matlab实现人脸识别系统设计与仿真是一个深入探讨如何在MATLAB环境中构建和模拟人脸识别系统的文档。该文档旨在详细解释算法的原理,并提供了MATLAB源代码供学习者参考。以下是对该主题的详细阐述: ...
7. **归一化均方误差(Normalized Mean Square Error, NMSE)**:NMSE是评估估计值与真实值之间偏差的标准度量,通过`pe(i)=sum1./(rho(i).^2)/Nt/K`计算得出。 8. **仿真**:整个MATLAB程序是为了进行多次仿真以...
##### 例2:多元函数优化 该例子通过遗传算法求解函数\(f(x,y) = y\sin(2\pi x) + x\cos(2\pi y)\)在区间\([-2,2]\)内的最小值。 1. **设置参数**:个体数目\(NIND=40\);最大遗传代数\(MAXGEN=50\);变量的二进制...
《老生谈算法:MATLAB实现基于蚁群算法的二维路径规划》 路径规划算法是计算机科学和机器人学中的一个重要领域,特别是在有障碍物的环境中寻找最优路径。本文将深入探讨一种利用MATLAB实现的二维路径规划算法——...