java用户角色权限设计

使用二进制位来控制权限,表设计 前言 最近在自己搭建一个管理后台,到了权限角色的时候,按常规涉及了以下几张表: 也是相当常见的模型了。 但是随机我发现一个不大不小的问题,当权限表/资源表稍微大一点的时候,角色关联权限tbl_role_permission 就会有大量数据 这才一个角色,很伤脑筋。于是我想到了上个项目中用到的二进制表示权限方法。 表设计 二话不说,看表 我们知道一个long类型,可以转为64位的二进制类型,也... 阅读详情
java用户角色权限设计

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

 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表记录着所有管理员的信息,每添加一个管理员,该表就会增加一条记录。



五表权限 设计基础:用户、角色、权限三大核心表,加上用户角色、角色权限两个映射表(用于给用户表联系上权限表)。这样就可以通过登录的用户来获取权限列表,或判断是否拥有某个权限。 大致用到5张表:用户表(UserInfo)、角色表(RoleInfo)、菜单表(MenuInfo)、用户角色表(UserRole)、角色菜单表(RoleMenu)。 各表的大体表结构如下: 1、用户表(UserInfo):Id、Use... 阅读详情

相关推荐

java+springboot权限的设计(用户、角色、权限)和前端如何渲染用户所对应的权限菜单

记得当时在学校的时候,觉得这个实现起来真的超级困难,想想就头大,毫无头绪,即便那时候去查资料看了很多大佬写的文章,看的时候感觉恍然大悟,直拍大腿,但是当我想要动手自己去做的时候,又不知道从哪开始切入,于是一直没有动手去做,直到最近在实习的时候,给了我这个任务,当我带着恐惧去自己动手实现这个功能的时候,当静下心来,发现是多么的有趣和清晰,那我们一起来看一下吧。下面是部分代码,可能写的不是很好,因为是手搓出来的,之前刚理清一点点思路写的哈哈,仅供参考仅供参考!

m0_74823131的博客 1542

权限管理需要哪几张表

用户表、角色表、权限表、用户角色表、角色权限表

初心不忘、始终方得 1万+

Java论坛系统--3.系统用户角色权限表结构设计

通常我们的网站都有权限控制,就像一个公司有产品、开发、运维之分,各自负责各自的业务,相互独立,有相互协作,共同完成一个任务。拥有不同权限的用户查看不同的页面,进行不同的操作。 Shiro是一种轻量级的安全框架,主要是做登录验证,权限检查,相对 Spring Security 是要简单很多,源码也很清晰。 表结构 在这里我主要是针对后台的用户操作权限的设计: 1.定义用户表 sys_user...

qq904274014的博客 3670

实现业务系统中的用户权限管理--设计篇(转自http://www.noahweb.net/mail/2/Project.htm)

  B/S系统中的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器检测实现,而B/S中,浏览器是每一台计算机都已具备的,如果不建立一个完整的权限检测,那么一个“非法用户”很可能就能通过浏览器轻易访问到B/S系统中的所有功能。因此B/S业务系统都需要有一个或多个权限系统来实现访问权限检测,让经过授权的用户可以正常合法的使用已授权

NiuNIu's sPAcE 1万+

Java权限管理的两种实现方式

基于角色的权限管理和基于资源的权限管理是实现Java权限管理的两种常见方式。基于角色的权限管理将权限授予角色,然后将角色分配给用户。除了基于角色的权限管理,还可以使用基于资源的权限管理。基于资源的权限管理是指为每个资源定义特定的权限,然后将这些权限授予用户。基于角色的权限管理是指将权限授予特定的角色,然后将角色分配给用户。每个角色都具有一组特定的权限,用户通过分配给他们的角色来获得相应的权限。在Java中,有多种方法可以实现权限管理,其中一种常见的方式是基于角色的权限管理。方式一:基于角色的权限管理。

HackDashX的博客 2350

用FPGA驱动WS2812B点阵,手把手教你实现动态文字显示(附完整Verilog代码)

本文详细介绍了如何使用FPGA驱动WS2812B点阵实现动态文字显示,包括硬件连接、Verilog代码实现和动态效果设计。通过精确的时序控制和数据处理,读者可以掌握FPGA与WS2812B的交互技术,并实现炫酷的显示效果。附完整Verilog代码,适合硬件爱好者和工程师参考实践。

weixin_30482383的博客 670

java角色_java用户角色权限设计

《java用户角色权限设计》由会员分享,可在线阅读,更多相关《java用户角色权限设计(9页珍藏版)》请在人人文库网上搜索。1、实现业务系统中的用户权限管理B/S系统中的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器检测实现,而B/S中,浏览器是每一台计算机都已具备的,如果不建立一个完整的权限检测,那么一个“非法用户”很可能...

weixin_35831315的博客 1697

threejs开发可视化数字城市效果

theme: condensed-night-purple 灵感图 现在随着城市的发展,越来越多的智慧摄像头,都被互联网公司布到城市的各个角落,举一个例子,一个大楼上上下下都被布置了智能摄像头,用于监控火势,人员进出,工装工牌佩戴等监控,这时候为了美化项目,大公司都会将城市的区域作为对象,进行3d可视化交互,接下来的内容,就是基于以上元素,开发的一款城市数据可视化的demo,包含楼宇特...

weixin_41770018的博客 1582

Java设计模式(二)用户、角色、权限模式,面向对象、面向接口的思想

Java设计模式之用户、角色和权限 一、定义 角色决定了用户有哪些权限 简单来说,就是通过给用户授权角色,用户就获得了属于该角色的权限。这样分配就不用分别创建不同的用户类,只需要给用户类赋予不同的角色属性就可以实现不同的用户。另外,这种模式使系统易于扩展和维护。比如当要给某一种用户增加新的权限时,只要给角色增加权限即可,不需要对若干用户对象一一操作。在实际开发中,遇到权限划分的问题,经常一般可以采用用户、角色、权限模式。 1. 权限 权限是操作,是针对行为的。一般把行为、能力抽象为接口,所以把权限也抽象为接

咕咕酱没有悲伤的博客 6215

手把手教你搭建基于Springboot+Vue的酒店管理系统

友友们,又是好久没更新了,马上元旦了,要迈入2025蛇年了,提前祝大家蛇年快乐,学有所成,本文博主将带领大家使用Springboot和Vue搭建一个酒店管理系统,受限于本文篇幅内容,本文罗列仅有部分简单示例内容,主要包括前后端示例源码。通过本文,你将大致掌握如何快速搭建一个现代化的Web应用。如果您想学习完整开发方案,包括项目源码+数据库文件+全套环境资源+代码部署视频教程+开发文档】获取学习资源,支持远程安装调试:一、项目背景随着互联网技术的不断发展,酒店行业对信息化的需求越来越高。

暴力码农的博客 1324

在Mac上搭建本地AI工作流:Dify与DeepSeek的完美结合

本文介绍了在Mac上搭建本地AI工作流的方法,结合Dify平台和DeepSeek模型。Dify是一个开源的大语言模型应用开发平台,支持可视化AI应用开发。部署步骤包括:1)安装Homebrew和Docker;2)克隆Dify代码库;3)配置环境变量并启动服务。同时,使用Ollama工具本地部署DeepSeek模型,将其集成到Dify中创建聊天助手。通过配置模型接口和新建应用,用户可以在本地环境中实现AI对话功能。这种方案既保证了数据隐私,又提供了灵活的AI应用开发能力。

Linda的自动化测试之旅 1536

Java,设计,功能权限和数据权限,用户、角色、权限和用户组

ACL是一种访问控制机制,包含三个关键要素:用户(User)、资源(Resource)和操作(Operate),当用户请求操作资源时,检查资源的权限列表,如果资源的权限列表中存在该用户的操作权限则允许,否则拒绝。RBAC模型,三个基础组成部分:用户(User)、角色(Role)和权限(Privilege),通过定义角色的权限,授予用户某个角色从而来控制用户的权限,实现了用户和权限的逻辑分离(区别于ACL模型);...

zhaohuodian的博客 1万+

全功能tgbot/Telegram机器人多功能有后台版源码

trx兑换 闪兑 关键字监控 群管 usdt监控 余额查询 推广分享 等几乎常见的tg机器人功能都有。全功能tgbot/telegram机器人多功能有后台版源码-打包好的可以直接上手。

百创科技 2706

java 用户、角色、权限数据库设计

权限管理权限管理,主要是人员和权限之间的关系,但是如果让人员直接和权限打交道,那么权限的赋值、权限的撤销以及权限的变动会非常的麻烦,这样引入了,角色,给角色赋权限,然后给用户分配角色。这个设计主要涉及6张表,用户表,(用于存储用户的所有信息)权限表,(用于存储所有的权限)角色表,(用于存储所有的角色)用户和角色的关联表,(用户和角色的关联)角色和权限的关联表,(角色和权限的关联)菜单表,(里面关联...

liutong123987的专栏 555

2026实战:YOLOv11融合Swin Transformer,小目标检测精度暴涨47%

本文针对工业零件微小缺陷检测难题,提出了一种CNN与Transformer的最优融合方案。作者发现直接替换YOLOv11骨干网络为Swin Transformer会导致速度骤降69%而精度仅提升2.1%。通过大量实验,总结出三项核心设计原则:1)CNN为主、Transformer为辅;2)高层插入、浅层保留;3)模块化融合。最终提出三种渐进式融合方案,其中骨干部分替换方案(方案二)实现了小目标检测精度提升47%,推理速度仅下降8%的优异表现。文章详细解析了Swin Transformer的核心原理,提供了完

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 517

Altium Designer应用技巧1: 功能模块的复用方法

Altium Designer应用技巧1: 功能模块的复用方法      我们在使用Altium Designer进行电路图设计时,常会遇到功能模块的复用问题,例如我们经常需要将12V以DC-DC的方式转换成5V,这在很多线路板上都会应用到。现在我们普通的做法是,每个板子都重新绘制一遍,像这样DC-DC的电路,很浪费时间。那么如何采用提高工作效率呢?我们可以采取Altium Desi

snmplink的博客 1万+

java权限管理与用户角色权限设计

java权限管理与用户角色权限设计2016年10月29日 19:24:41阅读数:12545实现业务系统中的用户权限管理 B/S系统中的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器检测实现,而B/S中,浏览器是每一台计算机都已具备的,如果不建立一个完整的权限检测,那么一个“非法用户”很可能就能通过浏览器轻易访问到B/S系统...

Junit的博客 4万+

Python进阶005:修改Jupyter Notebook的工作路径

1、Jupyter Notebook简介 2、修改Jupyter Notebook的工作路径 如下三个步骤: 一、安装notebook 在CMD命令行中输入: pip install notebook 二、启动notebook jupyter notebook 启动后发现是在你的用户目录下,如下图所示,但是该目录下有很多的其他文件或文件夹,因此我想把这个环境切换到我单门创建的一个文件夹中。 三、创建notebook的配置文件 在CMD命令行中执行: jupyter notebook --genera

若北辰 1389

【转载】JAVA用户角色权限设计(功能权限)

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

青山师 4572

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

角色java_java用户角色权限设计

实现业务系统中的用户权限管理B/S系统中的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器检测实现,而B/S中,浏览器是每一台计算机都已具备的,如果不建立一个完整的权限检测,那么一个“非法用户”很可能就能通过浏览器轻易访问到B/S系统中的所有功能。因此B/S业务系统都需要有一个或多个权限系统来实现访问权限检测,让经过授权的用户...

weixin_42499790的博客 501

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

java 角色管理代码_java用户角色权限设计表

实现业务系统中的用户权限管理B/S系统中的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器检测实现,而B/S中,浏览器是每一台计算机都已具备的,如果不建立一个完整的权限检测,那么一个“非法用户”很可能就能通过浏览器轻易访问到B/S系统中的所有功能。因此B/S业务系统都需要有一个或多个权限系统来实现访问权限检测,让经过授权的用户...

weixin_29291185的博客 591

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

上一篇: ssh页面如何初次加载时显示信息
下一篇: ajax技术在ssh中的应用[1]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值