java web实现用户权限管理

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

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

实现效果:

java web实现用户权限管理_第1张图片

数据库设计,设计如下:

用户:user

角色:role

用户-角色:user_role

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

角色-资源:role_resource

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

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

后台实现
展示层采用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; 
 } 
} 

 java web实现用户权限管理_第2张图片

以上就是该权限管理中权限树的大体实现,完成了java web实现用户权限管理的功能,希望对大家的学习有所帮助。

你可能感兴趣的:(java web实现用户权限管理)