import { Injectable } from "@nestjs/common"; import { eq } from "drizzle-orm"; import { DatabaseService } from "../../database/database.service"; import { permissions, roles, rolesToPermissions, usersToRoles, } from "../../database/schemas"; @Injectable() export class RbacRepository { constructor(private readonly databaseService: DatabaseService) {} async findRolesByUserId(userId: string) { const result = await this.databaseService.db .select({ slug: roles.slug, }) .from(usersToRoles) .innerJoin(roles, eq(usersToRoles.roleId, roles.id)) .where(eq(usersToRoles.userId, userId)); return result.map((r) => r.slug); } async findPermissionsByUserId(userId: string) { const result = await this.databaseService.db .select({ slug: permissions.slug, }) .from(usersToRoles) .innerJoin( rolesToPermissions, eq(usersToRoles.roleId, rolesToPermissions.roleId), ) .innerJoin(permissions, eq(rolesToPermissions.permissionId, permissions.id)) .where(eq(usersToRoles.userId, userId)); return Array.from(new Set(result.map((p) => p.slug))); } }