java web简单权限管理设计

源码免费下载地址:关注微信公众号“虾米聊吧”,回复关键字“权限

 

推荐最新技术springboot版权限管理java后台通用权限管理系统(springboot)),采用最新技术架构,功能强大

注:由于该项目比较老,所以没有采用maven管理,建议下载springboot权限管理系统,对学习和使用会更有帮助。

springboot权限管理系统介绍地址:https://blog.csdn.net/zwx19921215/article/details/97806078

springboot权限管理系统初级版下载地址:http://zyshare.cn/resource/detail/3

springboot权限管理系统高级版下载地址:http://zyshare.cn/resource/detail/7

springboot个人博客系统:https://blog.csdn.net/zwx19921215/article/details/102665020

后台管理系统模板html打包下载: http://zyshare.cn/resource/detail/14

 

最近在做一个网站类型项目,主要负责后台,ui框架选型为jquery easy ui,项目架构为spring mvc + spring jdbc,简单易用好上手!搭建好框架后开始了第一个任务,设计并实现一套简单的权限管理功能。

一套最基本的权限管理包括用户、角色、资源。

 

数据库设计

我的设计如下:

用户:user

角色:role

用户-角色:user_role

资源:resource(包括上级菜单、子菜单、按钮等资源)

角色-资源:role_resource

标准的权限管理系统设计为以上5张表。

 

注:用户、用户-角色我就不做说明了,这两个是很简单的两块,用户的crud,以及为用户分配角色(多对多的关系)稍微琢磨一下就清楚了,下面都是针对为角色分配权限的实现

效果图:

java web简单权限管理设计_第1张图片

项目结构

java web简单权限管理设计_第2张图片

 

后台实现

展示层采用ztree树

 

role.jsp

 

<%@ page contentType="text/html;charset=UTF-8"%>
<%@ include file="/views/back/include/taglib.jsp"%>









	
	
角色名称 描述 创建时间
用户名: 创建日期: 至: 查询

 

 

action层
RoleAction.java

 

 

 

@RequestMapping(value = "/treedata.jhtml")
	@ResponseBody
	public String treedata(HttpServletRequest request, Model model) {
		DynamicParams params = new DynamicParams(request);
		List> mapList = Lists.newArrayList();

		params.put("allMenu", "allMenu");
		List list = authManager.findMenuList(params);

		List roleMenus = authManager.findRoleMenuList(params);

		for (int i = 0; i < list.size(); i++) {
			Menu e = list.get(i);
			Map map = Maps.newHashMap();
			map.put("id", e.getId());
			map.put("pId", e.getParentId() != null ? e.getParentId() : 0);
			map.put("name", e.getName());
			for (RoleMenu roleMenu : roleMenus) {
				if (roleMenu.getMenuId() == e.getId()) {
					map.put("checked", true);
				}
			}
			mapList.add(map);
		}

		return toJson(mapList);
	}

 

 

 

 

 

service层

AuthManager.java

 

// 菜单管理

	public List findMenuList(DynamicParams params) {
		List menus = new ArrayList();

		if ("allMenu".equals(params.getString("allMenu"))) {
			menus = menuDao.findList(params);
		} else {
			// 通过用户查询角色
			List userRoles = userRoleDao.findList(params);
			// 通过角色查询菜单
			List roleMenus = new ArrayList();
			if (userRoles != null && userRoles.size() > 0) {
				for (UserRole userRole : userRoles) {
					params = new DynamicParams();
					if (userRole != null) {
						if (userRole.getRoleId().equals(params.getString("rid"))) {
							break;
						}
						params.put("roleId", userRole.getRoleId().toString());
						List rms = roleMenuDao.findList(params);
						for (RoleMenu roleMenu : rms) {
							roleMenus.add(roleMenu);
						}
					}
				}
			}

			// 查询菜单信息
			for (RoleMenu roleMenu : roleMenus) {
				if (roleMenu != null) {
					Menu menu = menuDao.find(roleMenu.getMenuId());
					if (menu != null) {
						menus.add(menu);
					}
				}
			}
			menus = removeDuplicate(menus);
			Collections.sort(menus);
		}
		return menus;
	}
/**
	 * 去除菜单中重复项
	 * 
	 * @param list
	 * @return
	 */
	private List removeDuplicate(List list) {
		List result = new ArrayList();
		Set menuIds = new HashSet();
		for (int i = 0; i < list.size(); i++) {
			Menu m = list.get(i);
			if (m != null && menuIds.add(m.getId())) {
				result.add(m);
			}
		}
		return result;
	}

 

public List findRoleMenuList(DynamicParams params) {
		List roleMenus = roleMenuDao.findList(params);
		return roleMenus;
	}

 

 

Dao层

menuDao

@Override
	protected void createQuery(DynamicParams params, StringBuffer sql, List args) {
		sql.append("select s.* from sys_menu s where 1=1 ");

		String parentId = params.getString("parentId");
		if (StringUtils.isNotBlank(parentId)) {
			sql.append(" and parent_id = ? ");
			args.add(parentId);
		}

		String sort = params.getString("sort");
		String order = params.getString("order");

		if (StringUtils.isNotBlank(sort)) {
			sql.append(" order by ").append(hump2underline(sort));
			if (StringUtils.isNotBlank(order)) {
				sql.append(" " + order);
			} else {
				sql.append(" desc ");
			}
		} else {
			sql.append("order by sort asc,id desc ");
		}
	} 
  


userRoleDao

 

@Override
	protected void createQuery(DynamicParams params, StringBuffer sql, List args) {
		sql.append("select s.* from sys_user_role s where 1=1 ");
		Long adminId = params.getLong("adminId");
		if (adminId != null) {
			sql.append(" and s.user_id = ?");
			args.add(adminId);
		}
	} 
  


roleMenuDao

 

 

@Override
	protected void createQuery(DynamicParams params, StringBuffer sql, List args) {
		sql.append("select s.* from ").append("sys_role_menu").append(" s where 1=1 ");
		Long adminId = params.getLong("roleId");
		if (adminId != null) {
			sql.append(" and s.role_id = ?");
			args.add(adminId);
		}
	} 
  

 

 

 

在WEB-INF目录下建立文件夹tlds 建立自定义标签文件shiros.tld,我们通过自定义标签实现页面按钮的控制。

 

 



	p2p permission taglib
	permission taglib
	1.0
	p2p_back
	http://vanfon.p2p.cn/

	
		权限校验标签,有权限就显示标签体的内容,否则不显示
		permission
		com.vanfon.p2p.back.tag.PermissionTag
		JSP
		
			
			module
			true
			false
		
		
			
			code
			true
			false
		
	

 

 

自定义标签类

 

package com.vanfon.p2p.back.tag;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

import com.vanfon.p2p.entity.system.Admin;
import com.vanfon.p2p.entity.system.Menu;
import com.vanfon.p2p.manager.system.AuthManager;
import com.vanfon.p2p.utils.DynamicParams;
import com.vanfon.p2p.utils.SpringContextHolder;

/**
 * 权限控制标签
 * 
 * @author zhangwx
 * @date 2015-2-5
 */
public class PermissionTag extends TagSupport {

	/**
	 * 
	 */
	private static final long serialVersionUID = 4592227792811389132L;

	private String module;// 属性名必须与JSP自定义标签的属性名一样

	private String code;

	public String getModule() {
		return module;
	}

	public void setModule(String module) {
		this.module = module;
	}

	public String getCode() {
		return code;
	}

	public void setCode(String code) {
		this.code = code;
	}

	@Override
	public int doStartTag() throws JspException {
		boolean result = false;
		HttpServletRequest request = (HttpServletRequest) this.pageContext.getRequest();// 通过成员变量获取HttpServletRequest对象
		Admin admin = (Admin) request.getSession().getAttribute("admin");// 获取登录到系统的用户
		if (admin != null) {
			if ("1".equals(String.valueOf(admin.getIfsuper()))) {// 超级管理员
				result = true;
			} else {
				DynamicParams params = new DynamicParams();
				params.put("id", String.valueOf(admin.getId()));
				params.put("module", this.module);
				params.put("code", this.code);
				AuthManager authManager = SpringContextHolder.getBean(AuthManager.class);
				List userRoleAuths = authManager.findUserRoleAuthList(params);
				if (userRoleAuths != null && userRoleAuths.size() > 0) {
					result = true;
				}
			}
		}
		return result ? EVAL_BODY_INCLUDE : SKIP_BODY;
	}
}

 

 

 

 

 

 

 

 

以上就是该权限管理中权限树(为角色分配权限)的大体实现。

项目源码下载地址:http://www.zyshare.cn/resource/detail/1

注:由于本项目年代久远,所以技术比较老旧,新人学习建议此项目 java后台通用权限管理系统(springboot)

推荐项目:java后台通用权限管理系统(springboot)

博主qq:193459197  , qq群技术交流与支持:557911445

 

关注微信公众号“虾米聊吧”,回复“权限”获取源码,后续持续放送技术架构和资料干货!!!  

 

一个热衷于分享技术和生活的程序猿,让我们一起交流吧~      
                    
                  微信扫描二维码,关注我的公众号


 
 

你可能感兴趣的:(java,java)