import { Repository } from 'typeorm';
import { RoleEntity } from './entities/role.entity';
import { CreateRoleDto } from './dto/create-role.dto';
import { RoleResponseDto } from './dto/role-response.dto';
import { UpdateRoleDto } from './dto/update-role.dto';
import { PaginatedResponseDto } from 'common/utils/paginated-response.dto';
import { UserResponseDto } from 'modules/user/dto/user-response.dto';
import { UserPermissionOverrideEntity } from './entities/user-permission-override.entity';
import { RolePermissionStateEntity } from './entities/role-permission-state.entity';
import { PermissionWithStateDto, SubPermissionWithStateDto } from '../permissions/dto/permission-state.dto';
import { PermissionEntity } from '../permissions/entities/permission.entity';
import { SubPermissionEntity } from '../permissions/entities/sub-permission.entity';
import { PermissionStateDto } from './dto/permission-state.dto';
import { UserPermissionOverrideDto } from './dto/user-permission-override.dto';
import { EffectivePermissionDto } from './dto/effective-permission.dto';
import { UserEntity } from 'modules/user/entity/users.entity';
import { BaseRoleService } from './abstract/role.abstract';
export declare class RoleService extends BaseRoleService {
    private readonly roleRepository;
    private readonly userRepository;
    private readonly permissionRepository;
    private readonly subPermissionRepository;
    private userOverrideRepository;
    private rolePermissionStateRepository;
    private readonly logger;
    constructor(roleRepository: Repository<RoleEntity>, userRepository: Repository<UserEntity>, permissionRepository: Repository<PermissionEntity>, subPermissionRepository: Repository<SubPermissionEntity>, userOverrideRepository: Repository<UserPermissionOverrideEntity>, rolePermissionStateRepository: Repository<RolePermissionStateEntity>);
    createRole(createRoleDto: CreateRoleDto): Promise<RoleResponseDto>;
    updateRole(roleId: string, updateRoleDto: UpdateRoleDto): Promise<RoleResponseDto>;
    deleteRole(roleId: string): Promise<void>;
    findAllRoles(page: number, limit: number, clientId?: string): Promise<PaginatedResponseDto<RoleResponseDto>>;
    findRoleById(roleId: string): Promise<RoleResponseDto>;
    findRoleByName(roleName: string, clientId?: string): Promise<RoleResponseDto>;
    removeUserFromRole(userId: number, roleId: string): Promise<void>;
    revokeUserAllRoles(userId: number): Promise<void>;
    removeUserRolesFromClient(userId: number, clientId: string): Promise<void>;
    setRolePermissionState(roleId: string, permissionId: string, state: any): Promise<void>;
    setRoleSubPermissionState(roleId: string, subPermissionId: string, state: any): Promise<void>;
    bulkSetRolePermissionStates(roleId: string, permissions: PermissionStateDto[], subPermissions: PermissionStateDto[]): Promise<RoleResponseDto>;
    setUserPermissionOverride(override: UserPermissionOverrideDto): Promise<void>;
    removeUserPermissionOverride(userId: number, permissionId?: string, subPermissionId?: string, clientId?: string): Promise<void>;
    getUserPermissionOverrides(userId: number, clientId?: string): Promise<UserPermissionOverrideEntity[]>;
    checkUserPermission(userId: number, permissionName: string, clientId?: string): Promise<boolean>;
    checkUserSubPermission(userId: number, subPermissionName: string, clientId?: string): Promise<boolean>;
    getUserEffectivePermissions(userId: number, clientId?: string): Promise<EffectivePermissionDto[]>;
    getPermissionsByRoleId(roleId: string): Promise<PermissionWithStateDto[]>;
    getSubPermissionsByRoleId(roleId: string): Promise<SubPermissionWithStateDto[]>;
    getPermissionsByUserId(userId: number, clientId?: string): Promise<EffectivePermissionDto[]>;
    getSubPermissionsByUserId(userId: number, clientId?: string): Promise<EffectivePermissionDto[]>;
    getPermissionsByRoleName(roleName: string, clientId?: string): Promise<PermissionWithStateDto[]>;
    getRolesByUserId(userId: number): Promise<RoleResponseDto[]>;
    getRolesByClientId(clientId: string): Promise<RoleResponseDto[]>;
    getUsersByRoleId(roleId: string): Promise<UserResponseDto[]>;
    getRolesByUserEmail(email: string, clientId?: string): Promise<RoleResponseDto[]>;
    duplicateRole(roleId: string, newName: string): Promise<RoleResponseDto>;
    getRoleHierarchy(clientId?: string): Promise<RoleResponseDto[]>;
    assignUserToRoleByEmail(email: string, roleId: string, clientId?: string): Promise<void>;
    private getEffectivePermissionState;
    private getRolePermissions;
    private checkPermission;
    private getUserPermissionOverride;
    private upsertRolePermissionState;
    private mapRoleToResponseDto;
}
