ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

经验小记:申请权限判断--字符串处理

2021-06-02 15:31:38  阅读:149  来源: 互联网

标签:originalString String 角色 userDomain -- applyAddParam userParam 权限 小记


经验小记:申请权限判断–字符串处理

首先看看原始代码:

//传入角色去重
//获取用户权限集
CmsUserParam userParam = new CmsUserParam();
userParam.setUserName(applyAddParam.getUserName());
userParam.setStatus((byte) UserStatusEnums.VALID.getCode());
CmsUserDomain userDomain = userService.queryUserByUserName(userParam);
applyAddParam.setOriginal(userDomain.getRole().split(","));
String[] originalRoles = userDomain.getRole().split(",");
String[] changeRoles = applyAddParam.getChange();
//申请已有角色-报错
String originalString = StringUtils.join(originalRoles,",");
String changeString = StringUtils.join(changeRoles,",");
if(originalString.contains(changeString)){
    CmsLogger.INFO_LOGGER.info("no new roles, param:{}", applyAddParam.toString());
    return BaseRestResult.fail(BaseRestResultCode.ERROR, "申请中没有新的角色");
}
StringBuffer roleSB = new StringBuffer(originalString);
//申请新角色(可能包含旧角色)-追加× 不包含旧角色
for (String role: changeRoles) {
    if(!originalString.contains(role)){
        roleSB.append(","+role);
    }
}
applyAddParam.setChange(roleSB.toString().split(","));

逻辑为:
根据当前申请用户的信息查找他的原始权限角色信息,填写到我们中间参数类当中的Original(原始角色–对应Change修改角色)属性中,把权限数组转成以“,”分隔的字符串,
即Original原始角色字符串:abc,abd,abb
Change修改角色字符串:ab
之后直接比较,abc,abd,abb.contains(ab)
很明显bug出现了,ab并不是原始角色之一,却会被归属到“申请已有角色-报错”之中。

修改思路:
应以“,”为突破口,将权限带分隔符看为整体
即Original原始角色字符串:,abc,abd,abb,
Change修改角色字符串:,ab,
这时便可以将角色字符准确分割了。

修改代码:

//传入角色去重
//获取用户权限集
CmsUserParam userParam = new CmsUserParam();
userParam.setUserName(applyAddParam.getUserName());
userParam.setStatus((byte) UserStatusEnums.VALID.getCode());
CmsUserDomain userDomain = userService.queryUserByUserName(userParam);
applyAddParam.setOriginal(userDomain.getRole().split(","));
String originalRoles = userDomain.getRole();
String changeRoles = applyAddParam.getChange()[0];
//申请已有角色-报错
String originalString = "," + originalRoles + ",";
String changeString = "," + changeRoles + ",";
if(originalString.contains(changeString)) {
    CmsLogger.INFO_LOGGER.info("no new roles, param:{}", applyAddParam.toString());
    return BaseRestResult.fail(BaseRestResultCode.ERROR, "申请中没有新的角色");
}
//申请新角色-追加
applyAddParam.setChange((originalRoles + "," + changeRoles).split(","));

标签:originalString,String,角色,userDomain,--,applyAddParam,userParam,权限,小记
来源: https://blog.csdn.net/weixin_44587820/article/details/117462653

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有