¶Ô±ÈÐÂÎļþ |
| | |
| | | /* |
| | | * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. |
| | | * |
| | | * Redistribution and use in source and binary forms, with or without |
| | | * modification, are permitted provided that the following conditions are met: |
| | | * |
| | | * Redistributions of source code must retain the above copyright notice, |
| | | * this list of conditions and the following disclaimer. |
| | | * Redistributions in binary form must reproduce the above copyright |
| | | * notice, this list of conditions and the following disclaimer in the |
| | | * documentation and/or other materials provided with the distribution. |
| | | * Neither the name of the dreamlu.net developer nor the names of its |
| | | * contributors may be used to endorse or promote products derived from |
| | | * this software without specific prior written permission. |
| | | * Author: Chill åºéª (smallchill@163.com) |
| | | */ |
| | | package org.springblade.core.datascope.handler; |
| | | |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.springblade.core.datascope.enums.DataScopeEnum; |
| | | import org.springblade.core.datascope.model.DataScopeModel; |
| | | import org.springblade.core.secure.BladeUser; |
| | | import org.springblade.core.tool.constant.RoleConstant; |
| | | import org.springblade.core.tool.utils.BeanUtil; |
| | | import org.springblade.core.tool.utils.Func; |
| | | import org.springblade.core.tool.utils.PlaceholderUtil; |
| | | import org.springblade.core.tool.utils.StringUtil; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.Objects; |
| | | |
| | | /** |
| | | * é»è®¤æ°æ®æéè§å |
| | | * |
| | | * @author Chill |
| | | */ |
| | | @RequiredArgsConstructor |
| | | public class BladeDataScopeHandler implements DataScopeHandler { |
| | | |
| | | private final ScopeModelHandler scopeModelHandler; |
| | | |
| | | @Override |
| | | public String sqlCondition(String mapperId, DataScopeModel dataScope, BladeUser bladeUser, String originalSql) { |
| | | |
| | | //æ°æ®æéèµæºç¼å· |
| | | String code = dataScope.getResourceCode(); |
| | | |
| | | //æ ¹æ®mapperId仿°æ®åºä¸è·åå¯¹åºæ¨¡å |
| | | DataScopeModel dataScopeDb = scopeModelHandler.getDataScopeByMapper(mapperId, bladeUser.getRoleId()); |
| | | |
| | | //mapperIdé
ç½®æªåå°å仿°æ®åºä¸æ ¹æ®èµæºç¼å·è·å |
| | | if (dataScopeDb == null && StringUtil.isNotBlank(code)) { |
| | | dataScopeDb = scopeModelHandler.getDataScopeByCode(code); |
| | | } |
| | | |
| | | //æªä»æ°æ®åºæ¾å°å¯¹åºé
ç½®åéç¨é»è®¤ |
| | | dataScope = (dataScopeDb != null) ? dataScopeDb : dataScope; |
| | | |
| | | //å¤ææ°æ®æéç±»åå¹¶ç»è£
对åºSql |
| | | Integer scopeRule = Objects.requireNonNull(dataScope).getScopeType(); |
| | | DataScopeEnum scopeTypeEnum = DataScopeEnum.of(scopeRule); |
| | | List<Long> ids = new ArrayList<>(); |
| | | String whereSql = "where scope.{} in ({})"; |
| | | if (DataScopeEnum.ALL == scopeTypeEnum || StringUtil.containsAny(bladeUser.getRoleName(), RoleConstant.ADMINISTRATOR)) { |
| | | return null; |
| | | } else if (DataScopeEnum.CUSTOM == scopeTypeEnum) { |
| | | whereSql = PlaceholderUtil.getDefaultResolver().resolveByMap(dataScope.getScopeValue(), BeanUtil.toMap(bladeUser)); |
| | | } else if (DataScopeEnum.OWN == scopeTypeEnum) { |
| | | ids.add(bladeUser.getUserId()); |
| | | } else if (DataScopeEnum.OWN_DEPT == scopeTypeEnum) { |
| | | ids.addAll(Func.toLongList(bladeUser.getDeptId())); |
| | | } else if (DataScopeEnum.OWN_DEPT_CHILD == scopeTypeEnum) { |
| | | List<Long> deptIds = Func.toLongList(bladeUser.getDeptId()); |
| | | ids.addAll(deptIds); |
| | | deptIds.forEach(deptId -> { |
| | | List<Long> deptIdList = scopeModelHandler.getDeptAncestors(deptId); |
| | | ids.addAll(deptIdList); |
| | | }); |
| | | } |
| | | return StringUtil.format("select {} from ({}) scope " + whereSql, Func.toStr(dataScope.getScopeField(), "*"), originalSql, dataScope.getScopeColumn(), StringUtil.join(ids)); |
| | | } |
| | | |
| | | } |