diff --git a/aleksis/core/rules.py b/aleksis/core/rules.py index 44ba9198c4a6d44f326766452a302b583fde931f..716ee2b617fec36b86778f3bd75e10b6c5892f1e 100644 --- a/aleksis/core/rules.py +++ b/aleksis/core/rules.py @@ -2,7 +2,7 @@ from rules import add_perm, always_allow from aleksis.core.models import Person, Group, Announcement from aleksis.core.util.predicates import ( - has_person_predicate, + has_person, has_global_perm, has_any_object, is_current_person, @@ -13,82 +13,82 @@ from aleksis.core.util.predicates import ( add_perm("core", always_allow) # View dashboard -add_perm("core.view_dashboard", has_person_predicate) +add_perm("core.view_dashboard", has_person) # Use search -search_predicate = has_person_predicate & has_global_perm("core.search") +search_predicate = has_person & has_global_perm("core.search") add_perm("core.search", search_predicate) # View persons -view_persons_predicate = has_person_predicate & ( +view_persons_predicate = has_person & ( has_global_perm("core.view_person") | has_any_object("core.view_person", Person) ) add_perm("core.view_persons", view_persons_predicate) # View person -view_person_predicate = has_person_predicate & ( +view_person_predicate = has_person & ( has_global_perm("core.view_person") | has_object_perm("core.view_person") | is_current_person ) add_perm("core.view_person", view_person_predicate) # View person address -view_address_predicate = has_person_predicate & ( +view_address_predicate = has_person & ( has_global_perm("core.view_address") | has_object_perm("core.view_address") | is_current_person ) add_perm("core.view_address", view_address_predicate) # View person contact details -view_contact_details_predicate = has_person_predicate & ( +view_contact_details_predicate = has_person & ( has_global_perm("core.view_contact_details") | has_object_perm("core.view_contact_details") | is_current_person ) add_perm("core.view_contact_details", view_contact_details_predicate) # View person photo -view_photo_predicate = has_person_predicate & ( +view_photo_predicate = has_person & ( has_global_perm("core.view_photo") | has_object_perm("core.view_photo") | is_current_person ) add_perm("core.view_photo", view_photo_predicate) # View persons groups -view_groups_predicate = has_person_predicate & ( +view_groups_predicate = has_person & ( has_global_perm("core.view_person_groups") | has_object_perm("core.view_person_groups") | is_current_person ) add_perm("core.view_person_groups", view_groups_predicate) # Edit person -edit_person_predicate = has_person_predicate & ( +edit_person_predicate = has_person & ( has_global_perm("core.change_person") | has_object_perm("core.change_person") ) add_perm("core.edit_person", edit_person_predicate) # Link persons with accounts -link_persons_accounts_predicate = has_person_predicate & has_global_perm("core.link_persons_accounts") +link_persons_accounts_predicate = has_person & has_global_perm("core.link_persons_accounts") add_perm("core.link_persons_accounts", link_persons_accounts_predicate) # View groups -view_groups_predicate = has_person_predicate & ( +view_groups_predicate = has_person & ( has_global_perm("core.view_group") | has_any_object("core.view_group", Group) ) add_perm("core.view_groups", view_groups_predicate) # View group -view_group_predicate = has_person_predicate & ( +view_group_predicate = has_person & ( has_global_perm("core.view_group") | has_object_perm("core.view_group") ) add_perm("core.view_group", view_group_predicate) # Edit group -edit_group_predicate = has_person_predicate & ( +edit_group_predicate = has_person & ( has_global_perm("core.change_group") | has_object_perm("core.change_group") ) add_perm("core.edit_group", edit_group_predicate) # Edit school information -edit_school_information_predicate = has_person_predicate & has_global_perm("core.change_school") +edit_school_information_predicate = has_person & has_global_perm("core.change_school") add_perm("core.edit_school_information", edit_school_information_predicate) # Edit school term -edit_schoolterm_predicate = has_person_predicate & has_global_perm("core.change_schoolterm") +edit_schoolterm_predicate = has_person & has_global_perm("core.change_schoolterm") add_perm("core.edit_schoolterm", edit_schoolterm_predicate) # Manage school @@ -96,38 +96,38 @@ manage_school_predicate = edit_school_information_predicate | edit_schoolterm_pr add_perm("core.manage_school", manage_school_predicate) # Manage data -manage_data_predicate = has_person_predicate & has_global_perm("core.manage_data") +manage_data_predicate = has_person & has_global_perm("core.manage_data") add_perm("core.manage_data", manage_data_predicate) # View announcements -view_announcements_predicate = has_person_predicate & ( +view_announcements_predicate = has_person & ( has_global_perm("core.view_announcement") | has_any_object("core.view_announcement", Announcement) ) add_perm("core.view_announcements", view_announcements_predicate) # Create or edit announcement -create_or_edit_announcement_predicate = has_person_predicate & ( +create_or_edit_announcement_predicate = has_person & ( has_global_perm("core.add_announcement") & (has_global_perm("core.change_announcement") | has_object_perm("core.change_announcement")) ) add_perm("core.create_or_edit_announcement", create_or_edit_announcement_predicate) # Delete announcement -delete_announcement_predicate = has_person_predicate & ( +delete_announcement_predicate = has_person & ( has_global_perm("core.delete_announcement") | has_object_perm("core.delete_announcement") ) add_perm("core.delete_announcement", delete_announcement_predicate) # Use impersonate -impersonate_predicate = has_person_predicate & has_global_perm("core.impersonate") +impersonate_predicate = has_person & has_global_perm("core.impersonate") add_perm("core.impersonate", impersonate_predicate) # View system status -view_system_status_predicate = has_person_predicate & has_global_perm("core.view_system_status") +view_system_status_predicate = has_person & has_global_perm("core.view_system_status") add_perm("core.view_system_status", view_system_status_predicate) # View people menu (persons + objects) -add_perm("core.view_people_menu", has_person_predicate & (view_persons_predicate | view_groups_predicate)) +add_perm("core.view_people_menu", has_person & (view_persons_predicate | view_groups_predicate)) # View admin menu -view_admin_menu_predicate = has_person_predicate & (manage_data_predicate | manage_school_predicate | impersonate_predicate | view_system_status_predicate | view_announcements_predicate) +view_admin_menu_predicate = has_person & (manage_data_predicate | manage_school_predicate | impersonate_predicate | view_system_status_predicate | view_announcements_predicate) add_perm("core.view_admin_menu", view_admin_menu_predicate) diff --git a/aleksis/core/util/predicates.py b/aleksis/core/util/predicates.py index f1d06327e57a8d63031dd1aa72ce162ac77151ac..f3ff252a57c54a686a27eb2029cf25a76f2c429a 100644 --- a/aleksis/core/util/predicates.py +++ b/aleksis/core/util/predicates.py @@ -6,7 +6,7 @@ from guardian.backends import ObjectPermissionBackend from guardian.shortcuts import get_objects_for_user from rules import predicate -from aleksis.core.util.core_helpers import has_person +from aleksis.core.util.core_helpers import has_person as has_person_helper # 1. Global permissions (view all, add, change all, delete all) # 2. Object permissions (view, change, delete) @@ -73,10 +73,10 @@ def has_any_object(perm: str, klass): @predicate -def has_person_predicate(user: User) -> bool: +def has_person(user: User) -> bool: """ Predicate which checks whether a user has a linked person """ - return has_person(user) + return has_person_helper(user) @predicate