权限管理模块

xiaoxiao2021-02-28  8

持续填坑中。。。。

一、目的及需求

目的很简单,做一个权限管理模块。

需求就是小项目使用,实现权限分配,不同角色用户登录只能看到自己权限内的菜单按钮等。

数据库是MySQL,用springMVC实现,前端用到easyUI的tree(树)和combobox(下拉复选框)。

因为是小项目所以就手写了权限系统。没想到花了挺长时间,记录下来以供复习。

二、思路和视图

1,总体思路:  给用户分配角色->给角色分配权限,用session存储权限,用户登录后前端取session权限,实现不同用户显示不同菜单按钮。 2,视图说明: (1)工号管理即用户管理,包含用户增删改查、角色增删改查、权限增删改查。

(2)用户列表增删改查,这里单独把分配角色放一个按钮,也可以放在修改信息中,修改信息的时候同时设置角色。

(3)点击分配角色按钮,弹框设置角色,因为一个用户可能有多个角色,所以这里是下拉多选。

(4)角色增删改查,也是单独把分配权限提出来,同理你也可以放在修改信息中。

(5)点击分配权限按钮,弹框配置权限,一个角色有多个权限,所以做成tree形式。

(6)权限增删改查,主要配置权限的请求地址、父子关系和标识等信息。

(7)点击详情按钮修改信息,同时加载父子关系。

三、数据库表

权限管理包括:用户表、角色表、用户-角色表、权限表、角色-权限表

四、关键点实现

1,前端取session判断是否显示菜单或按钮

(1)前端html页面判断这里判断使用Thymeleaf模板引擎也可以使用其他方式jsp直接使用c:if就可以

<li id="auth" th:if="${session.user.hasPermissionByName('工号管理')==true}" οnclick="clicktest()"> <a href="#"> <i class="fa fa-th-list fa-fw"> <div class="icon-bg bg-blue"></div> </i> <span class="menu-title" >工号管理</span> </a> </li> (2)后台根据名称判断是否有权限

/** * 判断用户是否有指定名称的权限 */ public boolean hasPermissionByName(String name){ List pNameList = (List) ContextHolderUtils.getSession().getAttribute("pNameList"); //超级管理员有所有的权限 if(isAdmin()){ return true; } //判断普通用户是否有指定名称的权限 for(Object pNameVal:pNameList){ if(pNameVal.toString().equals(name)){ return true; } } return false; } /** * 判断本用户是否是超级管理员 */ public boolean isAdmin(){ User u = (User)ContextHolderUtils.getSession().getAttribute("user"); return "admin".equals(u.getFdcLoginId()); }

2,SQL关联查询登录用户的权限

select ur.userid,ur.roleid,p.acl_value,p.moduleid,m.module_name,m.module_style,m.opt_value,m.orders,m.url,m.grade,m.parent_id from fx_user_role as ur,fx_permission as p,fx_module as m where ur.userid=?1 and ur.roleid=p.roleid and p.moduleid=m.id  其中?1为传入的用户id ,联合查询三个表的信息,我项目中使用单独vo对象List接收返回参数,如果不需要返回太多数据则只需用List接收就可以了

五、总结

虽然现在权限大多都用shiro实现了,但是自己写的过程中学到了很多,从前端到后台到数据库查询,这是一个学习的过程。

转载请注明原文地址: https://www.6miu.com/read-1900312.html

最新回复(0)