java如何做权限管理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java如何做权限管理相关的知识,希望对你有一定的参考价值。

主要想实现这样的功能
1,登录的时候显示有权限操作的菜单
2,点击每个菜单后,显示有权限点击的按钮,无权限的就不显示
3,权限分配的时候给一个组分配好相应权限后,那么该组内用户就有了这些权限了
4,如果有的用户不归属任何一个组的话,也能够单独为这个用户分配权限

敬候专家们指点一二,能给个相关例程更好了
谢谢!

首先介绍下思路:

1、用户表 user;

2、角色表 role;

3、菜单 menu;

4、角色菜单权限表 role_menu;

5、用户菜单权限表 user_menu;

如图:

根据用户角色取出该角色所有权限,并对用户进行权限分配;注意菜单的按钮(新增、删除、修改)权限是放在中间表(user_menu)中的;

1、新增用户时,是要根据用户角色进行分配权限的 一定记得批量添加;批量、批量、批量,重要的事情说三遍,不要查询角色权限,然后for循环,这样效率太低了;

SQL如下:

INSERT INTO sys_user_menu(UserId, MenuId, DelPower,    UpdPower,    InsPower,    ViewPower)
SELECT #userId UserId, MenuId, 1 DelPower, 1 UpdPower, 1 InsPower, 1 ViewPower FROM sys_role_menu WHERE RoelId = #roleId

updPower 默认都是有的 所以都是1,这样根据角色查询出权限直接添加,响应时间大大提升;

2、修改用户角色也要记得重新分配用户权限哦!这个不能忘,可以用上面的方法;

业务方法:


如果角色没有修改,是不用重新分配权限的,所有userRole 重置为 null,如果角色修改则删除原权限,重新进行分配;

3、最后要优化的就是根据用户查询权限的时候啦,我最开始是这样做的,查询角色权限,用户权限,返回到前端,前端进行处理;结果就是很卡 基本上要三到四秒,

解决方案,一步到位;一个查询返回全部数据。

如下SQL:

SELECT menu.MenuId id, ParentId pid, MenuName text,
(SELECT COUNT(1) FROM sys_user_menu WHERE UserId = #userId AND  MenuId = sm.MenuId) isShow,
(SELECT CONCAT(
(CASE WHEN smenu.InsPower = 1 THEN 1 ELSE 0 END), ',',
(CASE WHEN smenu.DelPower = 1 THEN 1 ELSE 0 END), ',',
(CASE WHEN smenu.UpdPower = 1 THEN 1 ELSE 0 END), ',',
(CASE WHEN smenu.ViewPower = 1 THEN 1 ELSE 0 END))
FROM sys_user_menu smenu WHERE smenu.UserId = #userId
AND  smenu.MenuId = sm.MenuId) MenuInfo
FROM sys_role_menu sm INNER JOIN sys_menu menu on sm.MenuId = menu.MenuId
WHERE RoelId = #roleId

首先根据 角色ID查询出权限,然后子查询用户是否有该权限,有返回1 木用返回 0;

最后按钮权限 我是直接拼接成字符串,分别对应 添加、删除、修改、查看 1 有该按钮 0 没有该按钮;

优化后 不管是添加、修改用户,加载用户权限都能控制在 1~2 秒;

参考技术A

思路:

1、用户表 user;

2、角色表 role;

3、菜单 menu;

4、角色菜单权限表 role_menu;

5、用户菜单权限表 user_menu;

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程[1]  。

Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点[2]  。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等[3]  。

由于在开发Oak语言时,尚且不存在运行字节码的硬件平台,所以为了在开发时可以对这种语言进行实验研究,他们就在已有的硬件和软件平台基础上,按照自己所指定的规范,用软件建设了一个运行平台,整个系统除了比C++更加简单之外,没有什么大的区别。1992年的夏天,当Oak语言开发成功后,研究者们向硬件生产商进行演示了Green操作系统、Oak的程序设计语言、类库和其硬件,以说服他们使用Oak语言生产硬件芯片,但是,硬件生产商并未对此产生极大的热情。因为他们认为,在所有人对Oak语言还一无所知的情况下,就生产硬件产品的风险实在太大了,所以Oak语言也就因为缺乏硬件的支持而无法进入市场,从而被搁置了下来。

1994年6、7月间,在经历了一场历时三天的讨论之后,团队决定再一次改变了努力的目标,这次他们决定将该技术应用于万维网。他们认为随着Mosaic浏览器的到来,因特网正在向同样的高度互动的远景演变,而这一远景正是他们在有线电视网中看到的。作为原型,帕特里克·诺顿写了一个小型万维网浏览器WebRunner。[4] 

1995年,互联网的蓬勃发展给了Oak机会。业界为了使死板、单调的静态网页能够“灵活”起来,急需一种软件技术来开发一种程序,这种程序可以通过网络传播并且能够跨平台运行。于是,世界各大IT企业为此纷纷投入了大量的人力、物力和财力。这个时候,Sun公司想起了那个被搁置起来很久的Oak,并且重新审视了那个用软件编写的试验平台,由于它是按照嵌入式系统硬件平台体系结构进行编写的,所以非常小,特别适用于网络上的传输系统,而Oak也是一种精简的语言,程序非常小,适合在网络上传输。Sun公司首先推出了可以嵌入网页并且可以随同网页在网络上传输的Applet(Applet是一种将小程序嵌入到网页中进行执行的技术),并将Oak更名为Java(在申请注册商标时,发现Oak已经被人使用了,再想了一系列名字之后,最终,使用了提议者在喝一杯Java咖啡时无意提到的Java词语)。5月23日,Sun公司在Sun world会议上正式发布Java和HotJava浏览器。IBM、Apple、DEC、Adobe、HP、Oracle、Netscape和微软等各大公司都纷纷停止了自己的相关开发项目,竞相购买了Java使用许可证,并为自己的产品开发了相应的Java平台。

参考技术B 我知道有两种可以解决
1:用过滤器过滤请求,按照权限级别给出能访问的特定的界面,这种方法可能会有很多的界面,且界面重用性不高;
2:按照权限来显示界面,不同权限的人看到不同作用的界面;
建议两种方法混合在一起用
参考技术C 权限管理???如果我没理解错的话,管理员在数据库里设置管理权限,例如:设置为授权,再执行某个功能的jframe或者class时,先读取数据库里的权限字段,若权限是:授权,则执行某一对象,若权限是:禁权,则是某一frame或功能为不可用,这样再给管理员设置一个发放权限收回权限的按钮,这样管理员可以通过修改数据库的权限字段来随时控制用户的权限,很简单的,总之就是在使用前先进行数据库权限的读取··· 参考技术D 加个权限表,关联用户表,目测是多对多的关系。有了这个,你用户登录上去之后一查就可以了。权限表里还可以细化,分部门啊、分菜单啊等等。权限组你可以把它当用户一样处理,这时候就是自关联。或者单独出来一个表,用户查询权限的时候判断有没有组来判断权限。

Java开发企业级权限管理系统

第1章 课程整体概述(2018配套教程:电商前端+电商后端+电商权限管理系统课程)
本章首先介绍为什么大公司都有权限管理系统,然后会对权限管理中流行的RBAC模型及拓展做重点说明,并给出理想中的权限管理系统应该是什么样子的。之后会对这门课程做总体内容介绍与课程安排,最后会介绍这门课程会涉及到的技术,让大家明确了解到这门课程到底能收获些什么(课程提供QQ交流群)。...


第2章 Spring Security权限框架理论与实战演练
本章首先让大家学习到Spring Security权限框架的架构,之后大家可以学习到Spring Security权限框架的核心概念,包括***、数据库管理、缓存、自定义决策等等,之后会手把手带大家基于Spring Boot+Spring Security搭建一套演练环境,并带着大家在Spring Security权限框架常见的应用场景下对框架常用的API功能进行编码...


第3章 Apache Shiro权限框架理论与实战演练
本章课程安排和Spring Security框架的安排是一样的,也是按照架构、核心概念、搭建环境、编码演练、优缺点分析的流程来进行讲解。不同的是Shiro里的核心概念是对身份认证、授权、权限拦截、会话管理、权限缓存等进行介绍。通过对两个框架的学习,可以看出他们不同的设计理念,这里对比着学习效果会更好。搭建环境依旧使用...


第4章 权限管理系统核心表设计
大家可能不清楚为什么有了流行的框架我们还需要自己开发一套,因此本章开始我们就来说明这个问题,之后我会演示这个系统开发完的界面样子,并根据演示给出我们需要开发的功能,之后带领大家一起完成详细的数据库设计(部门表,用户表,权限模块表,权限表,角色表,...


第5章 Spring MVC开发环境搭建与配置
本章我会手把手带大家使用SpringMVC搭建一套完整的开发环境(不限于权限系统项目,所有后台系统开发都通用),并带大家完成各种重要的配置,包括pom.xml配置、web.xml配置、spring-servlet.xml配置,applicationContext.xml配置、durid配置、mybatis-config.xml配置及logback.xml的配置,大家会从中学习到许多环境配置的细...


第6章 项目准备与核心辅助工具类开发
本章开始,我会为大家介绍实用的Mybatis Generator工具,它可以根据数据库表设计动态生成相关的Java代码。之后定义项目的接口规范,在此基础上对接口的异常做全局的异常封装处理,然后为了方便项目对参数校验,我会带领大家完成一个校验工具BeanValidator的开发。因为项目会涉及json处理,我会专门封装JsonMapper来完成类...


第7章 部门模块开发
本章带大家进行部门模块的开发,主要涉及新增部门、更新部门、部门树形结构的生成的后端接口及前端渲染。由于会涉及前端开发,我会对页面使用的内容做一些封装,方便后面页面的复用,提高代码复用性。并且上一章我们开发的工具也将从这一章开始大量的使用。这里涉及到的部门树形结构的开发、部门更新时递归更新子部门、树形...


第8章 用户模块开发
本章带大家开发的是RBAC模型里的用户模块,这里除了完成对用户的管理外,同时还处理了用户登录和注销的功能,并将用户登录信息存储到ThreadLocal对象中方便系统内对当前登录用户的信息进行获取。这个模块首次涉及分页列表的展示,因此我们封装了一个分页插件,方便后面相关模块的代码复用,这对大家以后的编程思想会有一个...


第9章 权限模块开发
本章带大家开发的是RBAC模型里的权限模块,由于和部门模块很相似,前端交互也相同,这个模块我会教大家提高参考类似模块进行低成本的开发或改造的思路和能力。


第10章 权限点模块开发
本章要带大家开发的是RBAC模型里的权限点模块,主要是对权限点进行管理。由于和用户管理很相似,且相关的插件和函数都已经封装好,这章学习起来会比较轻松。


第11章 角色模块开发
本章要带大家开发的是RBAC模型里的角色模块,主要是对角色进行管理,包括获取列表、新增、修改、删除及相应的前端交互,这章学习起来会比较轻松。


第12章 角色权限关系开发
本章要带大家开发的是是RBAC模型里的角色权限关系模块。这章涉及到的技术要求较高,首先是后台递归生成基于角色已分配权限的权限模块和权限点组成树形结构,并计算每个节点下的权限点是否需要勾选和可选,然后前端使用zTree插件对这个树形结构进行动态渲染,并允许更新。更新时我做了比较细节的处理,先查看要更新的权限点...


第13章 角色用户关系开发
本章带大家开发的是RBAC模型里的角色用户关系模块。相比角色权限关系开发,角色用户关系的开发会相对简单一些,这个主要体现在数据渲染上,这里我们引入duallistbox插件来展示待选用户和已选用户。后台的更新操作和角色权限关系开发基本是一致的,祝大家学习愉快! ...


第14章 RBAC模型附加功能开发
本章首先带大家完成部门删除、权限删除功能的开发和交互,之后完成了两个特别实用的接口,分别是查询用户已分配的角色和权限和查询权限被分配的角色和拥有指定权限的用户,这个特别有助于维护权限的管理员通过各个角度对分配的权限进行查看,虽然是一个权限管理系统的非核心的,附加的功能,但是从一个产品的易用性和管理员...


第15章 权限拦截模块开发
本章带大家开发的是权限拦截模块。在RBAC模型功能完备的基础上,借助RBAC提供的数据,利用Filter拦截后台请求,编写我们定义的权限拦截规则,并对无权限访问的请求和页面做了特殊的处理。这里可扩展度很高,主要是把控权限拦截的细节,可以根据业务的需要做定制及扩展。提供系统的高度拓展性。 ...


第16章 权限缓存模块开发(Redis分布式)
本章我们引入了redis来做权限缓存,让系统变成分布式的系统,在封装好java操作redis的配置后,会大大家分析缓存可以放在哪些方法上。之后我会带大家分析权限拦截涉及到的方法,分析出需要缓存的方法,然后我会演示如何有针对性的对指定的方法进行缓存,并验证通过。过程中我会简单演示使用Redis Desktop Manager客户端来...


第17章 权限操作记录模块开发
这一章对于做好权限管理特别重要,也是绝大部分权限系统和流行的权限框架都缺少的。我们将系统里部门、用户、权限模块、权限点、角色、角色与权限、角色与用户的新增、更新的日志全部记录下来,在页面上分页展示,并支持根据类型、操作人关键字、更新前关键字、更新后关键字、更新时间段进行查询,这极大的方便了权限系统的...


第18章 课程总结
恭喜那些能坚持学习到最后一章的同学,课程讲到这就要结束了,煽情的话就不多说了,还是多留点时间给大家总结一下这套原生系统相对于流行的权限框架的一些优点,并指出了这套原生系统的可扩展点及灵活性,方便大家活学活用,根据自己面对的业务需求进行选择和拓展,非常希望这门课能给大家带来提高和收获,这是做这门课程最...

 

下载地址:百度网盘下载






































































以上是关于java如何做权限管理的主要内容,如果未能解决你的问题,请参考以下文章

Java多权限如何控制页面功能

java web的用户角色权限管理是如何实现的?

java web的用户角色权限管理是如何实现的?

Java开发企业级权限管理系统

JAVA开发网站管理员登录怎么控制权限不同隐藏还是显示菜单

Java开发企业级权限管理系统课程 电商权限管理系统视频教程 共18章