package cn.iocoder.yudao.module.system.api.permission;

import cn.iocoder.yudao.module.system.api.permission.dto.DeptDataPermissionRespDTO;

import java.util.Collection;
import java.util.List;
import java.util.Set;

/**
 * 权限 API 接口
 *
 * @author 芋道源码
 */
public interface PermissionApi {

    /**
     * 获得拥有多个角色的用户编号集合
     *
     * @param roleIds 角色编号集合
     * @return 用户编号集合
     */
    Set<Long> getUserRoleIdListByRoleIds(Collection<Long> roleIds);

    /**
     * 判断是否有权限，任一一个即可
     *
     * @param userId 用户编号
     * @param permissions 权限
     * @return 是否
     */
    boolean hasAnyPermissions(Long userId, String... permissions);

    /**
     * 判断是否有角色，任一一个即可
     *
     * @param userId 用户编号
     * @param roles 角色数组
     * @return 是否
     */
    boolean hasAnyRoles(Long userId, String... roles);

    /**
     * 获得登陆用户的部门数据权限
     *
     * @param userId 用户编号
     * @return 部门数据权限
     */
    DeptDataPermissionRespDTO getDeptDataPermission(Long userId);

    /**
     * 设置用户角色
     *
     * @param userId  角色编号
     * @param roleCodes 角色编号集合
     */
    void assignUserRole(Long userId, Set<String> roleCodes);

    /**
     * 设置用户角色
     *
     * @author 小李
     * @date 18:58 2024/8/14
     * @param userId 用户D
     * @param roleIds 角色IDs
    **/
    void assignUserRoleByRoleIds(Long userId, Set<Long> roleIds);

    /**
     * 获取某个用户的角色IDs
     * @author 小李
     * @date 19:24 2024/8/14
     * @param userId 用户ID
    **/
    List<Long> getRoleIdsByUserId(Long userId);

    /**
     * 根据权限ID拿拥有该权限的所有人
     * @author 小李
     * @date 10:25 2024/8/26
     * @param roleId 权限ID
     **/
    List<Long> getUserIdByRoleId(Long roleId);
}
