第二天

1、部门

添加:使用form的方式,注意input标签的name属性
修改:通过json将后端传过来的数据隐藏到修改按钮上,代码实现

    //使用getJson()可能存在递归
    public String toJson(){
        return JSON.toJSONString(this);
    }

//---------这是分割线----------------------
<a href="#" class="btn btn-info btn-xs btn-input" data-option='${department.toJson()}'>
      <span class="glyphicon glyphicon-pencil"></span> 编辑
</a>

---------------这是分割线-----------
<script>
    $(function () {
        //编辑功能
        $(".btn-input").click(function () {
            //获取data
            var data = $(this).data("option");
            //清空数据
            $("input[name]").val("");

            if(data){
                $("input[name=name]").val(data.name);
                $("input[name=sn]").val(data.sn);
                $("input[name=id]").val(data.id);
            }

            $(".modal").modal("show");
        });
    });
</script>


删除  官网:sweetalert2
引入样式

<link rel="stylesheet" href="/js/plugins/sweetalert2/sweetalert2.min.css">
<script src="/js/plugins/sweetalert2/sweetalert2.min.js"></script>

2.RBAC

不同员工有不同权限,为了方便管理部分员工有相同的权限这中间引入了角色表
因为员工、角色和权限他们之间都是多对多的关系,所以需要设计中间表

权限表
确定权限表中的权限是什么(系统的每个Controller方法)
怎么将Controller转换成权限表的数据(Controller和权限表中间使用注解来转换)
怎么获取注解上的权限表达式(需要查询API如何获取)
权限的表的数据判断是否存在同时不能重复(使用Set集合,同时重写hashCode方法)
怎么批量插入数据库中(使用MyBatis的动态标签)

Controller

@RequestMapping("/reload")
    @RequiredPermission(name = "权限加载", expression = "permission:reload")
    @ResponseBody
    public JsonResult reload() {
        //获取所有权限
        List<Permission> allPermissions = permissionService.listAll();

        //将所有权限的权限表达式放进ArrayList中
        ArrayList<String> expressions = new ArrayList<>();

        for (Permission permission : allPermissions) {
            expressions.add(permission.getExpression());
        }

        //创建不可重复的Set集合
        Set<Permission> permissionSet = new LinkedHashSet<>();

        //获取容器对象,从容器对象获取所有控制器对象,获取控制器对象的方法
        Map<String, Object> beans = ctx.getBeansWithAnnotation(Controller.class);


        Collection<Object> values = beans.values();
        //遍历每个Controller
        for (Object controller : values) {

            Method[] declaredMethods = controller.getClass().getDeclaredMethods();
            //遍历Controller上的每个方法
            for (Method method : declaredMethods) {
                RequiredPermission annotation = method.getAnnotation(RequiredPermission.class);
                if (annotation != null) {
                    //使用Permission进行封装权限数据
                    Permission permission = new Permission();
                    permission.setName(annotation.name());
                    permission.setExpression(annotation.expression());

                    //判断List集合中是否存在数据
                    if (!expressions.contains(annotation.expression())) {
                        permissionSet.add(permission);
                    }
                }

            }
        }

        //不判空的话,传到Mapper中会SQL语法出错
        if (permissionSet.size() > 0) {
            permissionService.save(permissionSet);
        }
        return new JsonResult(true, "加载成功");
    }

MyBatis

void batInsert(@Param("permissions") Set<Permission> permissions);
-----------------分隔线---------------
 <insert id="batInsert">
        insert into permission (name, expression) values
        <foreach collection="permissions" separator="," item="p">
            (#{p.name},#{p.expression})
        </foreach>
    </insert>

3.角色

3.1.角色新增
需要关联权限表(角色的Controller为了让跳转的input页面有权限数据需要权限的Service对象)
为了选取权限,需要一些js完成喧嚷,同时提交的时候将提交的参数传递给后台

<script>
       function moveSelected(src, target) {
            $("." + target).append($("." + src + "> option:selected"));
       }

       function moveAll(src, target) {
            $("." + target).append($("." + src + "> option"));
       }
</script>

后端接收的参数包括权限的id数组类型

public String saveOrUpdate(Role role,Long[] ids){

新增需要往中间表中插入数据

@Override
    public void save(Role role, Long[] ids) {
        roleMapper.insert(role);
        if(ids!=null && ids.length>0){
            for(Long id:ids){
                roleMapper.insertRelation(role.getId(),id);
            }
        }
    }


3.2.角色修改
需要获取该角色有什么权限,为此需要根据id去连权限表来查询该角色权限
左右来回移动权限,为了避免出现权限重复,需要再页面一渲染完毕的时候将权限进行去重
提交之后,数据库需要删除一开始的所有数据,在插入从前端获取的数据

3.3.角色删除
根据id删除角色信息,同时删除中间表的角色权限信息
为了优化代码,将删除的js抽取出来

$(".btn-delete").click(function () {
        var url = $(this).data("url");
        Swal.fire({
            title: '你確定刪除?',
            text: "此操作不可逆",
            icon: 'warning',
            showCancelButton: true,
            confirmButtonColor: '#3085d6',
            cancelButtonColor: '#d33',
            confirmButtonText: '确定',
            cancelButtonText: "取消"
        }).then((result) => {
            if (result.value) {
                location.href = url;
            }
        })


返回课程体系

posted @ 2021-05-07 18:59  LinkYup  阅读(61)  评论(0编辑  收藏  举报