【權限管理】【權限列表的移動】

背景

在給角色配置權限時候,會涉及到權限列表的移動.

注意點:

  • 如何傳遞未有的權限到jsp
  • 提交表單:如何將權限列表注入角色的屬性.
  • 提交表單:如何對擁有的權限select列表的全部選擇後再提交
  • 若使用paramsPrepareParamsStack攔截器,會注入兩次權限列表,所以要在prepareSave方法中role.getPermissions().clear();

這裏寫圖片描述

傳遞未有的權限到jsp

  • 需要傳遞該角色未擁有的權限,
    • 若是新增角色,就傳遞數據庫全部權限列表
    • 若是修改角色,就傳遞 數據庫-角色擁有之後的權限列表
    private <T> List<T> getSubList(List<T> allList,List<T> partList){
        //新增角色情況
        if(partList==null) {return allList;}
        //修改角色情況
        ArrayList<T> subList = new ArrayList<>();
        for (T t : allList) {
            //對全部List遍歷,若部分List中不好含該成員,就存入subList
            if(!partList.contains(t)) {
                subList.add(t);
            }
        }
        return subList;
    }


    //在上面方法體中已經判斷了兩種情況,所以這兒直接放入context容器
    @RequiredPermission("編輯角色")
    public String input() throws Exception {
        //修改角色,傳遞該角色
        if(role.getId()!=null) {
            role = roleService.get(role.getId());
        }
        super.putContext("role", role);
        //傳遞未擁有的權限列表
        List<Permission> noPermissions = getSubList(permissionService.list(), role.getPermissions());
        super.putContext("noPermissions", noPermissions);
        return INPUT;
    }

//此處有個細節:不管新增或修改,都會傳遞一個role對象到jsp;
//原因,在擁有的權限列表中,可以用list="#role.permissions"
//若只有修改時候才傳遞role對象,則添加時候會因爲list="#role.permissions"的role爲空而報錯

提交表單:注入權限List到角色對象

在struts中,通過標籤的name值,來自動注入屬性.當屬性爲List時候,對應的標籤名字應該爲name="對象.屬性.id",表示給權限List中的每個權限注入id值

<s:select id="myList"  name="role.permissions.id" list="#role.permissions"  multiple="true" listKey="id" listValue="name"/>
//action接收的role.permissions集合爲
[ 
 Permission [name=null, expression=null, getId()=1], 
 Permission [name=null, expression=null, getId()=2]
 ]

提交表單:將擁有權限的select,提交前全部選擇

原因:提交select時候,只有被選擇的option,纔會傳遞給Action,
而擁有權限的select,是需要全部傳遞的.
解決方法:在<form>標籤,設置onclick="clickForm()"屬性,並添加js代碼,實現提交前的全選.

//js代碼
var clickForm=function(){
    $("#myList option").prop("selected","selected");
}

這裏寫圖片描述

實現左右移動按鈕的jd

參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章