@@ -7,11 +7,13 @@ let teardown: () => Promise<void>;
77
88let user1 : any ;
99let user2 : any ;
10+ let user3 : any ;
1011
1112beforeAll ( async ( ) => {
1213 ( { pg, db, teardown } = await getConnections ( ) ) ;
1314 user1 = await insertUser ( pg , '[email protected] ' ) ; 1415 user2 = await insertUser ( pg , '[email protected] ' ) ; 16+ user3 = await insertUser ( pg , '[email protected] ' ) ; 1517} ) ;
1618
1719afterAll ( async ( ) => {
@@ -79,5 +81,69 @@ describe('tutorial: basic rls crud operations', () => {
7981 )
8082 ) . rejects . toThrow ( ) ;
8183 } ) ;
84+
85+ it ( 'should allow users to see only their own data in list queries' , async ( ) => {
86+ // db.setContext({role: 'service_role'});
87+
88+ // set context to user1
89+ db . setContext ( {
90+ role : 'authenticated' ,
91+ 'request.jwt.claim.sub' : user1 . id
92+ } ) ;
93+
94+
95+ // create multiple users as admin
96+ await db . one (
97+ `INSERT INTO rls_test.pets (name, breed, user_id)
98+ VALUES ($1, $2, $3)
99+ RETURNING id` ,
100+ [ 'Fido' , 'Labrador' , user1 . id ]
101+ ) ;
102+
103+ // set context to user1
104+ db . setContext ( {
105+ role : 'authenticated' ,
106+ 'request.jwt.claim.sub' : user2 . id
107+ } ) ;
108+
109+
110+ await db . one (
111+ `INSERT INTO rls_test.pets (name, breed, user_id)
112+ VALUES ($1, $2, $3)
113+ RETURNING id` ,
114+ [ 'Buddy' , 'Golden Retriever' , user2 . id ]
115+ ) ;
116+
117+ // set context to user1
118+ db . setContext ( {
119+ role : 'authenticated' ,
120+ 'request.jwt.claim.sub' : user3 . id
121+ } ) ;
122+
123+
124+ await db . one (
125+ `INSERT INTO rls_test.pets (name, breed, user_id)
126+ VALUES ($1, $2, $3)
127+ RETURNING id` ,
128+ [ 'Rex' , 'German Shepherd' , user3 . id ]
129+ ) ;
130+
131+ // set context to user1
132+ db . setContext ( {
133+ role : 'authenticated' ,
134+ 'request.jwt.claim.sub' : user1 . id
135+ } ) ;
136+
137+ // user1 should only see their own record in a list query
138+ const allUsers = await db . many (
139+ `SELECT id, name, breed, user_id FROM rls_test.pets ORDER BY name`
140+ ) ;
141+
142+ expect ( allUsers . length ) . toBe ( 1 ) ;
143+ expect ( allUsers [ 0 ] . user_id ) . toBe ( user1 . id ) ;
144+ expect ( allUsers [ 0 ] . name ) . toBe ( 'Fido' ) ;
145+ expect ( allUsers [ 0 ] . breed ) . toBe ( 'Labrador' ) ;
146+ } ) ;
147+
82148} ) ;
83149
0 commit comments