| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- /**
- * ----------------------------------------------------------------
- * PostgreSQL policy templates for the storage dashboard
- * ----------------------------------------------------------------
- * id: Unique identifier for the monaco editor to dynamically refresh
- * templateName: As a display for a more descriptive title for the policy
- * description: Additional details about the template and how to make it yours
- * statement: SQL statement template for the policy
- *
- * name: Actual policy name that will be used in the editor
- * definition: Actual policy definition that will be used in the editor
- * allowedOperations: Operations to create policies for
- */
- export const STORAGE_POLICY_TEMPLATES = [
- {
- id: 'policy-1',
- templateName: 'Allow access to JPG images in a public folder to anonymous users',
- description:
- 'This policy uses native postgres functions, functions from auth and storage schema',
- name: 'Give anon users access to JPG images in folder',
- statement: `
- CREATE POLICY "policy_name"
- ON storage.objects FOR {operation} {USING | WITH CHECK} (
- -- restrict bucket
- bucket_id = {bucket_name}
- -- allow access to only jpg file
- AND storage."extension"(name) = 'jpg'
- -- in the public folder
- AND LOWER((storage.foldername(name))[1]) = 'public'
- -- to anonymous users
- AND auth.role() = 'anon'
- );
- `.trim(),
- definition: `bucket_id = {bucket_id} AND storage."extension"(name) = 'jpg' AND LOWER((storage.foldername(name))[1]) = 'public' AND auth.role() = 'anon'`,
- allowedOperations: [],
- },
- {
- id: 'policy-2',
- templateName: 'Give users access to only their own top level folder named as uid',
- description:
- 'For example a user with id d7bed83c-44a0-4a4f-925f-efc384ea1e50 will be able to access anything under the folder d7bed83c-44a0-4a4f-925f-efc384ea1e50/',
- name: 'Give users access to own folder',
- statement: `
- CREATE POLICY "policy_name"
- ON storage.objects FOR {operation} {USING | WITH CHECK} (
- -- restrict bucket
- bucket_id = {bucket_name}
- and (select auth.uid()::text) = (storage.foldername(name))[1]
- );
- `.trim(),
- definition: `bucket_id = {bucket_id} AND (select auth.uid()::text) = (storage.foldername(name))[1]`,
- allowedOperations: [],
- },
- {
- id: 'policy-3',
- templateName: 'Give users access to a folder only to authenticated users',
- description:
- 'This policy gives users access to a folder (e.g private) only if they are authenticated',
- name: 'Give users authenticated access to folder',
- statement: `
- CREATE POLICY "policy_name"
- ON storage.objects FOR {operation} {USING | WITH CHECK} (
- -- restrict bucket
- bucket_id = {bucket_name}
- AND (storage.foldername(name))[1] = 'private'
- AND (select auth.role()) = 'authenticated'
- );
- `.trim(),
- definition: `bucket_id = {bucket_id} AND (storage.foldername(name))[1] = 'private' AND auth.role() = 'authenticated'`,
- allowedOperations: [],
- },
- {
- id: 'policy-4',
- templateName: 'Give access to a nested folder called admin/assets only to a specific user',
- description:
- 'This policy gives read access to all authenticated users for your project to the folder "public"',
- name: 'Give access to a folder',
- statement: `
- CREATE POLICY "policy_name"
- ON storage.objects FOR {operation} {USING | WITH CHECK} (
- -- restrict bucket
- bucket_id = {bucket_name}
- AND (storage.foldername(name))[1] = 'admin' AND (storage.foldername(name))[2] = 'assets'
- AND (select auth.uid()::text) = 'd7bed83c-44a0-4a4f-925f-efc384ea1e50'
- );
- `.trim(),
- definition: `bucket_id = {bucket_id} AND (storage.foldername(name))[1] = 'admin' AND (storage.foldername(name))[2] = 'assets' AND (select auth.uid()::text) = 'd7bed83c-44a0-4a4f-925f-efc384ea1e50'`,
- allowedOperations: [],
- },
- {
- id: 'policy-5',
- templateName: 'Give access to a file to a user',
- description: 'This policy gives access to a specific file to a specific user',
- name: 'Give access to a file to user',
- statement: `
- CREATE POLICY "policy_name"
- ON storage.objects FOR {operation} {USING | WITH CHECK} (
- -- restrict bucket
- bucket_id = {bucket_name}
- AND name = 'admin/assets/Costa Rican Frog.jpg'
- AND (select auth.uid()::text) = 'd7bed83c-44a0-4a4f-925f-efc384ea1e50'
- );
- `.trim(),
- definition: `bucket_id = {bucket_id} AND name = 'admin/assets/Costa Rican Frog.jpg' AND (select auth.uid()::text) = 'd7bed83c-44a0-4a4f-925f-efc384ea1e50'`,
- allowedOperations: [],
- },
- ]
|