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 秒;

温馨提示:内容为网友见解,仅供参考
第1个回答  2018-03-31

思路:

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平台。

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

java如何做权限管理?
4、角色菜单权限表 role_menu;5、用户菜单权限表 user_menu;Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思...

java更轻量级的权限管理框架:jcasbin
path, method)方法即可判断用户是否具有访问某个资源的权限,这一过程可以根据业务需求灵活扩展和配置。此外,该框架还为扩展性和灵活性提供了良好的支持,例如与SpringCloud的集成,实现用户的一站式登录和统一权限管理。总之

我运行Java是遇到的问题,怎样获得管理员权限,在win7家庭普通版下面_百 ...
回答:右键点你的编程软件,选择属性,在兼容性页面。选上已管理员身份运行此程序。然后确定。以后就可以了

java权限管理框架有哪些?
java如何做权限管理?1、角色菜单权限表role_menu;用户菜单权限表user_menu;Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。2、:如果你登陆页面之后,比如想点一个按钮提交,那么如果你有这么权限才...

现本人要做一个权限管理模块,急需java写的权限管理模块的源码一份做...
关于权限管理,如果是网站的话,最简单的方式就是用过滤器。通过用户访问的URL进行控制。这种方式,在写控制或网页时,不用考虑权限问题!权限由过滤器统一管理。spring 的servlet.xml配置如下:<!-- 权限系统 拦截 --> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="\/admin\/**" \/> <...

java web的用户角色权限管理是如何实现的?
用户权限管理一般是用servlet的过滤器来实现的。过滤器会过滤访问相关资源(这个是在web.xml里面配置的)的请求。如果楼主要实现防止未登录用户访问相关资源。只要在过滤器里判断该用户是否登录,也就是楼主所说的session中的用户状态属性。是登陆的则放行,否则拒绝。过滤器的用法就不在这里写了,网上很多...

java 权限管理系统中数据权限的设计与使用
一般都是给菜单授权,角色授予菜单,授予菜单权限的用户能操作相应的菜单。你这个是给角色授予查询表的权限,还有多少条记录的。查多少条记录,这个真心不知道怎么搞;授予查询表的权限的这个应该不难,每次查之前都先验证一下是否在授权范围之类。多表查询的只要一个不满足就不能查询。

用java swing 编写的进销存管理系统,现在想问一下,权限管理如何...
每个功能模块都有一个权限代码,表的字段如下 tbl1 权限表 权限编号 权限说明 01 功能1 02 功能2 tbl2 用户权限表 用户名 权限 user1 01 在进入某个功能的时候判断用户权限表里面有没有改用户使用该功能的权限,没有的话提示没有权限就行了。

java oa管理系统 权限管理问题
根据session取出。比如登陆进去的时候,需要选择,产品经理、生产经理需要选择相应的部门,不同的部门分配不同的id,比如id 0=生产经理,这样就可以区分权限了

javaweb如何控制用户权限
用户登录后你用session存储了用户的对象,把用户的权限也放到session中,然后每个页面的顶部都做个判断,在页面中用session获得登录用户的对象和权限,然后判断权限,如果有权限就继续执行,不能访问则跳转到其他页面。

相似回答