-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #39 from recogito/develop
Merge to main
- Loading branch information
Showing
21 changed files
with
1,865 additions
and
33 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,103 @@ | ||
CREATE | ||
OR REPLACE FUNCTION lock_project_rpc ( | ||
_project_id uuid | ||
) RETURNS BOOLEAN | ||
AS $body$ | ||
DECLARE | ||
_project_read_only_group_id uuid; | ||
_project_group_ids uuid[]; | ||
_project_admin_ids uuid[]; | ||
_project_group_id uuid; | ||
_row_group_users public.group_users % rowtype; | ||
_read_only_layer_role uuid; | ||
_context_ids uuid[]; | ||
_context_id uuid; | ||
_user_id uuid; | ||
BEGIN | ||
-- Must have Update privs on project | ||
IF NOT (check_action_policy_organization(auth.uid(), 'projects', 'UPDATE') | ||
OR check_action_policy_project(auth.uid(), 'projects', 'UPDATE', _project_id)) | ||
THEN | ||
RETURN FALSE; | ||
END IF; | ||
|
||
-- Select the read only project default group | ||
SELECT pg.id INTO _project_read_only_group_id | ||
FROM public.project_groups pg | ||
WHERE pg.project_id = _project_id | ||
AND pg.is_read_only IS TRUE; | ||
|
||
-- Create an array of project_group ids | ||
_project_group_ids := ARRAY( | ||
SELECT pg.id | ||
FROM public.project_groups pg | ||
WHERE pg.project_id = _project_id | ||
AND pg.is_read_only IS NOT TRUE | ||
); | ||
|
||
-- Create an array of user ids | ||
_project_admin_ids := ARRAY( | ||
SELECT gu.user_id | ||
FROM public.group_users gu | ||
WHERE gu.type_id = ANY(_project_group_ids) | ||
); | ||
|
||
-- For each project group user, set them to read-only | ||
FOREACH _project_group_id IN ARRAY _project_group_ids | ||
LOOP | ||
UPDATE public.group_users | ||
SET type_id = _project_read_only_group_id | ||
WHERE type_id = _project_group_id | ||
AND group_type = 'project'; | ||
END LOOP; | ||
|
||
-- If we do not have a read-only layer default group then fail | ||
IF NOT EXISTS(SELECT 1 FROM public.default_groups dgx WHERE dgx.group_type = 'layer' AND dgx.is_read_only IS TRUE) | ||
THEN | ||
ROLLBACK; | ||
RETURN FALSE; | ||
END IF; | ||
|
||
-- Get the read only role from default groups | ||
SELECT dgx.role_id INTO _read_only_layer_role FROM public.default_groups dgx WHERE dgx.group_type = 'layer' AND dgx.is_read_only IS TRUE; | ||
|
||
-- Get an array of context ids for this project | ||
_context_ids := ARRAY( | ||
SELECT c.id | ||
FROM public.contexts c | ||
WHERE c.project_id = _project_id | ||
); | ||
|
||
-- Set all context users to read-only | ||
FOREACH _context_id IN ARRAY _context_ids | ||
LOOP | ||
UPDATE public.context_users | ||
SET role_id = _read_only_layer_role | ||
WHERE _context_id = _context_id; | ||
END LOOP; | ||
|
||
-- Add the admins to each context as read-only | ||
FOREACH _context_id IN ARRAY _context_ids | ||
LOOP | ||
FOREACH _user_id IN ARRAY _project_admin_ids | ||
LOOP | ||
INSERT INTO public.context_users | ||
(role_id, user_id, context_id) | ||
VALUES (_read_only_layer_role, _user_id, _context_id) | ||
ON CONFLICT(user_id, context_id) | ||
DO NOTHING; | ||
END LOOP; | ||
END LOOP; | ||
|
||
-- Set the admins to the read only project group | ||
|
||
-- Update the project | ||
UPDATE public.projects | ||
SET is_locked = TRUE | ||
WHERE id = _project_id; | ||
|
||
-- Success | ||
RETURN TRUE; | ||
|
||
END | ||
$body$ LANGUAGE plpgsql SECURITY DEFINER; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
DO $$ | ||
DECLARE | ||
_layer_group_id uuid; | ||
_role_id uuid; | ||
_name varchar; | ||
_description varchar; | ||
_is_admin bool; | ||
_is_default bool; | ||
_is_read_only bool; | ||
_layer_id uuid; | ||
_project_id uuid; | ||
BEGIN | ||
-- Get the read-only default group | ||
FOR _role_id, _name, _description, _is_admin, _is_default, _is_read_only | ||
IN SELECT dg.role_id, dg.name, dg.description, dg.is_admin, dg.is_default, dg.is_read_only | ||
FROM public.default_groups dg | ||
WHERE dg.group_type = 'layer' AND dg.is_read_only IS TRUE | ||
LOOP | ||
-- Loop through all layers | ||
FOR _layer_id IN SELECT l.id FROM public.layers l | ||
LOOP | ||
IF NOT EXISTS(SELECT 1 FROM public.layer_groups lg WHERE lg.layer_id = _layer_id AND lg.is_read_only IS TRUE) | ||
THEN | ||
_layer_group_id = extensions.uuid_generate_v4(); | ||
INSERT INTO public.layer_groups | ||
(id, layer_id, role_id, name, description, is_admin, is_default, is_read_only) | ||
VALUES (_layer_group_id, _layer_id, _role_id, _name, _description, _is_admin, _is_default, _is_read_only); | ||
END IF; | ||
END LOOP; | ||
END LOOP; | ||
-- Set the Student role in project groups to read-only | ||
FOR _project_id | ||
IN SELECT p.id | ||
FROM public.projects p | ||
LOOP | ||
-- For each project group set the Student role to read-only | ||
UPDATE public.project_groups pg | ||
SET is_read_only = TRUE | ||
WHERE pg.is_default IS TRUE; | ||
END LOOP; | ||
END | ||
$$ |
Large diffs are not rendered by default.
Oops, something went wrong.
Oops, something went wrong.