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) -------------------- 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..d2048e37c 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,21 @@ 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 ) + users = {"root", user} + await create_content_in_container( + groups, + "Group", + "Managers", + creators=(user,), + title="Managers", + name="Managers", + description="Container managers", + user_roles=MANAGER_ROLES, + users=list(users), + ) @classmethod async def uninstall(self, site, request): diff --git a/guillotina/tests/dbusers/test_manage_groups.py b/guillotina/tests/dbusers/test_manage_groups.py index cf4b745ec..731a81725 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" or resp[0]["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) 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)