@@ -29,6 +29,8 @@ model Space {
29
29
id String @id @default(uuid())
30
30
createdAt DateTime @default(now())
31
31
updatedAt DateTime @updatedAt
32
+ owner User @relation(fields: [ownerId], references: [id], onDelete: Cascade)
33
+ ownerId String @default(auth().id)
32
34
name String @length(4, 50)
33
35
slug String @unique @regex('^[0-9a-zA-Z\-_]{4,16}$')
34
36
members SpaceUser[]
@@ -64,8 +66,14 @@ model SpaceUser {
64
66
// require login
65
67
@@deny('all', auth() == null)
66
68
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])
69
77
70
78
// user can read entries for spaces which he's a member of
71
79
@@allow('read', space.members?[user == auth()])
@@ -75,13 +83,14 @@ model SpaceUser {
75
83
* User model
76
84
*/
77
85
model 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[]
85
94
@@allow('create,read', true)
86
95
@@allow('all', auth() == this)
87
96
}
0 commit comments