package com.iailab.module.system.service.permission;
import com.iailab.module.system.api.permission.dto.DeptDataPermissionRespDTO;
import java.util.Collection;
import java.util.Set;
import static java.util.Collections.singleton;
/**
* 权限 Service 接口
*
* 提供用户-角色、角色-菜单、角色-部门的关联权限处理
*
* @author iailab
*/
public interface PermissionService {
/**
* 判断是否有权限,任一一个即可
*
* @param userId 用户编号
* @param permissions 权限
* @return 是否
*/
boolean hasAnyPermissions(Long userId, String... permissions);
/**
* 判断是否有角色,任一一个即可
*
* @param roles 角色数组
* @return 是否
*/
boolean hasAnyRoles(Long userId, String... roles);
// ========== 角色-菜单的相关方法 ==========
/**
* 设置角色菜单
*
* @param roleId 角色编号
* @param menuIds 菜单编号集合
*/
void assignRoleMenu(Long roleId, Set menuIds);
/**
* 设置角色应用菜单
*
* @param roleId 角色编号
* @param menuIds 菜单编号集合
*/
// void assignRoleAppMenu(Long roleId, Set menuIds);
/**
* 处理角色删除时,删除关联授权数据
*
* @param roleId 角色编号
*/
void processRoleDeleted(Long roleId);
/**
* 处理菜单删除时,删除关联授权数据
*
* @param menuId 菜单编号
*/
void processMenuDeleted(Long menuId);
/**
* 获得角色拥有的菜单编号集合
*
* @param roleId 角色编号
* @return 菜单编号集合
*/
default Set getRoleMenuListByRoleId(Long roleId) {
return getRoleMenuListByRoleId(singleton(roleId));
}
/**
* 获得角色拥有的应用菜单编号集合
*
* @param roleId 角色编号
* @return 菜单编号集合
*/
default Set getRoleAppMenuListByRoleId(Long roleId) {
return getRoleAppMenuListByRoleId(singleton(roleId));
}
/**
* 获得角色们拥有的菜单编号集合
*
* @param roleIds 角色编号数组
* @return 菜单编号集合
*/
Set getRoleMenuListByRoleId(Collection roleIds);
/**
* 获得角色们拥有的应用菜单编号集合
*
* @param roleIds 角色编号数组
* @return 菜单编号集合
*/
Set getRoleAppMenuListByRoleId(Collection roleIds);
/**
* 获得拥有指定菜单的角色编号数组,从缓存中获取
*
* @param menuId 菜单编号
* @return 角色编号数组
*/
Set getMenuRoleIdListByMenuIdFromCache(Long menuId);
// ========== 用户-角色的相关方法 ==========
/**
* 设置用户角色
*
* @param userId 角色编号
* @param roleIds 角色编号集合
*/
void assignUserRole(Long userId, Set roleIds);
/**
* 处理用户删除时,删除关联授权数据
*
* @param userId 用户编号
*/
void processUserDeleted(Long userId);
/**
* 获得拥有多个角色的用户编号集合
*
* @param roleIds 角色编号集合
* @return 用户编号集合
*/
Set getUserRoleIdListByRoleId(Collection roleIds);
/**
* 获得用户拥有的角色编号集合
*
* @param userId 用户编号
* @return 角色编号集合
*/
Set getUserRoleIdListByUserId(Long userId);
/**
* 获得用户拥有的角色编号集合,从缓存中获取
*
* @param userId 用户编号
* @return 角色编号集合
*/
Set getUserRoleIdListByUserIdFromCache(Long userId);
// ========== 用户-部门的相关方法 ==========
/**
* 设置角色的数据权限
*
* @param roleId 角色编号
* @param dataScope 数据范围
* @param dataScopeDeptIds 部门编号数组
*/
void assignRoleDataScope(Long roleId, Integer dataScope, Set dataScopeDeptIds);
/**
* 获得登陆用户的部门数据权限
*
* @param userId 用户编号
* @return 部门数据权限
*/
DeptDataPermissionRespDTO getDeptDataPermission(Long userId);
}