package com.zt.modules.sys.service; 
 | 
  
 | 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 
 | 
import com.zt.common.constant.CacheKey; 
 | 
import com.zt.common.constant.Constant; 
 | 
import com.zt.common.service.BaseService; 
 | 
import com.zt.common.utils.CacheUtils; 
 | 
import com.zt.core.context.UserContext; 
 | 
import com.zt.modules.sys.dao.SysRoleDataScopeDao; 
 | 
import com.zt.modules.sys.model.SysInterface; 
 | 
import com.zt.modules.sys.model.SysRoleDataScope; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.stereotype.Service; 
 | 
import org.springframework.transaction.annotation.Transactional; 
 | 
  
 | 
import java.util.List; 
 | 
  
 | 
/** 
 | 
 * 角色数据权限 
 | 
 * 
 | 
 * @author hehz 
 | 
 * @since 1.0.0 
 | 
 */ 
 | 
@Service 
 | 
public class SysRoleDataScopeService extends BaseService<SysRoleDataScopeDao, SysRoleDataScope> { 
 | 
  
 | 
    @Autowired 
 | 
    private SysInterfaceService sysInterfaceService; 
 | 
  
 | 
    /** 
 | 
     * 获取当前登录人员拥有的数据范围 
 | 
     * 
 | 
     * @param url 
 | 
     * @return 
 | 
     */ 
 | 
    public List<SysRoleDataScope> getDataScopeOrCurrentUser(String url) { 
 | 
        SysInterface interfaceEntity = sysInterfaceService.getInterfaceByUrl(url); 
 | 
        if (interfaceEntity == null) { 
 | 
            return null; 
 | 
        } 
 | 
        return baseDao.getAuthorizedDataScope(interfaceEntity.getId(), UserContext.getUser().getRoleIdList()); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据角色ID,获取数据权限列表 
 | 
     * 
 | 
     * @param roleId 
 | 
     * @return 
 | 
     */ 
 | 
    public List<SysRoleDataScope> getByRoleId(Long roleId) { 
 | 
        return baseDao.getByRoleId(roleId); 
 | 
    } 
 | 
  
 | 
    @Transactional(rollbackFor = Exception.class) 
 | 
    public void saveOrUpdate(Long roleId, List<SysRoleDataScope> list) { 
 | 
        for (SysRoleDataScope scope : list) { 
 | 
            scope.setRoleId(roleId); 
 | 
        } 
 | 
        this.saveRelatedDatas("role_id", roleId, "field_id", list); 
 | 
  
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据角色id,删除角色数据权限关系 
 | 
     * 
 | 
     * @param roleIds 
 | 
     *            角色ids 
 | 
     */ 
 | 
    @Transactional(rollbackFor = Exception.class) 
 | 
    public void deleteByRoleIds(Long[] roleIds) { 
 | 
        this.deleteLogic(baseDao.selectList(new QueryWrapper<SysRoleDataScope>().lambda().in( 
 | 
                SysRoleDataScope::getRoleId, roleIds))); 
 | 
  
 | 
        CacheUtils.removeAll(Constant.Cache.TOKEN);// 清理用户权限缓存 
 | 
    } 
 | 
} 
 |