55// See https://github.com/rocicorp/mono/blob/main/apps/zbugs/src/domain/schema.ts
66// for more complex examples, including many-to-many.
77
8- import type { ExpressionBuilder , Row } from '@rocicorp/zero'
8+ import type { ExpressionBuilder , PermissionsConfig , Row } from '@rocicorp/zero'
99import {
1010 ANYONE_CAN ,
1111 boolean ,
1212 createSchema ,
1313 definePermissions ,
14- NOBODY_CAN ,
1514 number ,
1615 relationships ,
1716 string ,
@@ -36,8 +35,8 @@ const medium = table('medium')
3635const message = table ( 'message' )
3736 . columns ( {
3837 id : string ( ) ,
39- senderID : string ( ) ,
40- mediumID : string ( ) ,
38+ senderID : string ( ) . from ( 'sender_id' ) ,
39+ mediumID : string ( ) . from ( 'medium_id' ) ,
4140 body : string ( ) ,
4241 timestamp : number ( ) ,
4342 } )
@@ -85,33 +84,29 @@ export const permissions = definePermissions<AuthData, Schema>(schema, () => {
8584 return {
8685 medium : {
8786 row : {
88- insert : NOBODY_CAN ,
89- update : {
90- preMutation : NOBODY_CAN ,
91- } ,
92- delete : NOBODY_CAN ,
87+ select : ANYONE_CAN ,
9388 } ,
9489 } ,
9590 user : {
9691 row : {
97- insert : NOBODY_CAN ,
98- update : {
99- preMutation : NOBODY_CAN ,
100- } ,
101- delete : NOBODY_CAN ,
92+ select : ANYONE_CAN ,
10293 } ,
10394 } ,
10495 message : {
10596 row : {
10697 // anyone can insert
10798 insert : ANYONE_CAN ,
108- // only sender can edit their own messages
10999 update : {
100+ // sender can only edit own messages
110101 preMutation : [ allowIfMessageSender ] ,
102+ // sender can only edit messages to be owned by self
103+ postMutation : [ allowIfMessageSender ] ,
111104 } ,
112105 // must be logged in to delete
113106 delete : [ allowIfLoggedIn ] ,
107+ // everyone can read current messages
108+ select : ANYONE_CAN ,
114109 } ,
115110 } ,
116- }
111+ } satisfies PermissionsConfig < AuthData , Schema >
117112} )
0 commit comments