记一个前端直接发送js对象,Java后台接收的例子

本文介绍了一种在角色层面上更新权限的方法,通过维护角色-权限表数据,实现对角色权限的更新。文章详细解释了如何处理角色与权限的关系,包括删除原有权限并重新关联新权限的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   /**
     * 更新角色-权限信息,包含以下参数:
     * <p>
     * id      当前角色的id
     * ids     当前角色-权限的id集合
     * parents 当前角色-权限的是否是父节点的parent集合
     *
     * <p>
     * 之前在User层面上,我们要对其进行角色的更新,也就是说在User用户层面上更新权限,只需要维护用户-角色表数据。
     * 而在角色层面上,只需要维护角色-权限表数据。
     * <p>
     * 误区:始终要记得,同一个角色拥有不同权限的情况是不存在的,如果两个用户拥有不同的权限,那么他们一定拥有了不同的角色
     *
     * @return
     * @Param dataMap 以上参数数据的Map集合
     *
     * <p>
     * 为什么要用Map接收?
     * 如果想要传递对象(如数组)参数,ajax就必须发送post请求,而post请求传递对象参数就要用JSON.stringify()格式化数据为JSON字符串才能传递;
     * 一旦使用了JSON.stringify()格式化数据,传递的就是JSON字符串,后端必须使用String类型接收,而我们传递的数据中包含了普通变量、数组等多种数据,所以使用使用Map接收,并指定泛型是String类型
     *
     * <p>
     * 前端传递进来的参数在Map中封装的数据结构类似:
     * {0:{key: id, value: {....}}, 1:{key: ids, value: {...}}, 2:{key: parents, value: {...}}}
     */
    @ResponseBody
    @RequestMapping(value = "/updateRolesPermissions", method = RequestMethod.POST)
    public Result updateRolesPermissions(@RequestBody Map<String, Object> dataMap) {
        try {
        //重要的地方
            Long id = Long.valueOf((String) dataMap.get("id")); //当前操作角色的id
            ArrayList ids = (ArrayList) dataMap.get("ids"); //当前角色更新的权限id的集合体
            ArrayList parents = (ArrayList) dataMap.get("parents"); //当前更新的角色权限parent信息

            // 更新角色的权限关系即需要维护角色-权限表,前端传来了什么数据? 1、角色id;2、被选中的权限Id集合。
            // 如何更新角色的权限?我们常会想到,根据表的主键update呀,但是,因为页面上展示的数据是后端构建的ZTree实体类JSON数据,其中并不包含表的主键值
            // 所以,这里就采取一种比较极端的方式,先删除此角色所有关联的权限id,再依次关联此角色当前更新的权限id

            //先删除此角色关联的所有权限id
            roleService.deleteAllRolePermissions(id);

            //再依次关联此角色更新的权限id
            for (int i = 0; i < ids.size(); i++) {
                if (!(boolean) parents.get(i)) {
                    //不是父节点才进行关联,因为父节点是角色,子节点才是权限
                    roleService.correlationPermissions(id, Long.valueOf(String.valueOf(ids.get(i))));
                }
            }
            System.out.println(dataMap);
            return new Result(true, "更新数据成功");
        } catch (Exception e) {
            e.printStackTrace();
            return new Result(false, "发生未知错误");
        }
    }

注意因为例子用了@RequestBody所以不能用于contentType是form-data方式的请求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值