`

java用户角色权限设计(转载)

 
阅读更多

转自:http://www.cnblogs.com/a7345678/archive/2008/09/25/1298838.html

 

实现业务系统中的用户权限管理

 B/S系统中的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器检测实现,而B/S中,浏览器是每一台计算机都已具备的,如果不建立一个完整的权限检测,那么一个“非法用户”很可能就能通过浏览器轻易访问到B/S系统中的所有功能。因此B/S业务系统都需要有一个或多个权限系统来实现访问权限检测,让经过授权的用户可以正常合法的使用已授权功能,而对那些未经授权的“非法用户”将会将他们彻底的“拒之门外”。下面就让我们一起了解一下如何设计可以满足大部分B/S系统中对用户功能权限控制的权限系统。

 

需求陈述

  • 不同职责的人员,对于系统操作的权限应该是不同的。优秀的业务系统,这是最基本的功能。

     

  • 可以对“组”进行权限分配。对于一个大企业的业务系统来说,如果要求管理员为其下员工逐一分配系统操作权限的话,是件耗时且不够方便的事情。所以,系统中就提出了对“组”进行操作的概念,将权限一致的人员编入同一组,然后对该组进行权限分配。

     

  • 权限管理系统应该是可扩展的。它应该可以加入到任何带有权限管理功能的系统中。就像是组件一样的可以被不断的重用,而不是每开发一套管理系统,就要针对权限管理部分进行重新开发。

     

  • 满足业务系统中的功能权限。传统业务系统中,存在着两种权限管理,其一是功能权限的管理,而另外一种则是资源权限的管理,在不同系统之间,功能权限是可以重用的,而资源权限则不能。

关于设计

  借助NoahWeb的动作编程理念,在设计阶段,系统设计人员无须考虑程序结构的设计,而是从程序流程以及数据库结构开始入手。为了实现需求,数据库的设计可谓及其重要,无论是“组”操作的概念,还是整套权限管理系统的重用性,都在于数据库的设计。

我们先来分析一下数据库结构:

  首先,action表(以下简称为“权限表”),gorupmanager表(以下简称为“管理组表”),以及master表(以下简称为“人员表”),是三张实体表,它们依次记录着“权限”的信息,“管理组”的信息和“人员”的信息。如下图:

  这三个表之间的关系是多对多的,一个权限可能同时属于多个管理组,一个管理组中也可能同时包含多个权限。同样的道理,一个人员可能同时属于多个管理组,而一个管理组中也可能同时包含多个人员。如下图:

  由于这三张表之间存在着多对多的关系,那么它们之间的交互,最好使用另外两张表来完成。而这两张表起着映射的作用,分别是“actiongroup”表(以下简称“权限映射表”)和“mastergroup”表(以下简称“人员映射表”),前者映射了权限表与管理组表之间的交互。后者映射了人员表与管理组表之间的交互。如下图:

  另外,还需要一张表来控制系统运行时左侧菜单中的权限分栏,也就是“权限分栏表”,如下图:

  根据上面的分析,我们进行数据库结构设计,如下图:

  点击这里查看权限管理系统数据表字段设计

 

  为了能够进行良好的分析,我们将数据库结构图拆分开来,三张实体表的作用已经很清晰,现在我们来看一下两张映射表的作用。

一 权限映射表 如下图:

  首先,我们来了解一下权限映射表管理组表以及权限表之间的字段关联。

  看图中的红圈,先看gorupid字段相关联,这种关联方式在实际数据库中的表现如下图:

  如图中所示,管理组表中“超级管理员”的groupid为1,那么权限映射表中groupid为1的权限也就是“超级管理员”所拥有的权限。

  使用groupid字段关联,是为了查到一个管理组能够执行的权限有哪些。但这些权限的详细信息却是action字段关联所查询到的。

  action字段相关联在数据库中的表现如下图:

  通过这种关联,才查询到权限映射表之中那些权限的详细信息。综合起来,我们就知道了一个管理组可以执行的权限有哪些,以及这些权限的详细信息是什么。

  或许你会问,为什么不使用actionid字段相关联呢?因为:

  • 权限表中的id字段在经过多次的数据库操作之后可能会发生更改。
  • 权限映射表中仅仅记录着一个管理组可以执行的权限。
  • 一旦权限表中的id更改,那么权限映射表中的记录也就更改了。
  • 一个管理组可以执行的权限势必将出错,这是非常不希望的。

  考虑到上面的情况,所以应该使用action字段相关联,因为:

  • 权限表中,id可能发生变化,而action字段却是在任何情况下也不可能发生变化的。
  • 权限映射表中记录的action字段也就不会变。
  • 一个管理组可以执行的权限就不会出错了。

二 人员映射表 如下图:

  我们来了解一下人员映射表管理组表以及人员表之间的字段关联,如下图:

 

  看图中的红圈部分,先看groupid字段关联,这种关联方式在数据库中的表现如下图:

  如图,“超级管理员”组的groupid为1,我们再看人员映射表,admin属于超级管理员组,而administrator属于超级管理员组,同时也属于管理员组。

  使用这种关联方式,是为了查到一个管理组中的人员有谁。和上面一样,人员的详细信息是靠id字段(人员映射表中是masterid字段)关联查询到的。

  id字段(人员映射表中是masterid字段)关联表现在数据库中的形式如下图:

  一个人员可能同时属于多个“管理组”,如图中,administrator就同时属于两个“管理组”。所以,在人员映射表中关于administrator的记录就会是两条。

  这种关联方式才查询到管理组中人员的详细信息有哪些。综合起来,才可以知道一个管理组中的人员有谁,以及这个人员的详细信息。

  再结合上面谈到的权限表权限映射表,就实现了需求中的“组”操作,如下图:

  其实,管理组表中仅仅记录着组的基本信息,如名称,组id等等。至于一个组中人员的详细信息,以及该组能够执行的权限的详细信息,都记录在人员表权限表中。两张映射表才真正记录着一个组有哪些人员,能够执行哪些权限。通过两张映射表的衔接,三张实体表之间的交互才得以实现,从而完成了需求中提到的“组”操作

  我们再来看一下权限分栏表权限表之间的交互。这两张表之间的字段关联如下图:

  两张表使用了actioncolumnid字段相关联,这种关联方式在数据库中的表现如下图:

  如图所示,通过这种关联方式,我们可以非常清晰的看到权限表中的权限属于哪个分栏。

  现在,数据库结构已经很清晰了,分配权限的功能以及“组”操作都已经实现。下面我们再来分析一下需求中提到的关于权限管理系统的重用性问题。

  为什么使用这种数据库设计方式搭建起来的系统可以重用呢?

  • 三张实体表中记录着系统中的三个决定性元素。“权限”,“组”和“人”。而这三种元素可以任意添加,彼此之间不受影响。无论是那种类型的业务系统,这三个决定性元素是不会变的,也就意味着结构上不会变,而变的仅仅是数据。
  • 两张映射表中记录着三个元素之间的关系。但这些关系完全是人为创建的,需要变化的时候,只是对数据库中的记录进行操作,无需改动结构。
  • 权限分栏表中记录着系统使用时显示的分栏。无论是要添加分栏,修改分栏还是减少分栏,也只不过是操作记录而已。

  综上所述,这样设计数据库,系统是完全可以重用的,并且经受得住“变更”考验的。

总结:

  此套系统的重点在于,三张实体表牢牢地抓住了系统的核心成分,而两张映射表完美地映射出三张实体表之间的交互。其难点在于,理解映射表的工作,它记录着关系,并且实现了“组”操作的概念。而系统总体的设计是本着可以在不同的MIS系统中“重用”来满足不同系统的功能权限设置。

附录:

权限管理系统数据表的字段设计

  下面我们来看看权限管理系统的数据库表设计,共分为六张表,如下图:

action表:

  action表中记录着系统中所有的动作,以及动作相关描述。

actioncolumn表:

  actioncolumn表中记录着动作的分栏,系统运行时,左侧菜单栏提供了几块不同的功能,每一块就是一个分栏,每添加一个分栏,该表中的记录就会增加一条,相对应的,左侧菜单栏中也会新增机一个栏。

actiongroup表:

  actiongroup表记录着动作所在的组。

groupmanager表:

  groupmanager表记录着管理组的相关信息,每添加一个管理组,这里的记录就会增加一条。

mastergroup表:

  mastergroup表记录着管理员所在的管理组,由于一名管理员可能同同时属于多个组,所以该表中关于某一名管理员的记录可能有多条。

master表:

  master表记录着所有管理员的信息,每添加一个管理员,该表就会增加一条记录。

分享到:
评论

相关推荐

    java用户角色权限

    在Java开发中,用户角色权限管理是构建任何大型或复杂应用程序不可或缺的一部分。它涉及到系统中的用户如何被授权访问特定资源或执行特定操作。这个"java用户角色权限" demo旨在提供一个基础框架,来理解用户、角色...

    java用户角色权限设计

    ### Java用户角色权限设计详解 在企业级应用中,用户角色权限设计是至关重要的环节,尤其是在B/S架构的系统中,因为用户权限检测不能仅依赖于客户端,必须有一套完整且严密的权限检测机制,以确保只有授权用户才能...

    Java layui 用户角色权限源码

    综合来看,"Java layui 用户角色权限源码"覆盖了后端开发、前端展示、数据库设计和权限管理等多个方面,为开发者提供了一个可复用且可扩展的模板。通过深入学习和理解这套源码,开发者不仅可以提升自己的Java和Layui...

    JAVA用户、角色、权限、菜单、工作流管理系统

    目前系统已经基本集成的功能包含有,用户管理,角色管理,菜单管理,组织管理,数据字典,日志管理,接口管理(暂时未完成实际应用),流程配置,运行流程管理,消息管理(暂无实际应用),业务模块没有做。后台是基于...

    学习如何实现用户角色权限设计

    在Java用户角色权限设计中,实现业务系统中的用户权限管理是一项关键任务,特别是在B/S(Browser/Server)系统中,由于其开放性,权限管理显得尤为重要。与C/S(Client/Server)系统相比,B/S系统无法依赖客户端进行...

    Java基本的权限设计

    Java权限设计是构建安全应用程序的关键组成部分,它涉及到对系统资源的访问控制,确保只有授权的用户和角色才能执行特定的操作。以下是对标题和描述中提到的知识点的详细说明: 1. **实体设计**: 在Java权限设计...

    OA系统中用户角色权限Java类设计与实现

    ### OA系统中用户角色权限Java类设计与实现 #### 角色权限Java类的总体设计 ##### 1.1 角色设计 在本研究中,为了满足某客车厂的实际需求,作者们从组织结构出发,设计了一套完整的角色体系。具体来说: - **...

    java角色权限源码

    在实现角色权限管理时,通常会设计三个核心概念:用户(User)、角色(Role)和权限(Permission)。用户可以拥有多个角色,角色又可以包含多个权限。在SpringMVC和Hibernate的配合下,我们可以轻松地实现用户的登录...

    用户角色权限重新开放下载

    本文将基于"用户角色权限重新开放下载"的资源,详细阐述相关知识点,并结合标签"java"、"layui"和"用户角色权限"进行深入探讨。 首先,用户角色权限系统是用于控制不同类型的用户对系统功能的访问程度。它基于权限...

    java按钮粒度级别的统一权限管理服务

    "Java按钮粒度级别的统一权限管理服务"是一个专为细致控制用户访问权限而设计的解决方案。这个系统不仅涵盖了基本的用户、菜单和角色管理,还特别强调了对功能操作的精细控制,即权限粒度细化到按钮级别。 首先,...

    java权限角色

    在本压缩包文件"java权限角色.zip"中,我们可以预见到包含各种权限相关的文档、表设计示例以及流行的权限框架的详细信息。 1. **Java Security Manager**:Java安全经理是Java平台中的核心组件,负责执行类加载时和...

    java通用权限管理系统:作为配置中心,管理后台系统的菜单、功能、用户、角色等,并提供DUBBO接口.zip

    - 数据库设计:涉及到用户表、角色表、菜单表、权限表等,通过数据库设计确保数据的一致性和完整性。 7. **安全机制**: - 访问控制:如JWT(JSON Web Tokens)进行身份验证,防止未授权访问。 - 加密技术:敏感...

    一个免费的java权限后台管理系统框架

    java权限后台开发框架,采用spring + srpingsecurity + springMVC + Hibernate + freemarker + jquery 等技术实现,页面及源文件打包发布程序。 完整的功能应用,包括:后台权限、人员机构、参数代码、角色权限、...

    用户认证管理权限设计方案

    本设计方案通过构建用户、角色、权限三者间的关系,实现了灵活而严谨的权限管理机制。通过细致的角色权限分配,确保了系统的安全性和操作的便利性。同时,通过登录验证和注销机制,以及在Web服务中嵌入安全验证,...

    java 角色权限

    在Java编程语言中,角色权限管理是企业级应用开发中的重要组成部分,特别是在构建多用户、多权限系统的场景下。这个话题主要涉及到Java安全模型、访问控制以及如何通过角色分配权限来实现不同用户的不同操作权限。 ...

    java用户权限管理

    在Java中,用户权限管理通常通过角色(Role)和权限(Permission)的概念来实现。角色是一组权限的集合,用户被分配到不同的角色,从而获取相应的权限。Spring Security和Apache Shiro是两个流行的Java安全框架,...

    java web实现用户权限管理

    3. 用户角色关联表(user_role):记录用户所拥有的角色,体现多对多的关系。 4. 资源表(resource):包含系统中的所有资源,如菜单项、子菜单和按钮等。 5. 角色资源关联表(role_resource):表示角色可以访问哪些资源...

    开源权限管理java源码下载

    对于开发者而言,这个开源项目不仅是一个现成的解决方案,也是一个学习和研究Java权限管理的好材料。通过阅读和研究源码,可以加深对Java编程、RBAC模型以及Redis缓存应用的理解,提高自己的开发技能。 总之,...

    java权限管理与日志记录模块的设计与开发(源代码+论文)

    本文设计的系统管理功能模块采用了多用户多角色管理机制,确保不同的用户登录系统后能够操作属于自己权限范围内的功能。系统功能管理模块主要由用户管理子模块、角色管理子模块、角色设置管理子模块、权限管理子模块...

    JAVA权限设计及代码及页面

    是权限设计的七张表。但是如果你要是下载的话,肯定会报错。因为几个结合自己的框架的依赖类我没有添加,导致编译不过去。但是都有注释,是可以看懂的。然后拿去只需要修改一些放到自己的里面就能进行使用。里面包括...

Global site tag (gtag.js) - Google Analytics