From ce438dad9f5c2fa42e83d843b3fc12214f7b31ea Mon Sep 17 00:00:00 2001 From: Ferran Llamas Date: Sun, 26 Apr 2020 19:11:10 +0200 Subject: [PATCH 1/6] install managers group by default --- guillotina/auth/groups.py | 16 +++++++++++----- guillotina/contrib/dbusers/install.py | 13 ++++++++++++- guillotina/tests/dbusers/test_setup.py | 6 ++++++ 3 files changed, 29 insertions(+), 6 deletions(-) diff --git a/guillotina/auth/groups.py b/guillotina/auth/groups.py index f07edb9ee..4fe61923b 100644 --- a/guillotina/auth/groups.py +++ b/guillotina/auth/groups.py @@ -6,6 +6,15 @@ import typing +MANAGER_ROLES = [ + "guillotina.ContainerAdmin", + "guillotina.ContainerDeleter", + "guillotina.Owner", + "guillotina.Member", + "guillotina.Manager", +] + + class GuillotinaGroup(GuillotinaUser): def __init__(self, ident): super(GuillotinaGroup, self).__init__(ident) @@ -13,11 +22,8 @@ def __init__(self, ident): if ident == "Managers": # Special Case its a Root Manager user - self._roles["guillotina.ContainerAdmin"] = 1 - self._roles["guillotina.ContainerDeleter"] = 1 - self._roles["guillotina.Owner"] = 1 - self._roles["guillotina.Member"] = 1 - self._roles["guillotina.Manager"] = 1 + for role in MANAGER_ROLES: + self._roles[role] = 1 @configure.utility(provides=IGroups) diff --git a/guillotina/contrib/dbusers/install.py b/guillotina/contrib/dbusers/install.py index 8bcc90837..77bffeaa0 100644 --- a/guillotina/contrib/dbusers/install.py +++ b/guillotina/contrib/dbusers/install.py @@ -1,5 +1,6 @@ from guillotina import configure from guillotina.addons import Addon +from guillotina.auth.groups import MANAGER_ROLES from guillotina.content import create_content_in_container from guillotina.interfaces import ILayers from guillotina.utils import get_authenticated_user_id @@ -19,9 +20,19 @@ async def install(self, site, request): await create_content_in_container( site, "UserManager", "users", creators=(user,), title="Users", check_constraints=False ) - await create_content_in_container( + groups = await create_content_in_container( site, "GroupManager", "groups", creators=(user,), title="Groups", check_constraints=False ) + await create_content_in_container( + groups, + "Group", + "Managers", + creators=(user,), + title="Managers", + description="Container managers", + user_roles=MANAGER_ROLES, + users=[user], + ) @classmethod async def uninstall(self, site, request): diff --git a/guillotina/tests/dbusers/test_setup.py b/guillotina/tests/dbusers/test_setup.py index 39d13804c..55eb67d99 100644 --- a/guillotina/tests/dbusers/test_setup.py +++ b/guillotina/tests/dbusers/test_setup.py @@ -1,4 +1,5 @@ from . import settings +from guillotina.auth.groups import MANAGER_ROLES from guillotina.tests.utils import get_container import pytest @@ -15,3 +16,8 @@ async def test_users_and_groups_folders_are_created_on_install(dbusers_requester assert users.type_name == "UserManager" groups = await container.async_get("groups") assert groups.type_name == "GroupManager" + managers = await groups.async_get("Managers") + assert managers.type_name == "Group" + assert managers.title == "Managers" + assert managers.users == ["root"] + assert set(managers.user_roles) == set(MANAGER_ROLES) From 8a9345ca0165a3aba1c7e358ce1742aec34d98c8 Mon Sep 17 00:00:00 2001 From: Ferran Llamas Date: Sun, 26 Apr 2020 19:17:01 +0200 Subject: [PATCH 2/6] install managers group by default --- guillotina/contrib/dbusers/install.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/guillotina/contrib/dbusers/install.py b/guillotina/contrib/dbusers/install.py index 77bffeaa0..3e90d2f86 100644 --- a/guillotina/contrib/dbusers/install.py +++ b/guillotina/contrib/dbusers/install.py @@ -23,6 +23,7 @@ async def install(self, site, request): groups = await create_content_in_container( site, "GroupManager", "groups", creators=(user,), title="Groups", check_constraints=False ) + users = set({"root", user}) await create_content_in_container( groups, "Group", @@ -31,7 +32,7 @@ async def install(self, site, request): title="Managers", description="Container managers", user_roles=MANAGER_ROLES, - users=[user], + users=list(users), ) @classmethod From ee947ae3b55450864ed2b49adc9d084323cb7b6f Mon Sep 17 00:00:00 2001 From: Ferran Llamas Date: Sun, 26 Apr 2020 19:23:59 +0200 Subject: [PATCH 3/6] changelog --- CHANGELOG.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 8ad5d3d42..0cdc8e3f4 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -8,6 +8,7 @@ CHANGELOG - Move from travis to github actions [lferran] +- Install managers group by default [lferran] 6.0.0b3 (2020-04-24) -------------------- From ee231134bf69d486ca5cf6102c6a4402b569d5aa Mon Sep 17 00:00:00 2001 From: Ferran Llamas Date: Sun, 26 Apr 2020 19:25:09 +0200 Subject: [PATCH 4/6] casting not needed --- guillotina/contrib/dbusers/install.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guillotina/contrib/dbusers/install.py b/guillotina/contrib/dbusers/install.py index 3e90d2f86..ba04af1d3 100644 --- a/guillotina/contrib/dbusers/install.py +++ b/guillotina/contrib/dbusers/install.py @@ -23,7 +23,7 @@ async def install(self, site, request): groups = await create_content_in_container( site, "GroupManager", "groups", creators=(user,), title="Groups", check_constraints=False ) - users = set({"root", user}) + users = {"root", user} await create_content_in_container( groups, "Group", From 087b42fce521b77d677790fac49ea6a89d476563 Mon Sep 17 00:00:00 2001 From: Ferran Llamas Date: Mon, 4 May 2020 15:49:33 +0200 Subject: [PATCH 5/6] more --- .../tests/dbusers/test_manage_groups.py | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/guillotina/tests/dbusers/test_manage_groups.py b/guillotina/tests/dbusers/test_manage_groups.py index cf4b745ec..d8d4a9e0d 100644 --- a/guillotina/tests/dbusers/test_manage_groups.py +++ b/guillotina/tests/dbusers/test_manage_groups.py @@ -24,8 +24,8 @@ async def test_ensure_crud_groups(dbusers_requester, user_data): assert status_code == 201 resp, status_code = await requester("GET", "/db/guillotina/@groups") assert status_code == 200 - assert len(resp) == 1 - assert resp[0]["groupname"] == "foo" + assert len(resp) == 2 + assert resp[1]["groupname"] == "foo" data = {"roles": {"guillotina.Manager": True, "guillotina.Tester": True, "guillotina.Bad": False}} @@ -78,23 +78,24 @@ async def test_ensure_crud_groups(dbusers_requester, user_data): @pytest.mark.skipif(NOT_POSTGRES, reason="Only PG") async def test_list_groups_works_with_catalog(dbusers_requester, user_data): async with dbusers_requester as requester: - # Check initially there is no users + # Check initially there just one group resp, status_code = await requester("GET", "/db/guillotina/@groups") assert status_code == 200 - assert len(resp) == 0 + assert len(resp) == 1 - # Add a user + # Add a group resp, status_code = await requester("POST", "/db/guillotina/groups", data=json.dumps(_group)) assert status_code == 201 # Check it gets listed resp, status_code = await requester("GET", "/db/guillotina/@groups") assert status_code == 200 - assert len(resp) == 1 - assert resp[0]["@name"] - assert resp[0]["title"] - assert isinstance(resp[0]["roles"], list) - assert isinstance(resp[0]["users"], list) + assert len(resp) == 2 + for group in resp: + assert group["@name"] + assert group["title"] + assert isinstance(group["roles"], list) + assert isinstance(group["users"], list) @pytest.mark.app_settings(settings.DEFAULT_SETTINGS) From 96e8a5ae23d22248b6ff406937cc508316b5081b Mon Sep 17 00:00:00 2001 From: Ferran Llamas Date: Mon, 4 May 2020 17:19:27 +0200 Subject: [PATCH 6/6] fix tests --- guillotina/contrib/dbusers/install.py | 1 + guillotina/tests/dbusers/test_manage_groups.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/guillotina/contrib/dbusers/install.py b/guillotina/contrib/dbusers/install.py index ba04af1d3..d2048e37c 100644 --- a/guillotina/contrib/dbusers/install.py +++ b/guillotina/contrib/dbusers/install.py @@ -30,6 +30,7 @@ async def install(self, site, request): "Managers", creators=(user,), title="Managers", + name="Managers", description="Container managers", user_roles=MANAGER_ROLES, users=list(users), diff --git a/guillotina/tests/dbusers/test_manage_groups.py b/guillotina/tests/dbusers/test_manage_groups.py index d8d4a9e0d..731a81725 100644 --- a/guillotina/tests/dbusers/test_manage_groups.py +++ b/guillotina/tests/dbusers/test_manage_groups.py @@ -25,7 +25,7 @@ async def test_ensure_crud_groups(dbusers_requester, user_data): resp, status_code = await requester("GET", "/db/guillotina/@groups") assert status_code == 200 assert len(resp) == 2 - assert resp[1]["groupname"] == "foo" + assert resp[1]["groupname"] == "foo" or resp[0]["groupname"] == "foo" data = {"roles": {"guillotina.Manager": True, "guillotina.Tester": True, "guillotina.Bad": False}}