【权限管理】【权限列表的移动】

背景

在给角色配置权限时候,会涉及到权限列表的移动.

注意点:

  • 如何传递未有的权限到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

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值