`
Augustan
  • 浏览: 52113 次
  • 性别: Icon_minigender_1
  • 来自: 江蘇
社区版块
存档分类
最新评论

一个简易实用的web权限管理模块的应用与实现

    博客分类:
  • java
阅读更多

    本文介绍一个简易实用的web权限管理模块的应用与实现。

    先介绍数据模型和应用界面,后继对实现细节做选择性阐述。

    数据表关系如下:

   数据模型

 

      该图标明了登陆用户、角色、部门(机构)、用户组、角色和模块功能之间的关系。为方便起见,所有表都只保留必要字段。

      在本系统设计中,如下概念有着相对特殊的含义。

      一、用户(user): 系统的使用者。

      二、部门(org):体现了用户的行政关系,

      三、组(group) :是某相同职能的用户的集合,可以和用户一样与角色产生关联。设置组的目的是为了方便用户的角色分配,减少用户与角色的直接对应关系。用户的角色可以是其组角色和其直接分配的角色之合集。限于作者的时间和精力,组功能在该系统中没有具体的实现。
      四、角色(role):角色对应着某些功能(function)的集合,被分配一个角色意味着有权执行这些功能。角色表中的字段"functions"记录相关的功能id,id之间用逗号隔开。

      五、功能(function):系统的一个或者多个执行准入。

      那么如何表现“功能”以最终实现控制用户的每一个细微动作呢?假如不特定于某种架构,可以这么设计该表字段:

CREATE TABLE  `m2_function` (
  `FUNCTION_ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `NAME` varchar(50) NOT NULL,
  `FUNC_TREE_ID` int(10) unsigned NOT NULL,
  `RESOURCE` varchar(100) NOT NULL,
  `SUFFIX` varchar(50) NOT NULL,
  `DESCRIPTION` varchar(100) NOT NULL,
  `PARAMS` varchar(45) NOT NULL,
  PRIMARY KEY (`FUNCTION_ID`)
)  DEFAULT CHARSET=utf8;

    假定有三个web访问路径
  http://127.0.0.1:8080/app/sys/user.jsp?action=index&userid=1203 
  http://127.0.0.1:8080/app/sys/user.yuetong?action=add
  http://127.0.0.1:8080/app/sys/user.yuetong?action=update&userid=1203
     这三个访问点被人为的划分为两个功能准入(当然亦可以是一个或者三个),见下图     

   

     由此可知,“功能”是衡量用户准入的最小刻度。在用户访问某个地址的时候,我们可以通过解析URL对比他拥有的“功能”权限来实现权限管理。

     借助于某些架构或者设计思路,可以避免用户直接访问JSP页面,甚至全系统的访问地址都使用同一后缀,这种情况下可以省去SUFFIX字段。 本系统就是这种情况(JSP页面置于WEB-INF下,采用struts2架构)。

     六、功能模块树(function tree):功能的目录组织,起分类的作用。在为角色设定功能的时候,用户界面可以利用带选择框的js树。而这颗js树是后台的功能树表以及功能表的联合表现形式。功能模块树可以方便的与菜单树建立映射关系,限于作者的时间和精力,该系统并未实现菜单树。
    下面从实际应用入手做直观的介绍:
     用超级管理员帐号YT000登陆(该帐号拥有全部的权限,帐号信息应该预先写入数据库或者以配置文件方式放到类路径下):
     首先是机构管理部分,这里可以编辑某个公司或者单位的组织结构:

    

   然后进入用户管理部分,会有一个用户列表:


   可以编辑用户的属性,设置其所属机构:

 

 

   还可以为用户设定多个角色:

   接着,再看看角色的列表:


   可以为角色设定功能。该角色设定树的生成,在后继文章中会有介绍。

 

   最后,在系统资源部分,可以进行功能模块树的编辑(和机构树的编辑一样)

 

   点击编辑详细功能,可以为选中的结点设置具体功能:

 

 

      配置妥当以后,当我们以一个普通用户登录,执行某个操作的时候,如果没有权限,系统会做出提示。关于用户的权限验证,后继会有介绍。

 

     相关阐述请关注后继文章。

 

 

 

 

 

分享到:
评论
27 楼 xinguangduan 2008-12-25  
不错,正需要!哈哈
26 楼 whaosoft 2008-12-25  
怎么没用acegi啊
25 楼 nitianyi 2008-12-25  
支持一下!
24 楼 Augustan 2008-12-25  
ealpha 写道

aids198311 写道
spring security?我也想,为什么没有用spring security

无论什么东西,总归自己的好。
23 楼 Augustan 2008-12-25  
233
swen00 写道

设计实现花费了多少时间?

没有具体计算,工作之余搞的。
22 楼 ealpha 2008-12-25  
aids198311 写道
spring security?


我也想,为什么没有用spring security
21 楼 aids198311 2008-12-25  
spring security?
20 楼 swen00 2008-12-25  
设计实现花费了多少时间?

19 楼 ljx1619 2008-12-25  
很好,以后用到的时候再仔细看看
18 楼 kidd3166 2008-12-25  
结合了rbac的吧,不错的啊,顶
17 楼 crabboy 2008-12-25  
这是我看到比较完整的关于权限方面的文章了,不错。
16 楼 free_chenwei 2008-12-25  
很不错的东西,收藏了
15 楼 Augustan 2008-12-25  
Lucas Lee 写道
Augustan 写道
Lucas Lee 写道
有个问题:
角色跟功能权限的关系没有描述啊?
实体关系图里也没有,界面里也没提及?

有提及:
四、角色(role):角色对应着某些功能(function)的集合,被分配一个角色意味着有权执行这些功能。角色表中的字段"functions"记录相关的功能id,id之间用逗号隔开。
这种联系无法在图中用箭头直接表述出来。
图片中那棵带选择框的树,就是为某个角色分配相应的功能。


哦。
但是界面上没有维护角色和功能关系的截图吧?
你这种用逗号分隔的方式,不符合数据库范式。还是少用为好。比如未来我如果要查某个权限分配给哪些角色了,你这个就麻烦了。注意,按字符串匹配是麻烦的,比如有角色A有权限a1,a11,a111,我查a1权限,如果直接按like就会匹配三个。

    那棵选择框树,不就体现了角色和功能的关系么?在角色列表中,当点击某个角色的设置按钮(小钥匙图标)时,就会转到选择框树的页面。 该角色含有哪些功能,选择框前会打勾。当然也可以重新设置。
    以逗号隔开的方式存储主要是为了简化数据库设计,避免过多的表和表间关系,否则我们至少还要一个体现角色和功能之间关系的表。 理论正确虽然好,但也要见机行事。如果我并不常用权限来查角色,那这样也未尝不好。何况你讲的这个可以通过其他方式解决,比如在数据库端写一个分割字符窜的函数或者存储过程,化一条记录为多条,然后再查找就方便多了。而我目前使用的办法是利用hibernate的自定义用户类型,每个角色都有一个功能列表,反过来查还是比较容易的。
14 楼 LucasLee 2008-12-25  
Augustan 写道
Lucas Lee 写道
有个问题:
角色跟功能权限的关系没有描述啊?
实体关系图里也没有,界面里也没提及?

有提及:
四、角色(role):角色对应着某些功能(function)的集合,被分配一个角色意味着有权执行这些功能。角色表中的字段"functions"记录相关的功能id,id之间用逗号隔开。
这种联系无法在图中用箭头直接表述出来。
图片中那棵带选择框的树,就是为某个角色分配相应的功能。


哦。
但是界面上没有维护角色和功能关系的截图吧?
你这种用逗号分隔的方式,不符合数据库范式。还是少用为好。比如未来我如果要查某个权限分配给哪些角色了,你这个就麻烦了。注意,按字符串匹配是麻烦的,比如有角色A有权限a1,a11,a111,我查a1权限,如果直接按like就会匹配三个。
13 楼 Augustan 2008-12-25  
yuxiaoxu 写道
我想说明的是,用户的权限不能在后台只简单地看成对数据库操作的权限,还应该包括信息以及应用功能模块的使用.如果是门户网站,还应考虑对其他接入系统的接口支持,可能是不同厂商也可能是不同的技术包括非JAVA语言编写的应用.


这里用户的权限并不是狭义的“对数据库操作的权限”,本质上是对web访问点(可以理解为访问路径)的控制。完备的权限管理系统对于“资源”和“功能”的管控是分开的。前者可能细化到某些静态的文档、资料等信息的管理。
对其他接入系统的接口支持,我觉得归根到底也可以用解析web访问地址的方式来进行。
12 楼 Augustan 2008-12-25  
hanjs 写道
这个只是功能权限上,如果全面的话,最好也支持user与function直接关联。

因为有的时候,一个人与其他人都是同一个role,突然要给这个人多增加个菜单,要怎么办?如果新增一个角色,对于一个人还可以,如果是多个人呢而且是新增不同的菜单?这样管理起来很麻烦。

好的功能管理还应该提供复制、对换的功能



user与function直接关联并不难实现,增加一个FUNCTIONS字段即可。
这是个相对简易的权限管理模块,在文中已经说过,并没有实现菜单的管理。我觉得菜单结构与功能模块的结构应该是分开管理的,但是他们可以有映射关系。
11 楼 yuxiaoxu 2008-12-25  
我想说明的是,用户的权限不能在后台只简单地看成对数据库操作的权限,还应该包括信息以及应用功能模块的使用.如果是门户网站,还应考虑对其他接入系统的接口支持,可能是不同厂商也可能是不同的技术包括非JAVA语言编写的应用.
10 楼 yuxiaoxu 2008-12-25  
加油!期待可以看到更为出色的表现.
9 楼 yuxiaoxu 2008-12-25  
我大致看了下,界面是不错的.但我没有看到除了页面展示层之外的相关逻辑层的设计.
也就是规定了不同形色的人,他们的实际区分是什么,以及使用相应功能模块所具备的不同权限.另外,就是对数据的敏感把握,什么样的人看什么样的数据包括搜索出的结果针对权限方面的设计.
值得注意的是,数据的迁移\组织架构的嵌入.比如,发邮件通过类似组织结构选择人员可以自动填充其Email;又或者发短信,可以自动输入其手机号码.
8 楼 hanjs 2008-12-25  
这个只是功能权限上,如果全面的话,最好也支持user与function直接关联。

因为有的时候,一个人与其他人都是同一个role,突然要给这个人多增加个菜单,要怎么办?如果新增一个角色,对于一个人还可以,如果是多个人呢而且是新增不同的菜单?这样管理起来很麻烦。

好的功能管理还应该提供复制、对换的功能

相关推荐

    简易的Web无线点餐后台管理系统

    本文将深入探讨一个简易的Web无线点餐后台管理系统的设计与实现,包括其核心功能模块:餐桌管理、菜系管理、菜品管理和用户管理。 一、餐桌管理 餐桌管理是后台系统的基础,它涉及到对餐厅内所有餐桌信息的维护。在...

    如何使用AngularJs打造权限管理系统【简易型】

    这篇文章详细介绍了如何使用AngularJS构建一个简易型的权限管理系统。我们将通过多个知识点来展开讨论这一主题。 首先,要了解什么是权限管理系统,它是指在软件系统中用于管理用户权限、角色、权限分配等功能的...

    简易个人WEB服务器

    "简易个人WEB服务器"软件解决了这个问题,它提供了一种简单易用的方式,让普通用户也能轻松创建并管理自己的Web服务器,从而实现资源的共享。 Web服务器是一种运行在计算机上,能够响应HTTP(超文本传输协议)请求...

    java开发简易人员管理系统

    在本项目中,"java开发简易人员管理系统" 是一个基于J2EE技术栈构建的应用,主要目的是实现对人员信息的有效管理和操作。系统采用MySQL作为后端数据库存储数据,提供了基本的增删查改功能,虽然规模不大,但包含了...

    简易的学生管理系统ASP.NET

    是一个简易的ASP.NET系统,主要实现登录功能和两个模块信息的增删改查。 二、功能介绍 1、管理员信息管理:添加、修改、删除、查找用户信息,分页,添加,修改用户权限; 2、学生信息管理:添加、修改、删除、查找...

    基于WEB的商场管理系统的设计与实现

    本文通过对现代企业信息化管理进行分析,根据商场信息化管理的实际需求,设计并实现了一个基于WEB技术的商场管理系统。该系统由七个功能模块组成,即:商品信息管理模块、客户信息管理模块、商品进货管理模块、商品...

    ASP基于WEB的商场管理系统的设计与实现(源代码+参考文献).zip

    通过对现代企业信息化管理进行分析,根据商场信息化管理的实际需求,设计并实现了一个基于WEB技术的商场管理系统。该系统由七个功能模块组成,即:商品信息管理模块、客户信息管理模块、商品进货管理模块、商品销售...

    MVC5.0+EasyUI+SqlServer简易权限管理系统

    综上所述,"MVC5.0+EasyUI+SqlServer简易权限管理系统"是一个结合了MVC5的分层架构、EasyUI的前端展示以及SqlServer2008数据存储的Web应用实例,实现了对数据的基本操作,同时利用Ztree控件实现权限的层级管理。...

    ssm权限管理系统.zip

    SSM权限管理系统是一个基于Spring、SpringMVC和MyBatis三大主流Java开发框架构建的简易权限管理系统。这个系统旨在提供一套完整的权限管理解决方案,包括权限树的构建、权限的增删改查、日志管理和角色管理等核心...

    简易网上书店系统设计与实现

    《简易网上书店系统设计与实现》是一篇详细阐述基于B/S架构的网上书店系统开发的论文,该系统采用ASP编程语言和ACCESS数据库进行构建。网上书店系统作为一种商业信息系统,其核心在于提供便捷的网络购物体验,使用户...

    springboot实现的简易超市管理系统

    本文将深入探讨一个使用SpringBoot框架实现的简易超市管理系统,它结合了现代Web开发技术,旨在提高超市的运营效率和管理水平。 SpringBoot是Spring框架的一个重要组成部分,它简化了Spring的应用配置,提供了“开...

    JavaWeb+MySQL的简易商品超市管理系统.zip

    本文将深入探讨一个使用JavaWeb技术和MySQL数据库构建的简易商品超市管理系统,帮助读者理解其核心原理和实现过程。 首先,我们来看系统的整体架构。这个系统基于JavaWeb技术,采用Servlet作为控制器,JSP作为视图...

    简易JSP信息管理系统

    在开发【简易JSP信息管理系统】时,开发者需具备Java基础、数据库知识以及Web开发经验,通过整合各种技术手段,实现一个功能完善、易用的信息管理平台。在实际使用过程中,可根据需求进行定制和扩展,以满足不同场景...

    基于Web的高校学生选课系统设计与实现.zip

    总结,基于Web的高校学生选课系统设计与实现是一项涉及多方面技术的工作,需要综合运用Web开发、数据库管理、网络通信、安全性等多个领域的知识。通过科学的需求分析、合理的系统架构、高效的技术实现,可以构建出...

    简易web服务器博客源码

    【简易Web服务器博客源码详解】 在Web开发领域,创建一个简易的Web服务器博客源码是初学者和开发者常做的实践项目。这个项目的核心目标是实现一个基础的HTTP服务器,能够处理请求并返回HTML页面,展示个人或团队的...

    简易的留言板模块系统

    【简易的留言板模块系统】是一种基础的Web应用,主要用于提供用户与系统之间的互动交流平台。在这样的系统中,用户可以方便地留下他们的信息、意见或建议,而管理员则可以通过后台管理界面来查看、回复和管理这些...

    简易crm客户关系管理系统ssh

    【简易CRM客户关系管理系统SSH】是一个基于SSH框架开发的轻量级应用,旨在帮助咨询人员高效管理和跟踪与客户的互动过程。SSH(Struts2、Spring、Hibernate)是Java Web开发中常用的三大开源框架,它们各自负责不同的...

    使用mvc编写的一个简易的购物管理系统

    在这个简易的购物管理系统中,我们利用了Java EE平台来实现MVC模式,以实现高效、模块化的开发。 1. **模型(Model)**: 模型是应用程序的核心,负责处理业务逻辑和数据管理。在这个购物管理系统中,模型可能包含...

    SSH简易部门管理

    总的来说,SSH简易部门管理项目是一个典型的Java Web应用实例,展示了SSH框架在实际开发中的应用,同时也为学习者提供了一个良好的学习模板,帮助他们理解和掌握企业级应用的开发流程。通过这个项目,开发者可以提升...

    基于Java web的酒店管理系统(源码+数据库).zip

    【基于Java Web的酒店管理系统】是一个综合性的应用项目,它主要使用Java编程语言以及Web技术来构建一套完整的后台管理系统,用于高效地管理酒店的各项业务。这个系统通常包括用户登录、客房管理、预订管理、入住退...

Global site tag (gtag.js) - Google Analytics