权限管理模块

持续填坑中。。。。

一、目的及需求

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

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

数据库是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}" onclick="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实现了,但是自己写的过程中学到了很多,从前端到后台到数据库查询,这是一个学习的过程。

猜你喜欢

转载自blog.csdn.net/zhulier1124/article/details/79224876