2022年用户、角色和权限开发 .pdf

上传人:Q****o 文档编号:26167255 上传时间:2022-07-16 格式:PDF 页数:7 大小:124.26KB
返回 下载 相关 举报
2022年用户、角色和权限开发 .pdf_第1页
第1页 / 共7页
2022年用户、角色和权限开发 .pdf_第2页
第2页 / 共7页
点击查看更多>>
资源描述

《2022年用户、角色和权限开发 .pdf》由会员分享,可在线阅读,更多相关《2022年用户、角色和权限开发 .pdf(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、用户、角色和权限开发导言最近花了一段时间在做权限开发者一块,从设计到编码,我都全程参与了,对权限开发也有了一个本质上的了解,权限管理作为一个系统最基本也是最重要的功能之一,在一个系统中是非常重要的,今天我就侃大山,聊聊我这个系统的权限开发的一些东西,与大家交流交流。1、系统的原有权限管理模式之前这个系统的权限管理是通过配置文件来处理的,大概流程是这样的,把用户分成多个用户组,然后每个用户组对应着多个用户的id, 每次访问页面的时候,都会读取这个配置文件的信息,判断登录用户的id 属于哪个用户组,然后在页面判断这个用户组是否有访问这个链接的权限。配置文件的格式是这样的: adm : 1,2,34

2、, dev : 5,6,1这样会带来什么问题呢?有以下几个:权限管理混乱,一个用户id 可能会在多个权限组中每次更新配置文件,都要重新上线,麻烦没有图形化界面,配置权限困难页面有太多的if 判断语句,造成代码可读性差2、新的权限管理开发这里要强调一遍,这个系统数没有用外面流行的框架的,都是jsp 加上之前封装的框架来使用的, 所以你们可以发现我这个权限开发是没有用到以前用框架开发权限要用到的过滤器, 监听器之类的, 或者你可能会说, 没有用框架也可以用过滤器和监听器啊,因为这是Servlet 的东西。在这里我要解释一下,现在市面上的权限管理我个人觉得大致可以分为两种:1. 用户进入系统的时候不

3、判断权限, 把系统中的所有功能入口都开发给用户,每次用户点击相应的功能入口时,通过链接和用户判断该用户是否有使用该功能的权限,有权限则进入,没有权限则跳转到没权限的提示页面,这种功能一般都是使用过滤器来完成的名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 7 页 - - - - - - - - - 2. 在用户进入系统的时候就判断用户的权限,根据用户的权限开发相应的功能入口,不同权限的用户看到的页面是不一样的。相比第一种来说,这种的好处是可以屏蔽掉用户没有权限访问的功能入

4、口,用户只能看到自己权限所拥有的功能入口,而根本不知道该系统还有什么功能, 更有利于保密。但是,如果只是在用户进入系统的时候就判断权限,以后不再判断,那么就会出现第一种情况中不会出现的问题,那就是权限试探 ,我可以通过模拟地址栏的形式,不断地改变参数(有些提交方式不得不是get 提交,所以地址栏难免会带有参数)来达到破坏权限的目的,代码写得不严谨,这个问题就会发生在你的系统上,比较好的做法就是,在每一次访问页面的时候,都重新再判断一次权限。所以本来就不需要使用过滤器的地方又得再使用上了。然并卵,因为系统的特殊性,该系统的权限开发都不会用到过滤器和监听器,所有的权限判断都写在了一个公用页面上,然

5、后再在每个页面上include 进去,也达到了类似于过滤器的效果,然而,我是不赞成这样的写法的,框架、过滤器能存在, 自然有他们的道理,我之前也做过用框架的权限开发, 觉得那样更方便,当然,这是题外话了。(1) 数据库设计话说刚开始在设计数据库的时候还是碰到不少壁的,因为头脑中还是留存着系统原有权限管理的余威, 在最初设计的时候还受到它的一点影响,后来,干脆就不参考以前的权限管理模式了,做出自己的一套出来。用户表 (acctUser) 字段类型描述id int(11) 用户唯一标识,主键acct varchar(20) 账号name varchar(20) 姓名createTime int(1

6、1) 用户的创建时间,时间戳lastLoginTime int(11) 用户的最后登录时间,时间戳名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 7 页 - - - - - - - - - del int(1) 是否删除,逻辑删除,1 为删除, 0 为mobile varchar(20) 用户手机enail varchar(50) 用户邮箱remark varchar(200) 用户备注角色表 (acctRole) 字段类型描述roelId int(11) 角色唯一标识r

7、oleName varchar(30) 角色名roleDescribe varchar(30) 角色描述权限表在该系统中,权限会被精细化三种权限,第一种是导航栏的权限,第二种是侧边栏权限,最后一种是页面的按钮和业务权限,如下图所示导航栏权限表 (acctHeaderMenuPermission) 字段类型描述headerMenuId int(11) 导航栏权限唯一标识,主键headerMenuName varchar(30) 导航栏权限菜单名headerMenuUrl varchar(255) 导航栏权限菜单URL menuOrder tinyint(3) 导航栏权限菜单的顺序,展示的时候根据

8、这个名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 7 页 - - - - - - - - - 侧边栏权限表 (acctSideMenuPermission) 字段类型描述sideMenuId int(11) 侧边栏权限唯一标识,主键sideMenuName varchar(30) 侧边栏权限菜单名sideMenuUrl varchar(255) 侧边栏权限菜单URL headerMenuId int(11) 侧边栏权限菜单所对应的导航栏权限菜单menuOrder tin

9、yint(3) 侧边权限菜单的顺序,展示的时候根据这个业务或者操作权限表(acctDetailMenuPermission) 字段类型描述menuId int(11) 权限唯一标识,主键menuName varchar(30) 权限菜单名sideMenuId int(11) 页面业务或操作权限对应的侧边栏权限菜单bizOrOperate tinyint(3) 该权限所对应的业务或操作用户角色表 (acctUserRole) 字段类型描述acctId int(11) 用户 Id,外键,主键roleId int(11) 角色 Id,外键,主键角色 -导航栏权限表 (headerMenuRole)

10、名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 7 页 - - - - - - - - - 字段类型描述menuId int(11) 权限 Id,主键,外键roleId int(11) 角色 Id,主键,外键角色 -侧边栏权限表 (sideMenuRole) 字段类型描述menuId int(11) 权限 Id,主键,外键roleId int(11) 角色 Id,主键,外键角色 -业务或操作权限表(detailMenuRole) 字段类型描述menuId int(11)

11、权限 Id,主键,外键roleId int(11) 角色 Id,主键,外键数据库模型图(2) 页面设计页面设计也是个很难堪的东西,在网上找了好多权限分配的图片,发现很多都不符合我现有系统的情况, 后来纠结了一下, 还是决定采用树形结构和弹窗相结合的方式来实现权限和角色的分配权限管理初始化页面名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 7 页 - - - - - - - - - 该系统有三级权限,分别为导航栏权限、侧边栏权限和业务/操作权限,互成父子关系, 刚好对应树的

12、父子节点, 在每个节点后面都有添加、 编辑和删除按钮增加权限点击“ 添加权限 ” 的按钮,就会有弹窗让用户添加相应的权限,每次添加权限都要选择该权限所对应的父节点,权限名,权限URL 和权限展示顺序。可能有读者对于权限 URL 不是很了解,我在这里解释一下,因为系统本身的原因,每个权限其实就是对应着页面的每个菜单,每个菜单肯定都有自己的URL,如果某个用户有这个菜单的权限,自然就有了访问这个URL 的资格编辑权限编辑权限和添加权限是差不多的,这里就不再赘述删除权限删除权限,因为权限之间是有父子关系的,在数据库中表现为主外键关系,数据库的外键关系为级联, 也就是说如果父权限被删除了,与它对应的所

13、有子权限也将被删除。其实这个外键对应关系我刚开始是限制在有子权限的情况下不能删除父权限的,后来经过考虑,综合了自己和系统本身的很多因素,还是把外键关系设置为级联的了。 但是级联删除有个坏处, 如果在删除子节点成功后, 删除父节点失败了, 那么就会出现删除不完全的情况,可能会出现不可预知的错误,因此,在做删除操作的时候,我都会开启一个事务,如果删除失败我就回滚,删除成功才提交事务,遵循数据库的ACID 角色管理初始化页面名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 7 页

14、 - - - - - - - - - 角色管理和用户管理其实大同小异,所以就只讲角色管理这一模块,不讲用户管理了,角色管理这一块,是采用表格的形式来展示的,每次修改、添加用户却使用弹窗来实现的,发现弹窗真的是个好东西,又不占篇幅,又能阻塞代码添加角色角色添加会把当前所有的权限用属性的结果列出来,让用户可以一目了然地看到当前的所有权限以及权限的对应关系总结代码部分由于涉及到隐秘, 我就不贴出来了, 其实都是大同小异。 角色-权限,每个人都可以有自己的实现方式,当然很多方式都可以实现, 你也可以用配置文件,也可以用现成的权限框架, 当然也可以像我一样自己写一个,只要自己喜欢和业务需要。 今天写这篇博客, 主要是因为之前做这个权限开发的时候,花了好多时间在角色 -权限的设计上,真正开发花的时间却不多,所以我这篇博客大部分讲的是权限和角色分配上的设计和规划,主要是想起到抛砖引玉的作用, 希望针对我这系统的权限开发有更好的解决方案,同时也希望这篇博客可以给那些有同样需求的人一些启发。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 7 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术总结

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁