328 lines
9.5 KiB
PL/PgSQL
328 lines
9.5 KiB
PL/PgSQL
grant delete on table "auth"."audit_log_entries" to "prisma";
|
|
|
|
grant select on table "auth"."audit_log_entries" to "prisma";
|
|
|
|
grant delete on table "auth"."flow_state" to "prisma";
|
|
|
|
grant select on table "auth"."flow_state" to "prisma";
|
|
|
|
grant delete on table "auth"."identities" to "prisma";
|
|
|
|
grant select on table "auth"."identities" to "prisma";
|
|
|
|
grant delete on table "auth"."instances" to "prisma";
|
|
|
|
grant select on table "auth"."instances" to "prisma";
|
|
|
|
grant delete on table "auth"."mfa_amr_claims" to "prisma";
|
|
|
|
grant select on table "auth"."mfa_amr_claims" to "prisma";
|
|
|
|
grant delete on table "auth"."mfa_challenges" to "prisma";
|
|
|
|
grant select on table "auth"."mfa_challenges" to "prisma";
|
|
|
|
grant delete on table "auth"."mfa_factors" to "prisma";
|
|
|
|
grant select on table "auth"."mfa_factors" to "prisma";
|
|
|
|
grant delete on table "auth"."one_time_tokens" to "prisma";
|
|
|
|
grant select on table "auth"."one_time_tokens" to "prisma";
|
|
|
|
grant delete on table "auth"."refresh_tokens" to "prisma";
|
|
|
|
grant select on table "auth"."refresh_tokens" to "prisma";
|
|
|
|
grant delete on table "auth"."saml_providers" to "prisma";
|
|
|
|
grant select on table "auth"."saml_providers" to "prisma";
|
|
|
|
grant delete on table "auth"."saml_relay_states" to "prisma";
|
|
|
|
grant select on table "auth"."saml_relay_states" to "prisma";
|
|
|
|
grant delete on table "auth"."schema_migrations" to "prisma";
|
|
|
|
grant select on table "auth"."schema_migrations" to "prisma";
|
|
|
|
grant delete on table "auth"."sessions" to "prisma";
|
|
|
|
grant select on table "auth"."sessions" to "prisma";
|
|
|
|
grant delete on table "auth"."sso_domains" to "prisma";
|
|
|
|
grant select on table "auth"."sso_domains" to "prisma";
|
|
|
|
grant delete on table "auth"."sso_providers" to "prisma";
|
|
|
|
grant select on table "auth"."sso_providers" to "prisma";
|
|
|
|
grant delete on table "auth"."users" to "prisma";
|
|
|
|
grant select on table "auth"."users" to "prisma";
|
|
|
|
CREATE TRIGGER on_auth_user_created AFTER INSERT ON auth.users FOR EACH ROW EXECUTE FUNCTION handle_new_user();
|
|
|
|
CREATE TRIGGER on_auth_user_deleted BEFORE DELETE ON auth.users FOR EACH ROW EXECUTE FUNCTION handle_user_delete();
|
|
|
|
CREATE TRIGGER on_auth_user_updated AFTER UPDATE ON auth.users FOR EACH ROW EXECUTE FUNCTION handle_user_update();
|
|
|
|
|
|
drop trigger if exists "objects_delete_delete_prefix" on "storage"."objects";
|
|
|
|
drop trigger if exists "objects_insert_create_prefix" on "storage"."objects";
|
|
|
|
drop trigger if exists "objects_update_create_prefix" on "storage"."objects";
|
|
|
|
drop trigger if exists "prefixes_create_hierarchy" on "storage"."prefixes";
|
|
|
|
drop trigger if exists "prefixes_delete_hierarchy" on "storage"."prefixes";
|
|
|
|
revoke delete on table "storage"."prefixes" from "anon";
|
|
|
|
revoke insert on table "storage"."prefixes" from "anon";
|
|
|
|
revoke references on table "storage"."prefixes" from "anon";
|
|
|
|
revoke select on table "storage"."prefixes" from "anon";
|
|
|
|
revoke trigger on table "storage"."prefixes" from "anon";
|
|
|
|
revoke truncate on table "storage"."prefixes" from "anon";
|
|
|
|
revoke update on table "storage"."prefixes" from "anon";
|
|
|
|
revoke delete on table "storage"."prefixes" from "authenticated";
|
|
|
|
revoke insert on table "storage"."prefixes" from "authenticated";
|
|
|
|
revoke references on table "storage"."prefixes" from "authenticated";
|
|
|
|
revoke select on table "storage"."prefixes" from "authenticated";
|
|
|
|
revoke trigger on table "storage"."prefixes" from "authenticated";
|
|
|
|
revoke truncate on table "storage"."prefixes" from "authenticated";
|
|
|
|
revoke update on table "storage"."prefixes" from "authenticated";
|
|
|
|
revoke delete on table "storage"."prefixes" from "service_role";
|
|
|
|
revoke insert on table "storage"."prefixes" from "service_role";
|
|
|
|
revoke references on table "storage"."prefixes" from "service_role";
|
|
|
|
revoke select on table "storage"."prefixes" from "service_role";
|
|
|
|
revoke trigger on table "storage"."prefixes" from "service_role";
|
|
|
|
revoke truncate on table "storage"."prefixes" from "service_role";
|
|
|
|
revoke update on table "storage"."prefixes" from "service_role";
|
|
|
|
alter table "storage"."prefixes" drop constraint "prefixes_bucketId_fkey";
|
|
|
|
drop function if exists "storage"."add_prefixes"(_bucket_id text, _name text);
|
|
|
|
drop function if exists "storage"."delete_prefix"(_bucket_id text, _name text);
|
|
|
|
drop function if exists "storage"."delete_prefix_hierarchy_trigger"();
|
|
|
|
drop function if exists "storage"."get_level"(name text);
|
|
|
|
drop function if exists "storage"."get_prefix"(name text);
|
|
|
|
drop function if exists "storage"."get_prefixes"(name text);
|
|
|
|
drop function if exists "storage"."objects_insert_prefix_trigger"();
|
|
|
|
drop function if exists "storage"."objects_update_prefix_trigger"();
|
|
|
|
drop function if exists "storage"."prefixes_insert_trigger"();
|
|
|
|
drop function if exists "storage"."search_legacy_v1"(prefix text, bucketname text, limits integer, levels integer, offsets integer, search text, sortcolumn text, sortorder text);
|
|
|
|
drop function if exists "storage"."search_v1_optimised"(prefix text, bucketname text, limits integer, levels integer, offsets integer, search text, sortcolumn text, sortorder text);
|
|
|
|
drop function if exists "storage"."search_v2"(prefix text, bucket_name text, limits integer, levels integer, start_after text);
|
|
|
|
alter table "storage"."prefixes" drop constraint "prefixes_pkey";
|
|
|
|
drop index if exists "storage"."idx_name_bucket_level_unique";
|
|
|
|
drop index if exists "storage"."idx_objects_lower_name";
|
|
|
|
drop index if exists "storage"."idx_prefixes_lower_name";
|
|
|
|
drop index if exists "storage"."objects_bucket_id_level_idx";
|
|
|
|
drop index if exists "storage"."prefixes_pkey";
|
|
|
|
drop table "storage"."prefixes";
|
|
|
|
alter table "storage"."objects" drop column "level";
|
|
|
|
set check_function_bodies = off;
|
|
|
|
CREATE OR REPLACE FUNCTION storage.extension(name text)
|
|
RETURNS text
|
|
LANGUAGE plpgsql
|
|
AS $function$
|
|
DECLARE
|
|
_parts text[];
|
|
_filename text;
|
|
BEGIN
|
|
select string_to_array(name, '/') into _parts;
|
|
select _parts[array_length(_parts,1)] into _filename;
|
|
-- @todo return the last part instead of 2
|
|
return reverse(split_part(reverse(_filename), '.', 1));
|
|
END
|
|
$function$
|
|
;
|
|
|
|
CREATE OR REPLACE FUNCTION storage.foldername(name text)
|
|
RETURNS text[]
|
|
LANGUAGE plpgsql
|
|
AS $function$
|
|
DECLARE
|
|
_parts text[];
|
|
BEGIN
|
|
select string_to_array(name, '/') into _parts;
|
|
return _parts[1:array_length(_parts,1)-1];
|
|
END
|
|
$function$
|
|
;
|
|
|
|
CREATE OR REPLACE FUNCTION storage.get_size_by_bucket()
|
|
RETURNS TABLE(size bigint, bucket_id text)
|
|
LANGUAGE plpgsql
|
|
AS $function$
|
|
BEGIN
|
|
return query
|
|
select sum((metadata->>'size')::int) as size, obj.bucket_id
|
|
from "storage".objects as obj
|
|
group by obj.bucket_id;
|
|
END
|
|
$function$
|
|
;
|
|
|
|
CREATE OR REPLACE FUNCTION storage.search(prefix text, bucketname text, limits integer DEFAULT 100, levels integer DEFAULT 1, offsets integer DEFAULT 0, search text DEFAULT ''::text, sortcolumn text DEFAULT 'name'::text, sortorder text DEFAULT 'asc'::text)
|
|
RETURNS TABLE(name text, id uuid, updated_at timestamp with time zone, created_at timestamp with time zone, last_accessed_at timestamp with time zone, metadata jsonb)
|
|
LANGUAGE plpgsql
|
|
STABLE
|
|
AS $function$
|
|
declare
|
|
v_order_by text;
|
|
v_sort_order text;
|
|
begin
|
|
case
|
|
when sortcolumn = 'name' then
|
|
v_order_by = 'name';
|
|
when sortcolumn = 'updated_at' then
|
|
v_order_by = 'updated_at';
|
|
when sortcolumn = 'created_at' then
|
|
v_order_by = 'created_at';
|
|
when sortcolumn = 'last_accessed_at' then
|
|
v_order_by = 'last_accessed_at';
|
|
else
|
|
v_order_by = 'name';
|
|
end case;
|
|
|
|
case
|
|
when sortorder = 'asc' then
|
|
v_sort_order = 'asc';
|
|
when sortorder = 'desc' then
|
|
v_sort_order = 'desc';
|
|
else
|
|
v_sort_order = 'asc';
|
|
end case;
|
|
|
|
v_order_by = v_order_by || ' ' || v_sort_order;
|
|
|
|
return query execute
|
|
'with folders as (
|
|
select path_tokens[$1] as folder
|
|
from storage.objects
|
|
where objects.name ilike $2 || $3 || ''%''
|
|
and bucket_id = $4
|
|
and array_length(objects.path_tokens, 1) <> $1
|
|
group by folder
|
|
order by folder ' || v_sort_order || '
|
|
)
|
|
(select folder as "name",
|
|
null as id,
|
|
null as updated_at,
|
|
null as created_at,
|
|
null as last_accessed_at,
|
|
null as metadata from folders)
|
|
union all
|
|
(select path_tokens[$1] as "name",
|
|
id,
|
|
updated_at,
|
|
created_at,
|
|
last_accessed_at,
|
|
metadata
|
|
from storage.objects
|
|
where objects.name ilike $2 || $3 || ''%''
|
|
and bucket_id = $4
|
|
and array_length(objects.path_tokens, 1) = $1
|
|
order by ' || v_order_by || ')
|
|
limit $5
|
|
offset $6' using levels, prefix, search, bucketname, limits, offsets;
|
|
end;
|
|
$function$
|
|
;
|
|
|
|
create policy "Anyone can update their own avatar."
|
|
on "storage"."objects"
|
|
as permissive
|
|
for update
|
|
to public
|
|
using ((( SELECT auth.uid() AS uid) = owner))
|
|
with check ((bucket_id = 'avatars'::text));
|
|
|
|
|
|
create policy "allow all 1oj01fe_0"
|
|
on "storage"."objects"
|
|
as permissive
|
|
for delete
|
|
to authenticated
|
|
using ((bucket_id = 'avatars'::text));
|
|
|
|
|
|
create policy "allow all 1oj01fe_1"
|
|
on "storage"."objects"
|
|
as permissive
|
|
for update
|
|
to authenticated
|
|
using ((bucket_id = 'avatars'::text));
|
|
|
|
|
|
create policy "allow all 1oj01fe_2"
|
|
on "storage"."objects"
|
|
as permissive
|
|
for insert
|
|
to authenticated
|
|
with check ((bucket_id = 'avatars'::text));
|
|
|
|
|
|
create policy "allow all 1oj01fe_3"
|
|
on "storage"."objects"
|
|
as permissive
|
|
for select
|
|
to authenticated
|
|
using ((bucket_id = 'avatars'::text));
|
|
|
|
|
|
|
|
-- drop type "gis"."geometry_dump";
|
|
|
|
-- drop type "gis"."valid_detail";
|
|
|
|
-- create type "gis"."geometry_dump" as ("path" integer[], "geom" geometry);
|
|
|
|
-- create type "gis"."valid_detail" as ("valid" boolean, "reason" character varying, "location" geometry);
|
|
|
|
|