Closed
Description
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "sqlite"
url = "file:./dev.db"
}
model User {
id String @id
orgMember OrgMember[]
}
model Organization {
id String @id
members OrgMember[]
roles OrgMemberRole[]
}
model OrgMember {
user User @relation(fields: [userId], references: [id])
userId String
org Organization @relation(fields: [orgId], references: [id])
orgId String
roles OrgMemberRole[]
}
abstract model _BaseEntity {
id String @id @db.Uuid @default(uuid()) @deny("update", true)
createdAt DateTime @default(now()) @deny("update", true)
updatedAt DateTime @updatedAt @deny("update", true)
deletedAt Int @default(0) @omit @deny("update", deletedAt != 0)
// deny DELETE in favor of soft delete
@@deny("delete", true)
// deny ALL on deleted entities
@@deny("all", deletedAt != 0)
// deny ALL if user is not authenticated
@@deny("all", auth() == null)
}
abstract model _OrganizationEntity extends _BaseEntity {
org Organization @relation(fields: [orgId], references: [id], onDelete: Cascade)
orgId String @db.Uuid @deny("update", true)
// deny ALL if user is not an organization member
@@deny("all", org.members^[user == auth()])
}
model OrgMemberRole extends _OrganizationEntity {
name String
members OrgMember[]
@@unique([orgId, name, deletedAt]) // DOES NOT WORK. NEEDED SO THAT NEW ROLES CAN HAVE THE SAME NAME AS ALREADY DELETED ONES BUT BE UNIQUE IF NOT DELETED
}