Executando verificação de segurança...
3

Esse post me veio em uma boa hora, muito obrigado! Estava planejando melhorar o sistema de permissionamento de um projeto e essa implementação é muito boa! O melhor é que a mesma abre portas pra atualizações no futuro, então achei bem flexível.

Schema prisma que vou usar:

model User {
  id           String   @id @default(cuid())
  email        String   @unique
  password     String
  name         String
  createdAt    DateTime @default(now())
  updatedAt    DateTime @updatedAt

  // Relação N:N com grupos de permissões
  permissionGroups UserPermissionGroup[]
}

model PermissionGroup {
  id          String   @id @default(cuid())
  name        String   @unique
  description String?
  createdAt   DateTime @default(now())
  updatedAt   DateTime @updatedAt

  // Relação N:N com usuários
  users UserPermissionGroup[]
  // Relação N:N com permissões
  permissions PermissionGroupPermission[]
}

model Permission {
  id          String   @id @default(cuid())
  name        String   @unique // ex: "CREATE_USER", "DELETE_ORDER"
  description String?
  createdAt   DateTime @default(now())
  updatedAt   DateTime @updatedAt

  // Relação N:N com grupos
  groups PermissionGroupPermission[]
}

// Tabela pivot User <-> PermissionGroup
model UserPermissionGroup {
  userId           String
  permissionGroupId String

  user   User           @relation(fields: [userId], references: [id], onDelete: Cascade)
  group  PermissionGroup @relation(fields: [permissionGroupId], references: [id], onDelete: Cascade)

  @@id([userId, permissionGroupId])
}

// Tabela pivot PermissionGroup <-> Permission
model PermissionGroupPermission {
  permissionGroupId String
  permissionId      String

  group      PermissionGroup @relation(fields: [permissionGroupId], references: [id], onDelete: Cascade)
  permission Permission      @relation(fields: [permissionId], references: [id], onDelete: Cascade)

  @@id([permissionGroupId, permissionId])
}
Carregando publicação patrocinada...