权限组权限code去重处理

  • 开发中会遇到单用户多角色多权限的问题,这时我们分配的权限组就要做去重处理,否则用户登录系统后会有重复菜单或者按钮

效果图:

在这里插入图片描述

实现代码:

  • hashSet去重处理,这里贴上我完整的权限组处理方法.
//查询用户角色对应的系统  用于登录时权限分配
	public List<Map<String, Object>> findBankRoleSys(List<Map<String, Object>> list, String bankId){
		
		if(list != null ) {
		StringBuilder builer = new StringBuilder(); //保存一次处理后的字符串
		Set<String> sets=new HashSet<>(); //去重处理
		String auths = null; //保存处理完的字符串
		list.forEach((temp)->{
			sets.addAll(Arrays.asList(temp.get("role_auths").toString().split(",")));
		});
		for(String hs : sets) {
			if(hs.length() == 3) {
				builer.append("'"+hs+"',");  //过滤掉code为三(系统)的数据
			}
		}
		if(builer != null && builer.length() >0) {
			 auths = builer.substring(0,builer.length()-1);
		}
		String sql = "SELECT * FROM t_bank_sys_menu where `status`=0 AND statuz =0 AND bank_id = '"+bankId+"' AND menu_code IN ("+auths+")";
		List<Map<String, Object>> menuslist = jt.queryForList(sql);
		return menuslist;
		}
		return null;
	}
<think>好的,用户问的是“代码”,首先我要明确他们具体指的是什么。代码可能有不同的含义,比如删除复代码、检测复的代码块,或者是版本控制中的复提交处理。需要进一步分析上下文,但通常来说,最常见的情况是删除复代码,以提高代码质量和维护性。 接下来,我需要考虑用户可能的背景。他们可能是开发人员,遇到了代码库中复代码的问题,想要优化代码结构。或者是学生,在做项目时发现复代码,想要了解如何处理。因此,回答需要兼顾不同层次的理解,既要有技术细节,也要有实际应用的方法。 然后,我应该解释代码的定义,明确其目的,比如提高可维护性、减少错误等。接着,分步骤介绍常见的方法,比如提取函数、使用循环、继承、设计模式等。这部分需要举例说明,让用户更容易理解。比如,用具体的代码示例展示如何将复的代码块提取为函数,或者如何使用模板方法模式消除复。 同时,需要提到自动化工具,比如代码质量分析工具(SonarQube、PMD),或者版本控制中的复检测(git)。这部分内容可以帮助用户实际操作,找到工具来辅助。 还要考虑潜在的问题,比如过度抽象可能导致代码难以理解,或者某些情况下复代码是必要的。需要提醒用户权衡利弊,避免盲目。 最后,总结代码的意义,强调其作为良好编程实践的一部分,并鼓励用户根据实际情况灵活应用这些方法。确保回答结构清晰,步骤明确,既有理论又有实践建议,帮助用户全面理解并实施代码。</think>### 代码的定义与目标 **代码**(Code Deduplication)是指通过识别和消除代码库中复或冗余的代码片段,以提升代码可维护性、减少潜在错误并优化代码结构的实践。其核心目标是: - 降低维护成本 - 提升代码可读性 - 减少因复修改导致的逻辑不一致风险 --- ### 常见代码复场景与解决方案 #### 1. 显式复代码 **现象**:多个位置存在相同或高度相似的代码块 **示例**: ```python # 复计算面积 def calculate_circle_area(radius): return 3.14 * radius ** 2 def calculate_sphere_volume(radius): return (4/3) * 3.14 * radius ** 2 # 复的半径平方计算 ``` **优化方法**: 提取公共逻辑为独立函数: ```python def calculate_radius_square(radius): return radius ** 2 def calculate_circle_area(radius): return 3.14 * calculate_radius_square(radius) ``` --- #### 2. 隐式复(结构复) **现象**:代码逻辑相同但变量名/细节不同 **示例**: ```python def process_data_A(data): cleaned = [x.strip() for x in data] result = [] for item in cleaned: if item.startswith("A"): result.append(item.upper()) return sorted(result) def process_data_B(data): filtered = [x.replace(" ", "") for x in data] output = [] for element in filtered: if element.endswith("B"): output.append(element.lower()) return sorted(output) ``` **优化方法**: 使用策略模式或高阶函数: ```python def generic_processor(data, clean_func, filter_cond, transform_func): cleaned = [clean_func(x) for x in data] processed = [transform_func(x) for x in cleaned if filter_cond(x)] return sorted(processed) ``` --- #### 3. 循环结构复 **现象**:相同循环逻辑处理不同数据集 **优化方法**: 抽象为可配置的迭代处理器: ```python def batch_process(items, processor, validator): return [processor(item) for item in items if validator(item)] ``` --- ### 高级技术 1. **模板方法模式** 在面向对象编程中,通过抽象基类定义算法框架,子类实现差异化细节。 2. **AOP(面向切面编程)** 使用装饰器或拦截器处理横切关注点(如日志、权限校验)。 3. **代码生成** 对模式化代码使用DSL或模板引擎自动生成。 --- ### 自动化工具推荐 | 工具类型 | 代表工具 | 功能特点 | |----------------|------------------------|-----------------------------------| | 静态分析工具 | SonarQube, PMD | 自动检测复代码块 | | IDE插件 | IntelliJ Duplicates | 实时提示复代码 | | 版本控制工具 | Git blame | 追踪复代码的引入历史 | | 专用检测工具 | Simian, CPD | 跨文件/跨语言检测 | --- ### 注意事项 1. **避免过度抽象**:某些场景下复代码可能更易读 2. **性能权衡**:抽象可能引入额外调用开销 3. **语义一致性**:确保提取后的函数命名准确反映功能 --- ### 实施步骤建议 1. 使用工具扫描代码库建立复代码清单 2. 评估复代码的影响范围和修改成本 3. 优先修改高频使用或核心逻辑的复代码 4. 建立代码审查机制预防新增复 5. 定期构维护(建议结合单元测试) 代码是持续优化过程,需结合项目实际情况灵活运用各种方法。典型收益案例表明,有效可使代码量减少$15\%\sim30\%$,同时显著降低维护难度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值