@@ -29,6 +29,8 @@ model Space {
2929 id String @id @default(uuid())
3030 createdAt DateTime @default(now())
3131 updatedAt DateTime @updatedAt
32+ owner User @relation(fields: [ownerId], references: [id], onDelete: Cascade)
33+ ownerId String @default(auth().id)
3234 name String @length(4, 50)
3335 slug String @unique @regex('^[0-9a-zA-Z\- _]{4,16}$' )
3436 members SpaceUser[]
@@ -64,8 +66,14 @@ model SpaceUser {
6466 // require login
6567 @@deny('all' , auth() == null )
6668
67- // space admin can create/update/delete
68- @@allow('create,update,delete' , space.members?[user == auth() && role == ADMIN])
69+ // space owner can add any one
70+ @@allow('create' , space.owner == auth())
71+
72+ // space admin can add anyone but not himself
73+ @@allow('create' , auth() != user && space.members?[user == auth() && role == ADMIN])
74+
75+ // space admin can update/delete
76+ @@allow('update,delete' , space.members?[user == auth() && role == ADMIN])
6977
7078 // user can read entries for spaces which he's a member of
7179 @@allow('read' , space.members?[user == auth()])
@@ -75,13 +83,14 @@ model SpaceUser {
7583 * User model
7684 */
7785model User {
78- id String @id @default(cuid())
79- email String @unique @email
80- password String @password @omit @length(6, 32)
81- name String ?
82- spaces SpaceUser[]
83- todos Todo[]
84- lists List[]
86+ id String @id @default(cuid())
87+ email String @unique @email
88+ password String @password @omit @length(6, 32)
89+ name String ?
90+ ownedSpaces Space[]
91+ memberships SpaceUser[]
92+ todos Todo[]
93+ lists List[]
8594 @@allow('create,read' , true )
8695 @@allow('all' , auth() == this )
8796}
0 commit comments