From 6abd2fad1902ad46abacb78303d64c855df77000 Mon Sep 17 00:00:00 2001 From: SvyatoslavArtymovych Date: Wed, 24 May 2023 17:26:39 +0300 Subject: [PATCH] create_editor_group --- .vscode/settings.json | 1 + app/controllers/create_access_groups.py | 73 +++++++++++++++++++++ app/controllers/init_access_groups.py | 29 --------- tests/test_create_access_groups.py | 84 +++++++++++++++++++++++++ tests/test_init_access_groups.py | 31 --------- 5 files changed, 158 insertions(+), 60 deletions(-) create mode 100644 app/controllers/create_access_groups.py delete mode 100644 app/controllers/init_access_groups.py create mode 100644 tests/test_create_access_groups.py delete mode 100644 tests/test_init_access_groups.py diff --git a/.vscode/settings.json b/.vscode/settings.json index de04588..3755973 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -14,6 +14,7 @@ "backref", "bookname", "Btns", + "CUDA", "Divs", "flowbite", "jsonify", diff --git a/app/controllers/create_access_groups.py b/app/controllers/create_access_groups.py new file mode 100644 index 0000000..9723f6f --- /dev/null +++ b/app/controllers/create_access_groups.py @@ -0,0 +1,73 @@ +from app import models as m +from app.logger import log +from .get_or_create_permission import get_or_create_permission + + +def create_moderator_group(): + log(log.INFO, "Create moderator access group") + group: m.AccessGroup = m.AccessGroup(name="moderator").save() + permissions = [] + + comment_DA = get_or_create_permission( + access=m.Permission.Access.D | m.Permission.Access.A, + entity_type=m.Permission.Entity.COMMENT, + ) + permissions.append(comment_DA) + + interpretation_DA = get_or_create_permission( + access=m.Permission.Access.D | m.Permission.Access.A, + entity_type=m.Permission.Entity.INTERPRETATION, + ) + permissions.append(interpretation_DA) + + for permission in permissions: + log(log.INFO, "Add permission [%d] to group[%d]", permission.id, group.id) + m.PermissionAccessGroups( + permission_id=permission.id, access_group_id=group.id + ).save() + + return group + + +def create_editor_group(): + log(log.INFO, "Create editor access group") + group: m.AccessGroup = m.AccessGroup(name="editor").save() + permissions = [] + + comment_DA = get_or_create_permission( + access=m.Permission.Access.D | m.Permission.Access.A, + entity_type=m.Permission.Entity.COMMENT, + ) + permissions.append(comment_DA) + + interpretation_DA = get_or_create_permission( + access=m.Permission.Access.D | m.Permission.Access.A, + entity_type=m.Permission.Entity.INTERPRETATION, + ) + permissions.append(interpretation_DA) + + section_CUD = get_or_create_permission( + access=m.Permission.Access.C | m.Permission.Access.U | m.Permission.Access.D, + entity_type=m.Permission.Entity.SECTION, + ) + permissions.append(section_CUD) + + collection_CUD = get_or_create_permission( + access=m.Permission.Access.C | m.Permission.Access.U | m.Permission.Access.D, + entity_type=m.Permission.Entity.COLLECTION, + ) + permissions.append(collection_CUD) + + book_U = get_or_create_permission( + access=m.Permission.Access.U, + entity_type=m.Permission.Entity.BOOK, + ) + permissions.append(book_U) + + for permission in permissions: + log(log.INFO, "Add permission [%d] to group[%d]", permission.id, group.id) + m.PermissionAccessGroups( + permission_id=permission.id, access_group_id=group.id + ).save() + + return group diff --git a/app/controllers/init_access_groups.py b/app/controllers/init_access_groups.py deleted file mode 100644 index 6a03920..0000000 --- a/app/controllers/init_access_groups.py +++ /dev/null @@ -1,29 +0,0 @@ -from app import models as m -from app.logger import log -from .get_or_create_permission import get_or_create_permission - - -def create_moderator_group(): - log(log.INFO, "Create moderator access group") - group: m.AccessGroup = m.AccessGroup(name="moderator").save() - - interpretation_DA = get_or_create_permission( - access=m.Permission.Access.D | m.Permission.Access.A, - entity_type=m.Permission.Entity.INTERPRETATION, - ) - comment_DA = get_or_create_permission( - access=m.Permission.Access.D | m.Permission.Access.A, - entity_type=m.Permission.Entity.COMMENT, - ) - - log(log.INFO, "Add permission [%d] to group[%d]", interpretation_DA.id, group.id) - m.PermissionAccessGroups( - permission_id=interpretation_DA.id, access_group_id=group.id - ).save() - - log(log.INFO, "Add permission [%d] to group[%d]", comment_DA.id, group.id) - m.PermissionAccessGroups( - permission_id=comment_DA.id, access_group_id=group.id - ).save() - - return group diff --git a/tests/test_create_access_groups.py b/tests/test_create_access_groups.py new file mode 100644 index 0000000..5454b5e --- /dev/null +++ b/tests/test_create_access_groups.py @@ -0,0 +1,84 @@ +from app.controllers.create_access_groups import ( + create_moderator_group, + create_editor_group, +) +from app import models as m + + +def test_init_moderator_group(client): + create_moderator_group() + + group: m.AccessGroup = m.AccessGroup.query.filter_by(name="moderator").first() + assert group + assert not group.users + assert group.permissions + + permissions = group.permissions + + access = m.Permission.Access + + interpretation_DA: m.Permission = m.Permission.query.filter_by( + access=access.D | access.A, entity_type=m.Permission.Entity.INTERPRETATION + ).first() + assert interpretation_DA + assert interpretation_DA in permissions + + comment_DA: m.Permission = m.Permission.query.filter_by( + access=access.D | access.A, entity_type=m.Permission.Entity.COMMENT + ).first() + assert comment_DA + assert comment_DA in permissions + + create_moderator_group() + groups: list[m.AccessGroup] = m.AccessGroup.query.filter_by(name="moderator").all() + assert len(groups) == 2 + + +def test_init_editor_group(client): + create_editor_group() + + group: m.AccessGroup = m.AccessGroup.query.filter_by(name="editor").first() + assert group + assert not group.users + assert group.permissions + + permissions = group.permissions + + access = m.Permission.Access + + interpretation_DA: m.Permission = m.Permission.query.filter_by( + access=access.D | access.A, entity_type=m.Permission.Entity.INTERPRETATION + ).first() + assert interpretation_DA + assert interpretation_DA in permissions + + comment_DA: m.Permission = m.Permission.query.filter_by( + access=access.D | access.A, entity_type=m.Permission.Entity.COMMENT + ).first() + assert comment_DA + assert comment_DA in permissions + + section_CUD: m.Permission = m.Permission.query.filter_by( + access=access.C | access.U | access.D, + entity_type=m.Permission.Entity.SECTION, + ).first() + assert section_CUD + assert section_CUD in permissions + + collection_CUD: m.Permission = m.Permission.query.filter_by( + access=access.C | access.U | access.D, + entity_type=m.Permission.Entity.COLLECTION, + ).first() + assert collection_CUD + assert collection_CUD in permissions + + book_U: m.Permission = m.Permission.query.filter_by( + access=access.U, + entity_type=m.Permission.Entity.BOOK, + ).first() + assert book_U + assert book_U in permissions + + create_editor_group() + groups: list[m.AccessGroup] = m.AccessGroup.query.filter_by(name="editor").all() + assert len(groups) == 2 diff --git a/tests/test_init_access_groups.py b/tests/test_init_access_groups.py deleted file mode 100644 index bd166ed..0000000 --- a/tests/test_init_access_groups.py +++ /dev/null @@ -1,31 +0,0 @@ -from app.controllers.init_access_groups import create_moderator_group -from app import models as m - - -def test_init_moderator_group(client): - create_moderator_group() - - group: m.AccessGroup = m.AccessGroup.query.filter_by(name="moderator").first() - assert group - assert not group.users - assert group.permissions - - permissions = group.permissions - - access = m.Permission.Access - - interpretation_DA: m.Permission = m.Permission.query.filter_by( - access=access.D | access.A, entity_type=m.Permission.Entity.INTERPRETATION - ).first() - assert interpretation_DA - assert interpretation_DA in permissions - - comment_DA: m.Permission = m.Permission.query.filter_by( - access=access.D | access.A, entity_type=m.Permission.Entity.COMMENT - ).first() - assert comment_DA - assert comment_DA in permissions - - create_moderator_group() - groups: list[m.AccessGroup] = m.AccessGroup.query.filter_by(name="moderator").all() - assert len(groups) == 2