Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于角色的菜单按钮权限的设计及实现

基于角色的菜单按钮权限的设计及实现

作者头像
明志德道
发布于 2023-10-20 11:20:49
发布于 2023-10-20 11:20:49
7830
举报

最近,公司老大给了这个任务,功能差不多完成了,现将一些经过分享给大家!

------------------开始设计时-----------------

  1. 菜单权限的设计

         思路:

  1. 5个表的建立:用户表、角色表、菜单表、用户角色表、角色菜单表
  2. 后台动态加载json数据给前台。   这里的json数据,就是菜单栏的数据(就是通过后台数据查询找出当前用户拥有哪些菜单)
  3. 用户(操作员、管理员、超级管理员)只能看到自己对应的菜单数据

          思路:sql语句加上对应的where条件 ,来对查询到的所有数据做进一步的筛选。

       实现步骤:

  1. 设计表结构,
  2. 依次往菜单表、角色表、用户表中加入数据,
  3. 根据页面需要的数据,设计webapi接口方法,
  4. 通过网页操作将数据加入角色菜单 rel_rolemenu、用户角色rel_userrole的关系表中

-----------------------功能完成后的表-------------------------------

用户表

角色表

 菜单表

 关系表  

 -------------------------开发过程中发现的问题------------------------------

1.  返回当前用户的菜单按钮数据

A方式   通过关系表查询 , 这种方式查询不方便 (如果用EF的导航属性的话,实现起来还是相对简洁些的) ,但是做数据修改的时候很方便 ,可以直接对关系表做操作。

B方式   通过存储的MenuIds去菜单表中做查询,这种方式查看查询方便,但是修改不方便,需要 在 用户更新角色数据、角色更新权限数据、权限数据更新时,去更新用户表里面的MenuIds值 很是繁琐

我采用的方式:由于个人比较懒,喜欢数据能够直观些,也不太知道哪种方式好,就把2种方式都用了!   但是个人建议,还是用第一种方式,不要弄复杂了,功能能实现就行!

事后分析总结: A方式  在表里就不需要加MenuIds、RoleIds字段来处理,直接通过 用户角色列表,操作关系表 rel_userRole、rel_roleMenu表来处理,由于我们现有公司该表没有做软删除的设计,还需要在删除 单条menuId、roleId值时,去这些关系表里删除对应的记录

                          B方式  实际上就不需要建关系表了, 而要加上MenuIds、RoleIds字段值,然后通过这些MenuIds、RoleIds去Menu表、Role表中找出对应的记录就可以了。 在进行menu表、role表数据进行更新时要找出它所影响的 用户数据、角色数据是哪些、然后更新这些数据的MenuIds、RoleIds值

2. 菜单表父子结构的数据

A方式     直接将表数据交给前端人员处理成树形结构

B方式     自己在后端处理这些数据,然后将处理的树形结构数据返回给前端人员,具体实现方法,我将在我的下一篇博客里写出来

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-12-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
思考,撸一段 SQL ? 还是写一段代码?
以下都为个人思考总结所得,只作为抛砖引玉之说,一定会有不同意见,如果你有不同看法,欢迎拍砖。
芋道源码
2019/07/12
4950
思考,撸一段 SQL ? 还是写一段代码?
Flask学习「一」(按钮,角色,菜单,用户,权限)
很荣幸有时间能静下心来写在这篇文章,前段时间写了一些没有营养的文章对那些关注我的同学来说非常抱歉,接下来的一段日子里会围绕近期所做的Flask项目写一系列的博客,以记录自己的不足。 鉴于可能有些小白可能会看到这篇文章,于是我尽量写的通俗易懂。 接下来进入正题,我这篇文章要写的是一个系统的权限部分。权限的控制对于一个优秀的系统来说至关重要,但是对于权限的设计和把空是比较麻烦的。 一般如果我们不考虑按钮的话,逻辑大致如下: 把菜单和权限、权限用户关联起来。 1、用户页面,可以增删改查,并且还要有一个分配权限的按钮。 2、权限页面,可以增删改查,并且有一个分配用户的按钮和一个分配菜单的按钮。 3、建立两个表,分别为用户权限表(保存用户ID和权限ID)、权限菜单表(保存权限ID和菜单ID)。 4、当在用户页面中选中一个用户,点击用户的“分配权限”按钮时,打开展示所有权限的页面(并把用户ID传进去),左边展示所有还没有分配的权限列表,右边展现已经分配的权限列表,然后选择需要分配的左边权限后,点击分配,把数据分配到右边已分配的列表中,然后点击“确定”按钮,把用户ID和选择的权限ID保存到用户权限表。 5、当在权限页面选中一个权限,并点击“分配用户”时,处理方式和4相同,当选择需要分配权限的用户后,同样把用户ID和权限ID保存到用户权限表。 6、当在权限页面选中一个权限,并点击“分配菜单”时,打开一个树展现所有菜单的页面,每个树节点前面有一个复选框,并把这个权限已经分配的树默认选中,然后在要分配的菜单节点树前面的复选框上选中,最后保存数据,把权限Id和所有选中的菜单ID保存到权限菜单表。 7、当用户登陆系统的时候,首先检查用户输入的口令信息,如果口令正确,再根据用户倒查用户权限表,再通过用户权限表查到的权限,到权限菜单表查询相应的菜单,再把相应的菜单展示出来。 上面便是不考虑按钮的情况下的业务逻辑,其实加上按钮的话也是差不多的,因为按钮隶属于菜单,只有给某个用户分配了某个角色,这个用户才能在登录的时候看到他所拥有角色对应下的菜单和按钮,这样即完成了角色的权限控制。 接下来开始我们的项目。 首先根据上面的业务描述,我们大概可以用到的表和字段如下:
Python之道
2020/04/24
1.5K0
造轮子之菜单管理
前面完成了基础管理的相关API,接下来就得做一个菜单管理了,用于对接管理后台前端界面。
饭勺oO
2023/10/18
2330
权限想要细化到按钮,怎么做?
松哥最近正在录制 TienChin 项目视频~采用 Spring Boot+Vue3 技术栈,里边会涉及到各种好玩的技术,小伙伴们来和松哥一起做一个完成率超 90% 的项目,戳戳戳这里-->TienChin 项目配套视频来啦。
江南一点雨
2022/06/23
8850
权限想要细化到按钮,怎么做?
杨校老师课堂之权限管理系统的核心业务逻辑接口设计
业务逻辑层接口核心代码展示: 用户模块 package cn.javabs.system.service; import java.util.List; import cn.javabs.common.core.entity.SysUser; /** * 用户 业务逻辑层 * * @author Mryang */ public interface SysUserService { /** * 根据条件分页查询用户列表 * * @param us
杨校
2022/09/23
2680
手把手带你开发一套用户权限系统,精确到按钮级
在实际的软件项目开发过程中,用户权限控制可以说是所有运营系统中必不可少的一个重点功能,根据业务的复杂度,设计的时候可深可浅,但无论怎么变化,设计的思路基本都是围绕着用户、角色、菜单这三个部分展开。
潘志的技术笔记
2024/06/20
4510
手把手带你开发一套用户权限系统,精确到按钮级
SSM 单体框架 - 教育平台后台管理系统:权限模块开发
其次不同登陆用户要有不同的权利,而且要有不同的菜单(例如财务经理针对系统中财务相关模块进行操作,人事经理针对系统中人事模块进行操作)
RendaZhang
2020/09/24
1.9K0
关于接口权限控制以及rbac
最常见的接口权限控制就是分端形式了,不同的端实现不同的接口,一个用户登录后,只能访问这个端的接口,而不能去访问其他端的接口.
仙士可
2020/11/23
2.2K0
关于接口权限控制以及rbac
若依权限设计与自定义新增用户
Qiuner
2024/10/09
7440
若依权限设计与自定义新增用户
【JeeSite】角色和权限的修改(二次开发代码解析)
页面传参数menuIds , 数据库保存用的参数是menuList, 中间通过setMenuIds--->setMenuIdList---->menuList
ZhangXianSheng
2019/05/28
9980
jsp权限菜单绑定的基本实现
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
逝兮诚
2019/10/30
1.5K0
jsp权限菜单绑定的基本实现
基于Java的疫情防控管理系统
☣项目介绍:通过对依社区为单位进行人群的管理,以及疫苗的情况,包括小区状况,通过RBAC进行角色与用户之间的权限管理。
路人甲Java
2021/12/01
9790
基于Java的疫情防控管理系统
Shiro框架基本知识及应用「建议收藏」
Shiro是apache旗下一个开源安全框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证、权限授权、加密、会话管理等功能,组成了一个通用的安全认证框架。
全栈程序员站长
2022/10/05
7040
Shiro框架基本知识及应用「建议收藏」
增量数据,如果下次增量数据存在重复数据,如何解决。
1、如果增量数据,每次增量数据可能会存在增量数据,如何解决。思路,首先可以复制一个备份表,然后将主表中存在的数据,在备份表中进行删除,然后将备份表插入到主表,最后在下次增量之前,将备份表截断或者清空表即可。
别先生
2018/12/19
1.1K0
巧用 MyBatis 构建树形结构
一般的做法是查询出所有, 然后递归构建树形结构, 但其实可以巧用 MyBatis 在查询时就进行转换, 这用到了 MyBatis 的 resultMap 功能.
一份执着✘
2019/12/29
2K0
基于RBAC模型的权限系统设计(Github开源项目)
计划在Team的Github开源项目里加入权限控制的业务功能。从而实现权限控制。在很多管理系统里都是有权限管理这些通用模块的,当然在企业项目里,权限控制是很繁杂的。 Team的Github开源项目链接:https://github.com/u014427391/jeeplatform 欢迎star(收藏)
SmileNicky
2019/01/17
3.8K0
day56_BOS项目_08
  注意1:权限数据属于比较特殊的数据,系统在上线之后,必须先把权限数据给它初始化到数据库中去,然后这个系统才可以跑起来。如果不初始化权限数据的话,那么登录上系统之后,会发现一个菜单也没有,什么也不能干。所以说,所有的系统在上线的时候都会进行权限数据的初始化。   注意2:我们的初始化文件数据一般都会整理成一个sql脚本文件,系统上线之后,首先去数据库中去执行这个sql脚本文件,执行完之后,我们的数据库中就有数据了,然后整个系统才能正常运行。即:系统的正常运行是要依赖一些基础数据的。
黑泽君
2018/10/15
9330
Spring Security----RBAC权限控制模型,和权限相关知识点整理
我们开发一个系统,必然面临权限控制的问题,即不同的用户具有不同的访问、操作、数据权限。形成理论的权限控制模型有:自主访问控制(DAC: Discretionary Access Control)、强制访问控制(MAC: Mandatory Access Control)、基于属性的权限验证(ABAC: Attribute-Based Access Control)等。最常被开发者使用也是相对易用、通用的就是RBAC权限模型(Role-Based Access Control),本文就将向大家介绍该权限模型。
大忽悠爱学习
2021/12/07
2.7K0
Spring Security----RBAC权限控制模型,和权限相关知识点整理
Daily-Blog项目后台日志
使用@ApiOperation(value = "友链评论列表",notes = "获取一页友链评论")来进行标注
用户11097514
2024/05/30
3260
Daily-Blog项目后台日志
SpringBoot整合shiro从初恋到失恋
另外三个跳转页面就不贴出来了,panpan账号登录可以查看和删除,用xiaoli账号登录则只有查看而没有删除的权限,代码见下面,sql文件在resources包下
道可道非常道
2019/05/07
9370
SpringBoot整合shiro从初恋到失恋
相关推荐
思考,撸一段 SQL ? 还是写一段代码?
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档