feat: public.usr_root, public.grp_admins

This commit is contained in:
Orion Kindel
2023-07-15 18:22:40 -04:00
parent 1bf3d29863
commit c83a4cece6
10 changed files with 34 additions and 27 deletions

View File

@@ -57,6 +57,12 @@ create trigger insert_usr_default_discrim
before insert on public.usr
for each row execute function public.do_insert_usr_default_discrim();
create function public.usr_root()
returns public.usr
stable
language sql
as $$select * from public.usr where tag = public.usr_tag_of_string('root')$$;
insert into public.usr
(tag, password, email)
values

View File

@@ -18,10 +18,7 @@ declare
acting_usr public.usr;
begin
if nullif(current_setting('dnim.usr_uid', true), '') is null then
select u.*
from public.usr u
where u.tag = public.usr_tag_of_string('root')
into acting_usr;
acting_usr := public.usr_root();
else
select u.*
from public.usr u

View File

@@ -10,6 +10,12 @@ create table public.grp
insert into public.grp (tag)
values (grp_tag_of_string('admins'));
create function public.grp_admins()
returns public.grp
stable
language sql
as $$select * from public.grp where tag = public.grp_tag_of_string('admins')$$;
create function public.do_grp_add_admins()
returns trigger
volatile

View File

@@ -44,19 +44,8 @@ $$;
create function public.grp_members_admins()
returns setof public.usr
stable
language plpgsql
as $$
declare
gid int;
begin
select g.id
from public.grp g
where g.tag = public.grp_tag_of_string('admins')
into gid;
return query select * from public.grp_members(gid);
end;
$$;
language sql
as $$select * from public.grp_members((public.grp_admins()).id)$$;
create function public.grp_rm_member(from_grp int, rm_usr int)
returns void

View File

@@ -12,6 +12,12 @@ begin
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;
$$;

View File

@@ -16,8 +16,8 @@ declare
root int;
admins int;
begin
select * from public.usr where tag = usr_tag_of_string('root') into root;
select * from public.grp where tag = grp_tag_of_string('admins') into admins;
root := (public.usr_root()).id;
admins := (public.grp_admins()).id;
insert into public.perm
(path, owner_user, owner_group, owner_user_mode, owner_group_mode, everyone_mode)
@@ -33,7 +33,7 @@ create function do_insert_usr_perm() returns trigger language plpgsql as $$
declare
admins int;
begin
select * from public.grp where tag = grp_tag_of_string('admins') into admins;
admins := public.grp_admins();
insert into public.perm
(path, owner_user, owner_group, owner_user_mode, owner_group_mode, everyone_mode)
@@ -41,6 +41,7 @@ begin
('/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;