权限学习(spring+springMVC+mybatis)

权限学习(spring+springMVC+mybatis):

第一步:建表(oracle

create table role(

  rid VARCHAR2(40) NOT NULL,

  pid VARCHAR2(40),

  name VARCHAR2(30),

  description VARCHAR2(300),

  checked  number(1),

   PRIMARY KEY  ( rid )

);

create table sys_user_role(

  id VARCHAR2(40) NOT NULL,

  userid VARCHAR2(40),

  rid VARCHAR2(40),

   PRIMARY KEY  ( id )

);

create table privilege(

  id VARCHAR2(40) NOT NULL,

  pid VARCHAR2(40),

  Name VARCHAR2(40),

  flag VARCHAR2(20),

  checked  number(1),

  isParent  number(1),

  url VARCHAR2(300),

  target VARCHAR2(100),

  icon VARCHAR2(300),

   PRIMARY KEY  ( id )

);

create table sys_privilege_role(

  id VARCHAR2(40) NOT NULL,

  pid VARCHAR2(40),

  rid VARCHAR2(40),

   PRIMARY KEY  ( id )

);

create table AUTH_USER_P  (

   AUTH_USER_ID         VARCHAR2(40)                    not null,

   USERNAME             VARCHAR2(50),

   PASSWORD             VARCHAR2(20),

  REMARK               VARCHAR2(600),

   CREATE_TIME          TIMESTAMP(6),

   STATE         integer,

   c_online         integer,

  primary key (AUTH_USER_ID)

);

 

声明一个数组类型:

create or replace type id_string_array as varray(500) of varchar2(500);

写存储过程,用于建立多对多的关系,就是往sys_user_rolesys_privilege_role两张表插入数据实现用户添加角色,角色添加菜单的功能,由于我是新手,所以不知道怎么去处理这个关系,只能这样写存储过程了,如果有好的解决方案希望大神能告诉我!也许能自动建立关系,但是我还没弄懂。只能继续学习了。

存储过程一,sys_privilege_role

create or replace procedure sys_privilege_role_insert(roleid in varchar2,privilegeid in id_string_array) is

begin

delete from sys_privilege_role where rid=roleid;

  for x in 1..privilegeid.count loop

Insert into sys_privilege_role(id,rid,pid) values (sys_guid(),roleid,to_char(privilegeid(x)));

      

  end loop;

  commit;

end sys_privilege_role_insert;

存储过程二,sys_user_role

create or replace procedure sys_user_role_insert(user_id in varchar2,roleid in id_string_array) is

begin

  delete from sys_user_role where userid=user_id;

  for x in 1..roleid.count loop

      insert into sys_user_role(id,userid,rid) values (sys_guid(),user_id,to_char(roleid(x)));

      

  end loop;

  commit;

end sys_user_role_insert;

 

 

第二步:建实体类(省略get,set方法)

Privilege:

package cn.itcast.jk.domain;

import java.io.Serializable;

import java.util.List;

public class Privilege implements Serializable{

private String id;//主键

private String pid;//父节点ID

private String name;//节点的名称

private String flag;//"1"为菜单   "2"为功能

private Integer checked;

private String url;//跳转到的链接

private String target;//跳转到的frame的名字

private Integer isParent;

private String icon;//图片的路径

private List<Role> roles;

Role:

package cn.itcast.jk.domain;

import java.io.Serializable;

import java.util.List;

public class Role implements Serializable{

private String rid;

private String name;

private String pid;//父节点的id

private String description;

private List<User> users;

private List<Privilege> privileges;

private Integer checked;

User:

package cn.itcast.jk.domain;

import java.io.Serializable;

import java.util.Date;

import java.util.List;

import cn.itcast.jk.util.LoginTypeEnum;

public class User implements Serializable{

private String id;

private String username;//姓名

private String password;//密码

private String remark;//备注

private Date createTime;//创建日期

private Integer state;//状态 1:启用  2:停用

private Integer online;// 1:在线  2:不在线

private List<Role> roleList;

第三步:写xml文件

RoleMapper.xml:

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE mapper

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="cn.itcast.jk.mapper.RoleMapper">

<resultMap type="cn.itcast.jk.domain.Role" id="roleRM">

<id column="rid" property="rid" />

<result column="name" property="name" />

<result column="pid" property="pid" />

<result column="description" property="description" />

<result column="checked" property="checked" />

</resultMap>

<select id="getRoleByUid" resultMap="roleRM">

select * from role where rid in (select rid from sys_user_role where userid=#{uid})

</select>

<select id="getRoles" resultMap="roleRM">

select * from role

</select>

</mapper>

PrivilegeMapper.xml:

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE mapper

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="cn.itcast.jk.mapper.PrivilegeMapper">

<resultMap type="cn.itcast.jk.domain.Privilege" id="privilegeRM">

<id column="id" property="id" />

<result column="pid" property="pid"/>

<result column="name" property="name"/>

<result column="flag" property="flag"/>

<result column="checked" property="checked"/>

<result column="url" property="url"/>

<result column="target" property="target"/>

<result column="isParent" property="isParent"/>

<result column="icon" property="icon"/>

</resultMap>

<!-- 根据flag查询菜单 -->

<select id="getMenuitems" resultMap="privilegeRM">

select * from Privilege

</select>

<!-- 根据rid查询菜单 -->

<select id="getMenuitemsByUid" resultMap="privilegeRM">

select * from Privilege where flag='1' and id in(select pid from sys_privilege_role where (

 <foreach collection="array" item="rid" open="(" close=")" separator="or">

 rid=#{rid}

 </foreach>

 ) )

</select>

<!-- 根据rid查询功能 -->

<select id="getFunctionByRid" resultMap="privilegeRM">

select * from Privilege where flag='2' and id in(select pid from sys_privilege_role where (

 <foreach collection="array" item="rid" open="(" close=")" separator="or">

 rid=#{rid}

 </foreach>

 ) )

</select>

</mapper>

第四步:写dao

BaseDaoImpl:

package cn.itcast.jk.dao.impl;

import java.io.Serializable;

import java.util.List;

 

import org.apache.ibatis.session.SqlSessionFactory;

import org.mybatis.spring.support.SqlSessionDaoSupport;

import org.springframework.beans.factory.annotation.Autowired;

 

import cn.itcast.jk.dao.BaseDao;

 

public class BaseDaoImpl<T>extends SqlSessionDaoSupport implements BaseDao<T> {

@Autowired

public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory){

super.setSqlSessionFactory(sqlSessionFactory);

}

private String ns; //命名空间

public String getNs() {

return ns;

}

 

public void setNs(String ns) {

this.ns = ns;

}

 

public void insert(T t) {

this.getSqlSession().insert(ns+".insert", t);

}

 

public void deleteById(Serializable id) {

this.getSqlSession().delete(ns+".deleteById", id);

}

 

public void update(T t) {

this.getSqlSession().update(ns+".update", t);

}

 

public List<T> find(T t) {

return this.getSqlSession().selectList(ns+".find", t);

}

 

public void delete(Serializable[] ids) {

this.getSqlSession().delete(ns+".delete", ids);

}

 

public T get(Serializable id) {

return this.getSqlSession().selectOne(ns+".get", id);

}

 

}

PrivilegeDaoImpl:

package cn.itcast.jk.dao.impl;

 

import java.util.Arrays;

import java.util.Collection;

import java.util.HashSet;

import java.util.List;

 

import javax.annotation.Resource;

import javax.servlet.http.HttpServletRequest;

 

import org.springframework.jdbc.core.JdbcTemplate;

import org.springframework.stereotype.Repository;

 

import cn.itcast.jk.dao.PrivilegeDao;

import cn.itcast.jk.dao.RoleDao;

import cn.itcast.jk.dao.UserDao;

import cn.itcast.jk.domain.Privilege;

import cn.itcast.jk.domain.Role;

import cn.itcast.jk.domain.User;

@Repository

public class PrivilegeDaoImpl extends BaseDaoImpl<Privilege> implements PrivilegeDao {

public PrivilegeDaoImpl(){

this.setNs("cn.itcast.jk.mapper.PrivilegeMapper");    //设置命名空间

}

@Resource

private RoleDao roleDao;

@Resource

private UserDao userDao;

@Resource

private JdbcTemplate jdbcTemplate;

@Resource

private HttpServletRequest request;

/**

 * 获得菜单

 */

@Override

public Collection<Privilege> getMenuitemsByUid(String uid, String username) {

List<Privilege> privileges = null;

if("admin".equals(username)){

privileges = this.getSqlSession().selectList(getNs()+".getMenuitems");

request.getSession().setAttribute("privileges",privileges);

}else{

List<Role> list=this.roleDao.getRoleByUid2(uid,username);

StringBuffer sb=new StringBuffer();

for(int i=0;i<list.size();i++){

String id=list.get(i).getRid();

if(i<list.size()-1){

sb.append(id+",");

}else{

sb.append(id);

}

}

String s=sb.toString();

String[] rid=s.split(",");

privileges = this.getSqlSession().selectList(getNs()+".getMenuitemsByRid",rid);

request.getSession().setAttribute("privileges",privileges);

}

return new HashSet<Privilege>(privileges);

}

/**

 * 获得功能

 */

@Override

public Collection<Privilege> getFunctionByUid(String uid) {

List<Privilege> privileges = null;

User u=this.userDao.get(uid);

String username=u.getUsername();

List<Role> list=(List<Role>)this.roleDao.getRoleByUid(uid,username);

StringBuffer sb=new StringBuffer();

for(int i=0;i<list.size();i++){

String id=list.get(i).getRid();

if(i<list.size()-1){

sb.append(id+",");

}else{

sb.append(id);

}

}

String s=sb.toString();

String[] rid=s.split(",");

privileges = this.getSqlSession().selectList(getNs()+".getFunctionByRid",rid);

return new HashSet<Privilege>(privileges);

}

/**

 * 根据ids获取资源

 */

/*@Override

public Set<Privilege> getPrivilegeByIds(String[] ids){

List<Privilege> list=this.getSqlSession().selectList(getNs()+".getPrivilegeByIds", ids);

return new HashSet<Privilege>(list);

}*/

/**

 * 为角色添加菜单

 * 参数:rid:角色id;ids:权限id的数组集合

 */

@Override

public void insertPrivilege(String rid,String[] ids){

StringBuffer sb=new StringBuffer();

sb.append("call sys_privilege_role_insert('");

sb.append(rid+"',id_string_array(");

for(int i=0;i<ids.length;i++){

sb.append("'");

String id=ids[i];

sb.append(id);

if(i!=ids.length-1){

sb.append("',");

}else{

sb.append("'");

}

}

String sql=sb.toString();

this.jdbcTemplate.execute(sql+"))");

}

}

RoleDaoImpl:

package cn.itcast.jk.dao.impl;

 

import java.util.Collection;

import java.util.HashSet;

import java.util.List;

 

import javax.annotation.Resource;

 

import org.springframework.jdbc.core.JdbcTemplate;

import org.springframework.stereotype.Repository;

 

import cn.itcast.jk.dao.RoleDao;

import cn.itcast.jk.domain.Privilege;

import cn.itcast.jk.domain.Role;

 

@Repository

public class RoleDaoImpl extends BaseDaoImpl<Role> implements RoleDao {

public RoleDaoImpl() {

this.setNs("cn.itcast.jk.mapper.RoleMapper"); // 设置命名空间

}

 

@Resource

private JdbcTemplate jdbcTemplate;

 

/**

 * 根据UID获取角色

 */

@Override

public Collection<Role> getRoleByUid(String uid, String username) {

List<Role> lists=null;

if ("admin".equals(username)) {

lists = this.getSqlSession().selectList(

getNs() + ".getRoles");

} else {

lists = this.getSqlSession().selectList(

getNs() + ".getRoleByUid", uid);

}

return new HashSet<Role>(lists);

}

@Override

public List<Role> getRoleByUid2(String uid, String username) {

List<Role> lists=null;

if ("admin".equals(username)) {

lists = this.getSqlSession().selectList(

getNs() + ".getRoles");

} else {

lists = this.getSqlSession().selectList(

getNs() + ".getRoleByUid", uid);

}

return lists;

}

 

/**

 * 根据rids获取角色

 */

/*

 * @Override public Set<Role> getRolesByIds(String[] ids){ List<Role>

 * list=this.getSqlSession().selectList(getNs()+".getRolesByIds", ids);

 * return new HashSet<Role>(list); }

 */

/**

 * 为用户添加角色 参数:uid:用户id;ids:角色id的数组集合

 */

@Override

public void insertRole(String uid, String[] ids) {

StringBuffer sb = new StringBuffer();

sb.append("call sys_user_role_insert('");

sb.append(uid + "',id_string_array(");

for (int i = 0; i < ids.length; i++) {

sb.append("'");

String id = ids[i];

sb.append(id);

if (i != ids.length - 1) {

sb.append("',");

} else {

sb.append("'");

}

}

String sql = sb.toString();

this.jdbcTemplate.execute(sql + "))");

}

}

第五步:写service

RoleServiceImpl:

package cn.itcast.jk.service.impl;

 

import javax.annotation.Resource;

 

import org.springframework.stereotype.Service;

 

import cn.itcast.jk.dao.RoleDao;

import cn.itcast.jk.service.RoleService;

@Service

public class RoleServiceImpl implements RoleService {

@Resource

private RoleDao roleDao;

@Override

public void insertRole(String uid, String[] ids) {

this.roleDao.insertRole(uid, ids);

}

@Override

public Collection<Role> getRoles(String id, String username) {

return this.roleDao.getRoleByUid(id,username);

}

}

PrivilegeServiceImpl:

package cn.itcast.jk.service.impl;

 

import java.util.Collection;

 

import javax.annotation.Resource;

 

import org.springframework.stereotype.Service;

 

import cn.itcast.jk.dao.PrivilegeDao;

import cn.itcast.jk.domain.Privilege;

import cn.itcast.jk.service.PrivilegeService;

@Service

public class PrivilegeServiceImpl implements PrivilegeService {

@Resource

private PrivilegeDao privilegeDao;

 

@Override

public Collection<Privilege> PrivilegesByUid(String id, String username) {

return  this.privilegeDao.getMenuitemsByUid(id,username);

}

 

@Override

public void insertPrivilege(String rid, String[] ids) {

this.privilegeDao.insertPrivilege(rid, ids);

}

 

@Override

public Collection<Privilege> getFunctionByUid(String uid) {

return this.privilegeDao.getFunctionByUid(uid);

}

}

第六步:controller

RoleController:

 package cn.itcast.jk.controller;

 

import java.util.Collection;

 

import javax.annotation.Resource;

import javax.servlet.http.HttpServletRequest;

 

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.ResponseBody;

 

import cn.itcast.jk.domain.Privilege;

import cn.itcast.jk.domain.Role;

import cn.itcast.jk.domain.User;

import cn.itcast.jk.service.RoleService;

 

@Controller

public class RoleController extends BaseController{

@Resource

private RoleService roleService;

@RequestMapping("/role/list.action")

public String list(){

return "/system_admin/role/list.jsp";

}

@RequestMapping("/role/insertUI.action")

public String insertUI(){

return "/system_admin/role/roleCreate.jsp";

}

/**

 * 加载角色树

 */

@RequestMapping("/showRole.action")

@ResponseBody

public Collection<Role> showMenuitemTreeByUid(HttpServletRequest request){

User user=(User) request.getSession().getAttribute("user");

Collection<Role> roles=this.roleService.getRoles(user.getId(),user.getUsername());

return roles;

}

/**

 * 保存

 */

@RequestMapping("/saveRole.action")

@ResponseBody

public void saveRole(String uid,String roleStr){

String[] checkedNodes=roleStr.split(",");

this.roleService.insertRole(uid, checkedNodes);

}

}

PrivilegeController:

package cn.itcast.jk.controller;

 

import java.util.Collection;

 

import javax.annotation.Resource;

import javax.servlet.http.HttpServletRequest;

 

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.ResponseBody;

 

import cn.itcast.jk.domain.Privilege;

import cn.itcast.jk.domain.User;

import cn.itcast.jk.service.PrivilegeService;

@Controller

public class PrivilegeController extends BaseController{

@Resource

private PrivilegeService privilegeService;

/**

 * 加载菜单树

 */

@RequestMapping("/showMenuitemTreeByUid.action")

@ResponseBody

public Collection<Privilege> showMenuitemTreeByUid(HttpServletRequest request){

User user=(User) request.getSession().getAttribute("user");

Collection<Privilege> privileges=this.privilegeService.PrivilegesByUid(user.getId(),user.getUsername());

return privileges;

}

/**

 * 保存

 */

@RequestMapping("/savePrivilege.action")

@ResponseBody

public void savePrivilege(String rid,String privilegeStr){

String[] privilegeStrs=privilegeStr.split(",");

this.privilegeService.insertPrivilege(rid, privilegeStrs);

}

}

第六步:jsp(树控件为zTree)

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<script language="javascript" src="${pageContext.request.contextPath}/js/jquery-1.4.2.js"></script>

<script language="javascript" src="${pageContext.request.contextPath}/js/jquery-ztree-2.5.js"></script>

<script language="javascript" src="${pageContext.request.contextPath}/js/menuitem2.js"></script>

<script language="javascript" src="${pageContext.request.contextPath}/js/role-privilege.js"></script>

<script language="javascript" src="${pageContext.request.contextPath}/js/user-role.js"></script>

<html>

<head>

<title>导航菜单</title>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<link rel="stylesheet" href="zTreeStyle/zTreeStyle.css" type="text/css">

</head>

<body style="margin: 0">

<TABLE border=0 width="700">

<TR>

<TD width=340px align=center valign=top>

<div class="zTreeDemoBackground">

<ul id="menuTree" class="tree"></ul>

</div>

</TD>

</TR>

</TABLE>

<div>

<!-- 之所以保存的时候rid没值是因为这个隐藏域没值,即没勾选哪个角色。因为只是做权限,没做增删改查的基本操作-->

<input type="hidden" name="rid">

<a href="#" id="hehe">设置权限</a>

</div>

<div class="ItemBlockBorder" style="display: none;" id="privilegeContent">

          <div class="ItemBlock">

              <table cellpadding="0" cellspacing="0" class="mainForm">

<!--表头-->

<thead>

<tr align="LEFT" valign="MIDDLE" id="TableTitle">

<td width="300px" style="padding-left: 7px;">

<!-- 如果把全选元素的id指定为selectAll,并且有函数selectAll(),就会有错。因为有一种用法:可以直接用id引用元素 -->

<input type="checkbox" id="allchecked" />

<label for="cbSelectAll">全选</label>

</td>

</tr>

</thead>

                 

    <!--显示数据列表-->

<tbody id="TableData">

<tr class="TableDetail1">

<!-- 显示权限树 -->

<td>

<ul id='privilegeTree' class="tree"></ul>

<img id="loading" src="css/images/loading.gif">

</td>

</tr>

</tbody>

              </table>

          </div>

      </div>

      <!-- 表单操作 -->

      <div id="InputDetailBar">

          <a id="savePrivilege" href="#">保存</a>

   </div>

<div>

<input type="hidden" name="uid">

<a href="#" id="haha">设置角色</a>

</div>

<div class="ItemBlockBorder" style="display: none;" id="privilegeContent2">

            <div class="ItemBlock">

                <table cellpadding="0" cellspacing="0" class="mainForm">

<!--表头-->

<thead>

<tr align="LEFT" valign="MIDDLE" id="TableTitle2">

<td width="300px" style="padding-left: 7px;">

<!-- 如果把全选元素的id指定为selectAll,并且有函数selectAll(),就会有错。因为有一种用法:可以直接用id引用元素 -->

<input type="checkbox" id="allchecked2"/>

<label for="cbSelectAll">全选</label>

</td>

</tr>

</thead>

                   

    <!--显示数据列表-->

<tbody id="TableData2">

<tr class="TableDetail1">

<!-- 显示角色树 -->

<td>

<ul id='roleTree2' class="tree"></ul>

<img id="loading2" src="css/images/loading.gif"/>

</td>

</tr>

</tbody>

                </table>

            </div>

        </div>

        <!-- 表单操作 -->

        <div id="InputDetailBar">

             <a id="savePrivilege2" href="#">保存</a>

        </div>

</body>

</html>

第六步:JS

menuitem2.js:

var menu={

init:{

initEvent:function(){

menu.op.saveTree();

}

},

op:{

setting: {

            isSimpleData: true,

            treeNodeKey: "id",

            treeNodeParentKey: "pid",

            showLine: true,

            root: {

                isRoot: true,

                nodes: []

            }

    },

    saveTree:function(){

     $.post("showMenuitemTreeByUid.action",null,function(data){

     $("#menuTree").zTree(menu.op.setting,data);

     });

    }

}

};

$().ready(function(){

menu.init.initEvent();

});

role-privilege.js:

var privilege={

data:{

role:{

name:'',

rid:''

}

},

init:{

initData:function(){

privilege.data.role.name=$(this).parent().siblings("td:first").text();

privilege.data.role.rid=$(this).parent().siblings("input[type='hidden']").val();

},

initEvent:function(){

$("#hehe").each(function(){

if($(this).text()=="设置权限"){

$(this).unbind("click");

$(this).bind("click",function(){

privilege.option.divOpt.showDiv();//显示DIV

privilege.init.initData.call(this);//获取数据

privilege.option.privilegeName.showName();//显示角色名称

privilege.option.privilegeTree.checkedState("disabled");//设置全选复选框为不可用,等到加载权限树完成后才可用

privilege.option.privilegeTree.showLoadingOrPrivilege({privilegeTree:false});//显示等待图标

privilege.option.privilegeTree.savePrivilegeTree();//加载树

return false;

});

$("#allchecked").unbind("change");

$("#allchecked").bind("change",function(){

privilege.option.privilegeTree.allChecked.call(this);

});

$("#savePrivilege").unbind("click");

$("#savePrivilege").bind("click",function(){

privilege.option.privilegeTree.savePrivilege();

});

}

});

}

},

option:{

divOpt:{

showDiv:function(){

$("#privilegeContent").show();

}

},

privilegeName:{

showName:function(){

$("#roleImage").text("角色:"+privilege.data.role.name);

}

},

privilegeTree:{

 returnValues:'',

 setting: {

                isSimpleData: true,

                treeNodeKey: "id",

                treeNodeParentKey: "pid",

                showLine: true,

                root: {

                    isRoot: true,

                    nodes: []

                },

                //显示树上的复选框

                checkable:true,

                //给权限树添加事件

                callback:{

change:function(){

 //调用setAllChecked方法设置全选复选框的状态

privilege.option.privilegeTree.setAllChecked();

}

}

 },

 savePrivilegeTree:function(){

 $.post("showMenuitemTreeByUid.action",{

 rid:privilege.data.role.rid

 },function(data){

 privilege.option.privilegeTree.returnValues=$("#privilegeTree").zTree(privilege.option.privilegeTree.setting,data);

 privilege.option.privilegeTree.checkedState("");

 privilege.option.privilegeTree.showLoadingOrPrivilege({privilegeTree:true});

 privilege.option.privilegeTree.setAllChecked();

 });

 },

 checkedState:function(data){

 $("#allchecked").attr("disabled",data);

 },

 showLoadingOrPrivilege:function(json){

 if(json.privilegeTree){

 $("#privilegeTree").show();

 $("#loading").hide();

 }else{

 $("#privilegeTree").hide();

 $("#loading").show();

 }

 },

 allChecked:function(){

 if($(this).attr("checked")){

 privilege.option.privilegeTree.returnValues.checkAllNodes(true);

 }else{

 privilege.option.privilegeTree.returnValues.checkAllNodes(false);

 }

 },

 setAllChecked:function(){

 var arr= privilege.option.privilegeTree.returnValues.getCheckedNodes(false);

 for(var i=0;i<arr.length;i++){

 if(arr.length==0){

 $("#allchecked").attr("checked",true);

 }else{

 $("#allchecked").attr("checked",false);

 }

 }

 },

 savePrivilege:function(){

 var array= privilege.option.privilegeTree.returnValues.getCheckedNodes(true);

 var privilegeStr="";

 for(var i=0;i<array.length;i++){

 if(i==array.length-1){

 privilegeStr=privilegeStr+array[i].id;

 }else{

 privilegeStr=privilegeStr+array[i].id+",";

 }

 }

 var p={

rid:privilege.data.role.rid,

privilegeStr:privilegeStr

//privilegeStr:array

 };

 $.post("savePrivilege.action",p,function(data){

 alert("保存成功");

 });

 }

}

}

};

$().ready(function(){

privilege.init.initEvent();

});

user-role.js:

var role={

//专门用来存放数据的

data:{

user:{

username:'',

uid:''

}

},

init:{

//初始化数据的方法

initData:function(){

//给usernameuid赋值-----this代表超链接

role.data.user.username = $(this).parent().siblings("td:first").text();

            role.data.user.uid = $(this).parent().siblings("input[type='hidden']").val();

},

//初始化事件的方法-------有3个事件

initEvent:function(){

//第一个事件,给设置角色声明click事件

//$("#haha").each(function(){//遍历每一个超链接

//if($(this).text()=="设置角色"){//如果a的文本为设置角色,则绑定事件

$("#haha").unbind("click");

$("#haha").bind("click",function(){

//触发后执行以下的事情

//第一步:会显示出 div

role.option.divOpt.showDiv();

//第二步:给usernameuid赋值

role.init.initData.call(this);//相当于this调用initData方法

//第三步:动态显示出名称

role.option.usernameOpt.showUsername();

//设置全选复选框的初始化状态值为不可用

role.option.roleTree.changeCheckBoxStatus("disabled");

//显示loading,隐藏roleTree

role.option.roleTree.changeLoadingAndRoleTree({

roleTree:false

});

//第四步:加载角色树

role.option.roleTree.loadRoleTree();

return false;

});

//}

//});

//第二个事件,给全选框添加change事件

$("#allchecked2").unbind("change");

$("#allchecked2").bind("change",function(){

//触发后执行以下的事情

 role.option.roleTree.allChecked.call(this);

});

//第三个事件,点击<保存>触发的click事件

$("#savePrivilege2").unbind("click");

$("#savePrivilege2").bind("click",function(){

//触发后执行以下的事情

role.option.roleTree.saveRole();

});

}

},

//页面的控制操作

option:{

// 1.涉及到div的操作

divOpt:{

showDiv:function(){

$("#privilegeContent2").show();

}

},

//2.涉及到username的操作

usernameOpt:{

//显示用户名称

showUsername:function(){

$("#userImage2").text("用户:"+role.data.user.username);

}

},

//3.涉及到权限树的操作

roleTree:{

//接受zTree函数的返回值-----

//当树加载完成后会有一个返回值,

//用zTreePlugin此变量接收,此返回值对全选复选框的功能有用,参考zTree API

zTreePlugin:'',

 //zTree插件里的配置

 setting: {

                isSimpleData: true,

                treeNodeKey: "rid",

                treeNodeParentKey: "pid",

                showLine: true,

                root: {

                    isRoot: true,

                    nodes: []

                },

                //显示树上的复选框

                checkable:true,

                //给角色树添加事件

                callback:{

change:function(){

 //调用setAllChecked方法设置全选复选框的状态

role.option.roleTree.setAllChecked();

}

}

 },

 //加载角色树

 loadRoleTree:function(){

 $.post("showRole.action",{

 uid:role.data.user.uid

 },function(data){

role.option.roleTree.zTreePlugin= $("#roleTree2").zTree(role.option.roleTree.setting,data);

 //加载完角色树后把全选复选框变为可用状态,此行代码必须写在此回调函数中

 role.option.roleTree.changeCheckBoxStatus("");

 // 当整个角色树被加载出来以后,显示角色树,隐藏loading

role.option.roleTree.changeLoadingAndRoleTree({

roleTree:true

});

//设置全选复选框初始化状态的值

role.option.roleTree.setAllChecked();

 });

 },

 //变换全选复选框的选中状态

 changeCheckBoxStatus:function(status){

 $("#allchecked2").attr("disabled",status);//把disabled这个属性变换成status

 },

 //要么显示树,要么显示出转的图标

 changeLoadingAndRoleTree:function(json){

 if(json.roleTree){

$("#roleTree2").show();

$("#loading2").hide();

}else{

$("#roleTree2").hide();

$("#loading2").show();

}

 },

 //全选复选框的功能

 allChecked:function(){

 if($(this).attr("checked")){

 role.option.roleTree.zTreePlugin.checkAllNodes(true);

 }else{

 role.option.roleTree.zTreePlugin.checkAllNodes(false);

 }

 },

 // 设置全选复选框被选中的状态

 setAllChecked:function(){

 var uncheckedNodes = role.option.roleTree.zTreePlugin.getCheckedNodes(false);

 if(uncheckedNodes.length==0){//为0说明被选中

 $("#allchecked2").attr("checked",true);

 }else{

 $("#allchecked2").attr("checked",false);

 }

 },

 //保存,相当建立用户和角色的关系

 saveRole:function(){

 //获取被选中的所有的角色

 var checkedNodes=role.option.roleTree.zTreePlugin.getCheckedNodes(true);

 var roleStr="";

 //遍历checkedNodes数组

 for(var i=0;i<checkedNodes.length;i++){

 if(i==checkedNodes.length-1){//如果为最后一个

 roleStr=roleStr+checkedNodes[i].rid;

 }else{

 roleStr=roleStr+checkedNodes[i].rid+",";

 }

 }

 //ajax向后台传递的参数

 var p={

uid:role.data.user.uid,

roleStr:roleStr

//checkedNodes:checkedNodes

 };

 $.post("saveRole.action",p,function(data){

 alert("保存成功");

 });

 }

}

}

};

$().ready(function(){

role.init.initEvent();

//$("div:hidden").show();

});

第七步:编写标签类(控制动作按钮)

package cn.itcast.jk.controller;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.jsp.JspException;

import javax.servlet.jsp.tagext.TagSupport;

import org.springframework.web.context.request.RequestContextHolder;

import org.springframework.web.context.request.ServletRequestAttributes;

import cn.itcast.jk.domain.Privilege;

public class PermissionTag extends TagSupport {

HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();  

// 模块中具体权限

private String privilege;

public String getPrivilege() {

return privilege;

}

public void setPrivilege(String privilege) {

this.privilege = privilege;

}

@Override

@SuppressWarnings("unchecked")

public int doStartTag() throws JspException {

boolean result = false;

List<Privilege> privileges =(List<Privilege>) request.getSession().getAttribute("privileges");

for(int i=0;i<privileges.size();i++){

if(privileges.get(i).getName().equals(privilege)){

result=true;

break;

}

}

return result ? EVAL_BODY_INCLUDE : SKIP_BODY;// 真:返回EVAL_BODY_INCLUDE(执行标签);假:返回SKIP_BODY(跳过标签不执行)

}

}

为了能获取到request和标签,必须在xml文件中加上:

<listener>  

        <listener-class>  

            org.springframework.web.context.request.RequestContextListener  

        </listener-class>  

</listener>

<jsp-config>

<taglib>

<taglib-uri>/http://www.wuxipolice.cn/huangyeheng</taglib-uri>

<taglib-location>/WEB-INF/classes/privilege.tld</taglib-location>

</taglib>

</jsp-config>

第八步:写测试JSP(必须先打开菜单页面再打开这个页面,否则放在session里面的privilege没值,会报空指针异常):

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%@ taglib uri="http://www.wuxipolice.cn/huangyeheng" prefix="yg" %>

<script language="javascript" src="${pageContext.request.contextPath}/js/jquery-1.4.2.js"></script>

<html>

<head>

<title>动作测试</title>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

</head>

<body style="margin: 0">

        

        <yg:permission  privilege="update">

      <a href="#">测试</a>

   </yg:permission>

</body>

</html>

权限练习到此,新手一个,勿喷!

下面为网上找的权限管理,供参考

http://blog.chinaunix.net/uid-24343152-id-3673026.html

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值