项目第三次冲刺总结

前言

        这是第一次进项目,第一次做冲刺,所以这次分配的任务不是很多。这次我主要实现角色和权限的功能,通过rbac权限模型进行实现

一、角色的增删改查

部分代码:

/**
     * 添加角色
     *
     * @param role
     * @return
     */
    @Override
    public ResultInfo insert(Role role) {
        ResultInfo info = new ResultInfo();
        info.setFlag(true);
        try {
            roleMapper.insertRole(role);
        } catch (Exception e) {
            info.setFlag(false);
            info.setErrorMsg("添加失败!");
            e.printStackTrace();
        }
        return info;
    }

    /**
     * 查看所有角色
     *
     * @return
     */
    @Override
    public ResultInfo selectAll() {
        ResultInfo info = new ResultInfo();
        info.setFlag(true);
        try {
            List<Role> list = roleMapper.selectAll();
            info.setData(list);
        } catch (Exception e) {
            info.setFlag(false);
            info.setErrorMsg("查询失败!");
            e.printStackTrace();
        }
        return info;
    }

    /**
     * 查看一个用户拥有的角色
     * @param userId
     * @return
     */
    @Override
    public ResultInfo selectOne(Integer userId) {
        ResultInfo info = new ResultInfo();
        info.setFlag(true);
        try {
            List<Integer> roleIds = roleMapper.selectRelByUserId(userId);
            List<Role> list = new ArrayList<>();
            for (Integer roleId : roleIds){
                Role role = roleMapper.selectRoleByRoleId(roleId);
                list.add(role);
            }
            info.setData(list);
        } catch (Exception e) {
            info.setFlag(false);
            info.setErrorMsg("查询失败!");
            e.printStackTrace();
        }
        return info;
    }

    /**
     * 修改角色
     *
     * @param role
     * @return
     */
    @Override
    public ResultInfo update(Role role) {
        ResultInfo info = new ResultInfo();
        info.setFlag(true);
        try {
            roleMapper.update(role);
        } catch (Exception e) {
            info.setFlag(false);
            info.setErrorMsg("修改失败!");
            e.printStackTrace();
        }
        return info;
    }

    /**
     * 删除角色
     *
     * @param roleId
     * @return
     */
    @Override
    public ResultInfo delete(Integer roleId) {
        ResultInfo info = new ResultInfo();
        info.setFlag(true);
        try {
            roleMapper.deleteRoleByRoleId(roleId);
            List<Integer> userIds = roleMapper.selectOneByRoleId(roleId);
            List<Integer> resourceIds = roleMapper.selectResourceIdsByRoleId(roleId);
            if (userIds.size() != 0){
                for (Integer userId : userIds){
                    roleMapper.deleteRel(roleId, userId);
                }
            }
            if (resourceIds.size() != 0){
                for (Integer resourceId : resourceIds){
                    roleMapper.deleteRelWithResource(roleId, resourceId);
                }
            }
        } catch (Exception e) {
            info.setFlag(false);
            info.setErrorMsg("删除失败!");
            e.printStackTrace();
        }
        return info;
    }

二、权限的增删改查

        部分权限:

/**
     * 添加权限
     * @param resource
     * @return
     */
    @Override
    public ResultInfo insert(Resource resource) {
        ResultInfo info = new ResultInfo();
        info.setFlag(true);
        try {
            String parentId = resource.getParentId();
            //id只有三位代表第一级,parentid只能为000
            if ("000".equals(parentId)){
                Integer count = resourceMapper.selectCountByParentId(parentId);
                StringBuilder resourceId = new StringBuilder();
                if (count >= 0 && count <=9){
                    resourceId.append("0");
                    resourceId.append("0");
                    resourceId.append(count+1);
                }else if (count >= 10 && count <= 99){
                    resourceId.append("0");
                    Integer ten = (count/10)%10;
                    Integer a = count % 10;
                    resourceId.append(ten);
                    resourceId.append(a);
                }else if (count >= 100 && count <=999){
                    Integer hundred = (count/100)%10;
                    Integer ten = (count/10)%10;
                    Integer a  = count % 10;
                    resourceId.append(hundred);
                    resourceId.append(ten);
                    resourceId.append(a);
                }
                resource.setResourceId(resourceId.toString());
                resourceMapper.insertResource(resource);
            //由于id的结构构成原因,id除最后三位,前面几位必须为表里有的id
            }else {
                Integer count = resourceMapper.selectCountByParentId(parentId);
                StringBuilder resourceId = new StringBuilder(parentId);
                if (count >= 0 && count <=9){
                    resourceId.append("0");
                    resourceId.append("0");
                    resourceId.append(count+1);
                }else if (count >= 10 && count <= 99){
                    resourceId.append("0");
                    Integer ten = (count/10)%10;
                    Integer a = count % 10;
                    resourceId.append(ten);
                    resourceId.append(a);
                }else if (count >= 100 && count <=999){
                    Integer hundred = (count/100)%10;
                    Integer ten = (count/10)%10;
                    Integer a  = count % 10;
                    resourceId.append(hundred);
                    resourceId.append(ten);
                    resourceId.append(a);
                }
                resource.setResourceId(resourceId.toString());
                resourceMapper.insertResource(resource);
            }
        } catch (Exception e) {
            info.setFlag(false);
            info.setErrorMsg("添加失败");
            e.printStackTrace();
        }
        return info;
    }

    /**
     * 查看所有权限
     * @return
     */
    @Override
    public ResultInfo selectAll() {
        ResultInfo info = new ResultInfo();
        info.setFlag(true);
        try {
            List<Resource> list = resourceMapper.selectAll();
            info.setData(list);
        } catch (Exception e) {
            info.setFlag(false);
            info.setErrorMsg("查看失败");
            e.printStackTrace();
        }
        return info;
    }

    /**
     * 查看一个角色所拥有的权限
     * @param roleId
     * @return
     */
    @Override
    public ResultInfo selectOne(Integer roleId) {
        ResultInfo info = new ResultInfo();
        info.setFlag(true);
        try {
            List<String> resourceIds = resourceMapper.selectRelByRoleId(roleId);
            List<Resource> list = new ArrayList<>();
            for (String resourceId : resourceIds){
                Resource resource = resourceMapper.selectByResourceId(resourceId);
                list.add(resource);
            }
            info.setData(list);
        } catch (Exception e) {
            info.setFlag(false);
            info.setErrorMsg("查看失败");
            e.printStackTrace();
        }
        return info;
    }

    /**
     * 查看一个用户所拥有的权限
     * @param userId
     * @return
     */
    @Override
    public ResultInfo selectResrouceByUserId(Integer userId) {
        ResultInfo info = new ResultInfo();
        info.setFlag(true);
        try {
            List<Integer> roleIds = roleMapper.selectRelByUserId(userId);
            List<Resource> list = new ArrayList<>();
            for (Integer roleId : roleIds){
                List<String> resourceIds = resourceMapper.selectRelByRoleId(roleId);
                for (String resourceId : resourceIds){
                    Resource resource = resourceMapper.selectByResourceId(resourceId);
                    list.add(resource);
                }
            }
            info.setData(list);
        } catch (Exception e) {
            info.setFlag(false);
            info.setErrorMsg("查询失败");
            e.printStackTrace();
        }
        return info;
    }

    /**
     * 修改权限
     * @param resource
     * @return
     */
    @Override
    public ResultInfo update(Resource resource) {
        ResultInfo info = new ResultInfo();
        info.setFlag(true);
        try {
            resourceMapper.update(resource);
        } catch (Exception e) {
            info.setFlag(false);
            info.setErrorMsg("修改失败");
            e.printStackTrace();
        }
        return info;
    }

    /**
     * 删除权限
     * @param resourceId
     * @return
     */
    @Override
    public ResultInfo delete(String resourceId) {
        ResultInfo info = new ResultInfo();
        info.setFlag(true);
        try {
            String parentId = resourceId;
            Resource resource = resourceMapper.selectResourceByParentId(parentId);
            if (resource == null) {
                resourceMapper.deleteResourceByResourceId(resourceId);
                Integer integer = Integer.parseInt(resourceId.substring(resourceId.length() - 3));
                String parentId1 = null;
                if (resourceId.length() > 3) {
                    parentId1 = resourceId.substring(0, resourceId.length() - 4);
                } else {
                    parentId1 = "000";
                }
//                  Integer count = resourceMapper.selectCountByParentId(parentId1);
                //获得同一级的所有的resourceId
                List<String> resourceIds = resourceMapper.selectResourceIdsByParentId(parentId1);
                //改变后的Id
                String newResourceId = resourceId;
                //改变需要改变的resouceId
                for (String oldResourceId : resourceIds) {
                    Integer integer1 = Integer.parseInt(oldResourceId.substring(oldResourceId.length() - 3));
                    //判断resourceId是否需要改变,比integer大就是需要改变
                    if (integer1 > integer) {
                        //获取需要改变的resource下的所有子级Id
                        List<String> resourceIds1 = resourceMapper.selectChildResourceIdsByResourceId(oldResourceId);
                        //改变需要改变的resource的resourceId
                        resourceMapper.updateResourceId(oldResourceId, newResourceId);
                        //改变需要改变的resource下所有子级的resourceId以及parentId
                        for (String resourceId1 : resourceIds1) {
                            String substring = resourceId1.substring(oldResourceId.length());
                            StringBuilder sb = new StringBuilder();
                            sb.append(newResourceId);
                            sb.append(substring);
                            resourceMapper.updateParentIdByResourceId(resourceId1, sb.toString().substring(0,sb.toString().length()-3));
                            resourceMapper.updateResourceId(resourceId1,sb.toString());
                        }
                        newResourceId = oldResourceId;
                    }
                }
                List<Integer> roleIds = resourceMapper.selectRoleIdByResourceId(resourceId);
                for (Integer roleId : roleIds) {
                    resourceMapper.deleteRelByResourceIdAndRoleId(resourceId, roleId);
                }

            } else {
                info.setFlag(false);
                info.setErrorMsg("该权限下还有权限,无法删除");
            }
        } catch (Exception e) {
            info.setFlag(false);
            info.setErrorMsg("删除失败");
            e.printStackTrace();
        }
        return info;
    }

三、将角色赋予用户或取消用户的角色

        部分代码:

/**
     * 赋予用户角色
     *
     * @param roleIds
     * @param userId
     * @return
     */
    @Override
    public ResultInfo permission(List<Integer> roleIds, Integer userId) {
        ResultInfo info = new ResultInfo();
        info.setFlag(true);
        try {
            for (Integer roleId : roleIds){
                roleMapper.insertRel(roleId, userId);
            }
        } catch (Exception e) {
            info.setFlag(false);
            info.setErrorMsg("赋予权限失败!");
            e.printStackTrace();
        }
        return info;
    }

    /**
     * 取消用户角色
     * @param roleIds
     * @param userId
     * @return
     */
    @Override
    public ResultInfo cancel(List<Integer> roleIds, Integer userId) {
        ResultInfo info = new ResultInfo();
        info.setFlag(true);
        try {
            for (Integer roleId : roleIds){
                roleMapper.deleteRel(roleId, userId);
            }
        } catch (Exception e) {
            info.setFlag(false);
            info.setErrorMsg("取消失败!");
            e.printStackTrace();
        }
        return info;
    }

四、将权限赋予角色或删除角色的权限

        部分代码:

@Override
    public ResultInfo save(List<String> resourceIds, Integer roleId) {
        ResultInfo info = new ResultInfo();
        info.setFlag(true);
        try {
            for (String resourceId : resourceIds){
                resourceMapper.insertRel(resourceId,roleId);
            }
        } catch (Exception e) {
            info.setFlag(false);
            info.setErrorMsg("添加失败");
            e.printStackTrace();
        }
        return info;
    }

    @Override
    public ResultInfo deleteRel(List<String> resourceIds, Integer roleId) {
        ResultInfo info = new ResultInfo();
        info.setFlag(true);
        try {
            for (String resourceId : resourceIds){
                resourceMapper.deleteRelByResourceIdAndRoleId(resourceId,roleId);
            }
        } catch (Exception e) {
            info.setFlag(false);
            info.setErrorMsg("删除失败");
            e.printStackTrace();
        }
        return info;
    }

总结

        因为是第一次进冲刺写代码,所以其实功能分配给我的都不是太难,这次只需要新学一个rbac权限模型,来进行总体设计,其余功能都是基本的增删改查功能

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值