10-角色授权-难(3课时)

角色授权:

菜单链接/admin/power/goPower
PowerController.java对应的action

@RequestMapping("/goPower")
public String goPower() {
    return "power";
}

四部分:

1)显示角色下拉列表框
step1 页面部分新增下拉列表power.jsp

<input id="roles" name="Country" showNullItem="true" class="mini-combobox"
        
        url="<%=request.getContextPath()%>/admin/power/getRole"  
        emptyText="请选择..."
        nullItemText="请选择..."
        textField="rolename" valueField="roleid" onvaluechanged="onDeptChanged" />

其中:
class="mini-combobox" (下拉列表固定写法)
url:是初始化时请求的后台地址 会返回对象集合,集合里有role对象,role对象里有rolename,roleid,通过如下形式进行前后台绑定
emptyText="请选择..." 初始显示的内容

textField="rolename" valueField="roleid"

step 2后台PowerController.java

@RequestMapping("/getRole")
    public @ResponseBody List<Role> getRole(){
        //查询所有的角色
        List<Role> roles=iPowerSercive.getRole();
        System.out.println(roles);
        return roles;
    }
//省略service mapper代码

2)显示菜单(权限)checkbox

step1 页面部分新增下拉列表power.jsp

   <div id="powers" class="mini-checkboxlist" repeatItems="1"
    repeatLayout="flow"
    url="<%=request.getContextPath()%>/admin/power/getPower"
    textField="text" valueField="id"
    value=""
    enable="false"
    style="width: 725px; height: 250px;"></div>

其中:
class="mini-checkboxlist" (checkbox固定写法)
url:是初始化时请求的后台地址 会返回对象集合,集合里有role对象,role对象里有id,text,通过如下形式进行前后台绑定
value="" 初始选中的内容(多个选项值之间用逗号分隔。框架支持的格式是1,2,3)
textField="text" valueField="id"

step 2后台PowerController.java

@RequestMapping("/getPower")
public @ResponseBody List<Menu> getPower(){
    List<Menu> power=iPowerSercive.getPower();
    return power;
}
//省略service mapper代码
  1. 实现级联。选中某个角色时,对应的菜单权限变化
    首选页面部分,第一部分里
    onvaluechanged="onDeptChanged" 触发一上事件

    <script type="text/javascript">
    mini.parse();
    //获取roles,powers
    var roles = mini.get("roles");
    var powers = mini.get("powers");
    var oldpowers;
    //role为请选择时,power不可编辑
    powers.disable();
    function onDeptChanged(e) {
    //获取选中的角色的id
    var roleid = roles.getValue();
    // 发送请求,查询该角色已有的权限。查询结果是多个权限id用逗号分隔。1,2,3
    $.ajax({
    type:"get",
    url:"<%=request.getContextPath()%>/admin/power/getPowerById?roleid="+roleid,
    dataType:"json",
    success:function(rst){
    powers.setValue(rst.msg);
    oldpowers=powers.getValue();
    if(roleid=="1"||roleid==""){
    powers.disable();
    }else{
    powers.enable();
    }

     }                      
    

    })
    }

    ...
    </script>

controller

@RequestMapping("/getPowerById")
public @ResponseBody ResultMsg getPowerById(String roleid){
    ResultMsg msg=iPowerSercive.getPowerById(roleid);
    return msg;
}

IPowerSercive

 ResultMsg getPowerById(String roleid);

PowerServiceImpl

@Override
public ResultMsg getPowerById(String roleid) {
    ResultMsg rst=new ResultMsg();
    Role role=new Role();
    role.setRoleid(roleid);
    List<String> s=iPowerMapper.getPowerById(role);
    String powers=String.join(",",s);
    rst.setMsg(powers);
    return rst;
}

4)添加

 <input type="button" value="保存" onclick="setPowers()" />

对应的js

 function setPowers() {
        //获取选中的权限值,逗号分隔
        var newpowers=powers.getValue();
        //获取角色id
        var roleid=roles.getValue();
        //如果没有变化 ,提示一下
        if(oldpowers==newpowers){
            alert("请设置后再保存")
        }else{//如果权限的变更,发请求到后台,更改权限列表
            $.ajax({            
                type:"get",
                url: "<%=request.getContextPath()%>/admin/power/setPowers?roleid="+roleid+"&oldpowers="+oldpowers+"&newpowers="+newpowers, 
                dataType:"json",            
                success : function(rst) {               
                    alert(rst.msg)
                    roles.setValue("");
                    powers.setValue("");
                    powers.disable();
                }
            });
        }
    }

controller

@RequestMapping("/setPowers")
public @ResponseBody ResultMsg setPowers(String roleid,String oldpowers,String newpowers){      
    ResultMsg msg=iPowerSercive.setPowers(roleid,oldpowers,newpowers);
    return msg;
}

IPowerSercive接口

ResultMsg setPowers(String roleid, String oldpowers, String newpowers);

PowerServiceImpl实现类

@Override
public ResultMsg setPowers(String roleid, String oldpowers, String newpowers) {
    //ResultMsg用来返回设置好的权限的
    ResultMsg msg=new ResultMsg();
    Map<String,String> addPowers;
    int dels=0;
    int adds=0;
    boolean flagdel=DataComparison.getDelPowers(oldpowers);
    if(flagdel){
        dels=iPowerMapper.delPowers(roleid);
    }
    //把添加的权限拼装成map,为了foreach循环,做批量添加
    addPowers=DataComparison.getAddPowers(newpowers);
    if(addPowers!=null){
        adds=iPowerMapper.addPowers(roleid,addPowers);
    }
    if(adds==addPowers.size()){
        msg.setCode(1);
        msg.setMsg("设置成功");
    }else{
        msg.setCode(0);
        msg.setMsg("设置失败");
    }
    return msg;
}

IPowerMapper

@Delete("delete from t_role_menu where roleid=#{roleid} ")
int delPowers(@Param("roleid") String rolieid);
@Insert({
    "<script>"
    + "insert into t_role_menu (id,roleid,menuid)"
    + "values "           
    + "<foreach item='item' index='index' collection='addPowers' separator=','>"
    + "(#{index},#{roleid},#{item})"
    + "</foreach>"
    + "</script>"
})
int addPowers(@Param("roleid") String roleid,@Param("addPowers") Map<String,String> addPowers);

DataComparison类

package com.neuedu.utils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class DataComparison {
    public static boolean getDelPowers(String oldpowers) {
        List<String> powerList = new ArrayList<String>();
        if (oldpowers.equals("") || oldpowers.equals(null)) {
            return false;
        } else {
            return true;
        }

    }

    public static Map<String, String> getAddPowers(String newpowers) {
        Map<String, String> powerMap = new HashMap<>();
        if (newpowers.equals("") || newpowers.equals(null)) {
            return null;
        } else {
            String[] addpowers = newpowers.split(",");
            for (int i = 0; i < addpowers.length; i++) {
                String uuid = UuidGenerateUtil.getUUID();
                powerMap.put(uuid, addpowers[i]);
            }
            return powerMap;
        }
    }

}

完整界面代码power.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Binding 数据绑定</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<link href="<%=request.getContextPath()%>/css/demo.css" rel="stylesheet"
    type="text/css" />
<script src="<%=request.getContextPath()%>/js/boot.js"
    type="text/javascript"></script>
 </head>
<body>
    <h1>角色授权</h1>

    <!-- 下拉列表框,用class="mini-combobox"属性控制 -->
    <input id="roles" name="Country" showNullItem="true" class="mini-combobox"
        
        url="<%=request.getContextPath()%>/admin/power/getRole"  
        emptyText="请选择..."
        nullItemText="请选择..."
        textField="rolename" valueField="roleid" onvaluechanged="onDeptChanged" />

    <div id="powers" class="mini-checkboxlist" repeatItems="1"
        repeatLayout="flow"
        url="<%=request.getContextPath()%>/admin/power/getPower"
        textField="text" valueField="id"
        value=""
        enable="false"
        style="width: 725px; height: 250px;"></div>
    <div style="padding-top: 5px; padding-bottom: 5px;">

        <input type="button" value="保存" onclick="setPowers()" />
    </div>

    

    <div class="description">
        <h3>Description</h3>

    </div>
    <script type="text/javascript">
    mini.parse();
    /* var roles = document.getElementById("roles"); */
    var roles = mini.get("roles");
    var powers = mini.get("powers");
    var oldpowers;
    powers.disable();
    function onDeptChanged(e) { 
var roleid = roles.getValue();
$.ajax({
    type:"get", 
    url:"<%=request.getContextPath()%>/admin/power/getPowerById?roleid="+roleid, 
    dataType:"json",
    success:function(rst){  
    //该角色下的权限被选中
    powers.setValue(rst.msg);
    oldpowers=powers.getValue();
    if(roleid=="1"||roleid==""){
        powers.disable();
    }else{
        powers.enable();
    }

}                      
  })
}
    

function setPowers() {
    //获取选中的权限值,逗号分隔
            var newpowers=powers.getValue();
    //获取角色id
            var roleid=roles.getValue();
    //如果没有变化 ,提示一下
            if(oldpowers==newpowers){
                alert("请设置后再保存")
            }else{//如果权限的变更,发请求到后台,更改权限列表
                $.ajax({    
        type:"get",
    url: "<%=request.getContextPath()%>/admin/power/setPowers?roleid="+roleid+"&oldpowers="+oldpowers+"&newpowers="+newpowers, 
    dataType:"json",            
                    success : function(rst) {               
                        alert(rst.msg)
                        roles.setValue("");
                        powers.setValue("");
                        powers.disable();
                    }
                });
            }
        }
    </script>
</body>
</html>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容