10-角色授權(quán)-難(3課時(shí))

角色授權(quán):

菜單鏈接/admin/power/goPower
PowerController.java對應(yīng)的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:是初始化時(shí)請求的后臺地址 會返回對象集合,集合里有role對象,role對象里有rolename碌冶,roleid,通過如下形式進(jìn)行前后臺綁定
emptyText="請選擇..." 初始顯示的內(nèi)容

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)顯示菜單(權(quán)限)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:是初始化時(shí)請求的后臺地址 會返回對象集合,集合里有role對象,role對象里有id,text稻艰,通過如下形式進(jìn)行前后臺綁定
value="" 初始選中的內(nèi)容(多個(gè)選項(xiàng)值之間用逗號分隔扛禽》姹撸框架支持的格式是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. 實(shí)現(xiàn)級聯(lián)。選中某個(gè)角色時(shí)编曼,對應(yīng)的菜單權(quán)限變化
    首選頁面部分宠默,第一部分里
    onvaluechanged="onDeptChanged" 觸發(fā)一上事件

    <script type="text/javascript">
    mini.parse();
    //獲取roles,powers
    var roles = mini.get("roles");
    var powers = mini.get("powers");
    var oldpowers;
    //role為請選擇時(shí)灵巧,power不可編輯
    powers.disable();
    function onDeptChanged(e) {
    //獲取選中的角色的id
    var roleid = roles.getValue();
    // 發(fā)送請求搀矫,查詢該角色已有的權(quán)限。查詢結(jié)果是多個(gè)權(quán)限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()" />

對應(yīng)的js

 function setPowers() {
        //獲取選中的權(quán)限值敏弃,逗號分隔
        var newpowers=powers.getValue();
        //獲取角色id
        var roleid=roles.getValue();
        //如果沒有變化 卦羡,提示一下
        if(oldpowers==newpowers){
            alert("請?jiān)O(shè)置后再保存")
        }else{//如果權(quán)限的變更,發(fā)請求到后臺,更改權(quán)限列表
            $.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實(shí)現(xiàn)類

@Override
public ResultMsg setPowers(String roleid, String oldpowers, String newpowers) {
    //ResultMsg用來返回設(shè)置好的權(quán)限的
    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);
    }
    //把添加的權(quán)限拼裝成map,為了foreach循環(huán)麦到,做批量添加
    addPowers=DataComparison.getAddPowers(newpowers);
    if(addPowers!=null){
        adds=iPowerMapper.addPowers(roleid,addPowers);
    }
    if(adds==addPowers.size()){
        msg.setCode(1);
        msg.setMsg("設(shè)置成功");
    }else{
        msg.setCode(0);
        msg.setMsg("設(shè)置失敗");
    }
    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 數(shù)據(jù)綁定</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>角色授權(quán)</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){  
    //該角色下的權(quán)限被選中
    powers.setValue(rst.msg);
    oldpowers=powers.getValue();
    if(roleid=="1"||roleid==""){
        powers.disable();
    }else{
        powers.enable();
    }

}                      
  })
}
    

function setPowers() {
    //獲取選中的權(quán)限值,逗號分隔
            var newpowers=powers.getValue();
    //獲取角色id
            var roleid=roles.getValue();
    //如果沒有變化 瓶颠,提示一下
            if(oldpowers==newpowers){
                alert("請?jiān)O(shè)置后再保存")
            }else{//如果權(quán)限的變更拟赊,發(fā)請求到后臺,更改權(quán)限列表
                $.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>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市粹淋,隨后出現(xiàn)的幾起案子吸祟,更是在濱河造成了極大的恐慌,老刑警劉巖桃移,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屋匕,死亡現(xiàn)場離奇詭異,居然都是意外死亡借杰,警方通過查閱死者的電腦和手機(jī)过吻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蔗衡,“玉大人纤虽,你說我怎么就攤上這事≌扯迹” “怎么了廓推?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長翩隧。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么堆生? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任专缠,我火速辦了婚禮,結(jié)果婚禮上淑仆,老公的妹妹穿的比我還像新娘涝婉。我一直安慰自己,他們只是感情好蔗怠,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布墩弯。 她就那樣靜靜地躺著,像睡著了一般寞射。 火紅的嫁衣襯著肌膚如雪渔工。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天桥温,我揣著相機(jī)與錄音引矩,去河邊找鬼。 笑死侵浸,一個(gè)胖子當(dāng)著我的面吹牛旺韭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播掏觉,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼区端,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了澳腹?” 一聲冷哼從身側(cè)響起珊燎,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎遵湖,沒想到半個(gè)月后悔政,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡延旧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年谋国,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片迁沫。...
    茶點(diǎn)故事閱讀 38,814評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡芦瘾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出集畅,到底是詐尸還是另有隱情近弟,我是刑警寧澤,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布挺智,位于F島的核電站祷愉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜二鳄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一赴涵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧订讼,春花似錦髓窜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至脖苏,卻和暖如春程拭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背帆阳。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工哺壶, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蜒谤。 一個(gè)月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓山宾,卻偏偏與公主長得像,于是被迫代替她去往敵國和親鳍徽。 傳聞我的和親對象是個(gè)殘疾皇子资锰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容