./migrations/1bf3d29_to_c83a4ce.sql
This commit is contained in:
parent
074f6ae2a6
commit
fd86bf10f1
93
1bf3d29_to_c83a4ce.sql
Normal file
93
1bf3d29_to_c83a4ce.sql
Normal file
@ -0,0 +1,93 @@
|
||||
set check_function_bodies = off;
|
||||
|
||||
CREATE OR REPLACE FUNCTION public.grp_admins()
|
||||
RETURNS grp
|
||||
LANGUAGE sql
|
||||
STABLE
|
||||
AS $function$select * from public.grp where tag = public.grp_tag_of_string('admins')$function$
|
||||
;
|
||||
|
||||
CREATE OR REPLACE FUNCTION public.usr_root()
|
||||
RETURNS usr
|
||||
LANGUAGE sql
|
||||
STABLE
|
||||
AS $function$select * from public.usr where tag = public.usr_tag_of_string('root')$function$
|
||||
;
|
||||
|
||||
CREATE OR REPLACE FUNCTION public.do_insert_usr_perm()
|
||||
RETURNS trigger
|
||||
LANGUAGE plpgsql
|
||||
AS $function$
|
||||
declare
|
||||
admins int;
|
||||
begin
|
||||
admins := public.grp_admins();
|
||||
|
||||
insert into public.perm
|
||||
(path, owner_user, owner_group, owner_user_mode, owner_group_mode, everyone_mode)
|
||||
values
|
||||
('/users/' || NEW.id || '/tag', NEW.id, admins, 'w', 'w', 'r')
|
||||
, ('/users/' || NEW.id || '/email', NEW.id, admins, 'w', 'w', '-')
|
||||
, ('/users/' || NEW.id || '/deleted', NEW.id, admins, 'w', 'w', '-')
|
||||
, ('/users/' || NEW.id || '/password', NEW.id, admins, 'w', 'w', '-')
|
||||
;
|
||||
|
||||
return new;
|
||||
end;
|
||||
$function$
|
||||
;
|
||||
|
||||
CREATE OR REPLACE FUNCTION public.do_usr_create_default_grp()
|
||||
RETURNS trigger
|
||||
LANGUAGE plpgsql
|
||||
AS $function$
|
||||
declare
|
||||
new_grp int;
|
||||
begin
|
||||
insert into public.grp (tag)
|
||||
values (grp_tag_of_string('usr_' || new.uid))
|
||||
returning id into new_grp;
|
||||
|
||||
perform public.grp_add_member(to_grp => new_grp, add_usr => new.id);
|
||||
|
||||
update public.perm
|
||||
set owner_user = public.usr_root()
|
||||
, owner_group = public.grp_admins()
|
||||
where path = '/groups/' || new_grp || '/members'
|
||||
or path = '/groups/' || new_grp || '/tag';
|
||||
|
||||
return null;
|
||||
end;
|
||||
$function$
|
||||
;
|
||||
|
||||
CREATE OR REPLACE FUNCTION public.get_acting_usr()
|
||||
RETURNS usr
|
||||
LANGUAGE plpgsql
|
||||
AS $function$
|
||||
declare
|
||||
uid text;
|
||||
acting_usr public.usr;
|
||||
begin
|
||||
if nullif(current_setting('dnim.usr_uid', true), '') is null then
|
||||
acting_usr := public.usr_root();
|
||||
else
|
||||
select u.*
|
||||
from public.usr u
|
||||
where u.uid = current_setting('dnim.usr_uid', true) :: uuid
|
||||
into acting_usr;
|
||||
end if;
|
||||
|
||||
return acting_usr;
|
||||
end;
|
||||
$function$
|
||||
;
|
||||
|
||||
CREATE OR REPLACE FUNCTION public.grp_members_admins()
|
||||
RETURNS SETOF usr
|
||||
LANGUAGE sql
|
||||
STABLE
|
||||
AS $function$select * from public.grp_members((public.grp_admins()).id)$function$
|
||||
;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user