@@ -42,6 +42,8 @@ model Space {
4242 id String @id @default(uuid())
4343 createdAt DateTime @default(now())
4444 updatedAt DateTime @updatedAt
45+ owner User @relation(fields: [ownerId], references: [id], onDelete: Cascade)
46+ ownerId String @default(auth().id)
4547 name String @length(4, 50)
4648 slug String @unique @regex('^[0-9a-zA-Z]{4,16}$' )
4749 members SpaceUser[]
@@ -77,8 +79,14 @@ model SpaceUser {
7779 // require login
7880 @@deny('all' , auth() == null )
7981
80- // space admin can create/update/delete
81- @@allow('create,update,delete' , space.members?[user == auth() && role == ADMIN])
82+ // space owner can add any one
83+ @@allow('create' , space.owner == auth())
84+
85+ // space admin can add anyone but not himself
86+ @@allow('create' , auth() != this .user && space.members?[user == auth() && role == ADMIN])
87+
88+ // space admin can update and delete
89+ @@allow('update,delete' , space.members?[user == auth() && role == ADMIN])
8290
8391 // user can read entries for spaces which he's a member of
8492 @@allow('read' , space.members?[user == auth()])
@@ -95,7 +103,8 @@ model User {
95103 emailVerified DateTime ?
96104 password String ? @password @omit
97105 name String ?
98- spaces SpaceUser[]
106+ ownedSpaces Space[]
107+ memberships SpaceUser[]
99108 image String ? @url
100109 lists List[]
101110 todos Todo[]
@@ -107,7 +116,7 @@ model User {
107116 @@allow('create' , true )
108117
109118 // can be read by users sharing any space
110- @@allow('read' , spaces ?[space.members?[user == auth()]])
119+ @@allow('read' , memberships ?[space.members?[user == auth()]])
111120
112121 // full access by oneself
113122 @@allow('all' , auth() == this )
0 commit comments