diff --git a/aleksis/core/menus.py b/aleksis/core/menus.py index bc68f034dfe665ea7e0447925075aec5bcc887cb..d518b15e3f8693446dd7a9367e5f86b4083f0af9 100644 --- a/aleksis/core/menus.py +++ b/aleksis/core/menus.py @@ -98,7 +98,7 @@ MENUS = { "validators": [ ( "aleksis.core.util.predicates.permission_validator", - "core.view_announcements", + "core.view_announcements_rule", ), ], }, @@ -109,7 +109,7 @@ MENUS = { "validators": [ ( "aleksis.core.util.predicates.permission_validator", - "core.view_schoolterm", + "core.view_schoolterm_rule", ), ], }, @@ -120,7 +120,7 @@ MENUS = { "validators": [ ( "aleksis.core.util.predicates.permission_validator", - "core.view_dashboardwidget", + "core.view_dashboardwidget_rule", ), ], }, @@ -129,7 +129,10 @@ MENUS = { "url": "data_management", "icon": "view_list", "validators": [ - ("aleksis.core.util.predicates.permission_validator", "core.manage_data"), + ( + "aleksis.core.util.predicates.permission_validator", + "core.manage_data_rule", + ), ], }, { @@ -139,7 +142,7 @@ MENUS = { "validators": [ ( "aleksis.core.util.predicates.permission_validator", - "core.view_system_status", + "core.view_system_status_rule", ), ], }, @@ -148,7 +151,10 @@ MENUS = { "url": "impersonate-list", "icon": "people", "validators": [ - ("aleksis.core.util.predicates.permission_validator", "core.impersonate"), + ( + "aleksis.core.util.predicates.permission_validator", + "core.impersonate_rule", + ), ], }, { @@ -158,7 +164,7 @@ MENUS = { "validators": [ ( "aleksis.core.util.predicates.permission_validator", - "core.change_site_preferences", + "core.change_site_preferences_rule", ), ], }, @@ -181,7 +187,7 @@ MENUS = { "validators": [ ( "aleksis.core.util.predicates.permission_validator", - "core.list_oauth_applications", + "core.list_oauth_applications_rule", ), ], }, @@ -193,7 +199,7 @@ MENUS = { "icon": "people", "root": True, "validators": [ - ("aleksis.core.util.predicates.permission_validator", "core.view_people_menu") + ("aleksis.core.util.predicates.permission_validator", "core.view_people_menu_rule") ], "submenu": [ { @@ -201,7 +207,10 @@ MENUS = { "url": "persons", "icon": "person", "validators": [ - ("aleksis.core.util.predicates.permission_validator", "core.view_persons") + ( + "aleksis.core.util.predicates.permission_validator", + "core.view_persons_rule", + ) ], }, { @@ -209,7 +218,10 @@ MENUS = { "url": "groups", "icon": "group", "validators": [ - ("aleksis.core.util.predicates.permission_validator", "core.view_groups") + ( + "aleksis.core.util.predicates.permission_validator", + "core.view_groups_rule", + ) ], }, { @@ -219,7 +231,7 @@ MENUS = { "validators": [ ( "aleksis.core.util.predicates.permission_validator", - "core.view_grouptypes", + "core.view_grouptypes_rule", ) ], }, @@ -230,7 +242,7 @@ MENUS = { "validators": [ ( "aleksis.core.util.predicates.permission_validator", - "core.link_persons_accounts", + "core.link_persons_accounts_rule", ) ], }, @@ -241,7 +253,7 @@ MENUS = { "validators": [ ( "aleksis.core.util.predicates.permission_validator", - "core.assign_child_groups_to_groups", + "core.assign_child_groups_to_groups_rule", ) ], }, @@ -252,7 +264,7 @@ MENUS = { "validators": [ ( "aleksis.core.util.predicates.permission_validator", - "core.view_additionalfields", + "core.view_additionalfields_rule", ) ], }, @@ -266,7 +278,7 @@ MENUS = { "validators": [ ( "aleksis.core.util.predicates.permission_validator", - "core.assign_child_groups_to_groups", + "core.assign_child_groups_to_groups_rule", ) ], }, diff --git a/aleksis/core/rules.py b/aleksis/core/rules.py index 9c05d1cabdb2b627826516742922c76e0ec13fce..d6b823064b72a0262c85a001f71a1941e42ec705 100644 --- a/aleksis/core/rules.py +++ b/aleksis/core/rules.py @@ -17,32 +17,32 @@ rules.add_perm("core", rules.always_allow) # View dashboard view_dashboard_predicate = is_site_preference_set("general", "anonymous_dashboard") | has_person -rules.add_perm("core.view_dashboard", view_dashboard_predicate) +rules.add_perm("core.view_dashboard_rule", view_dashboard_predicate) # View notifications -rules.add_perm("core.view_notifications", has_person) +rules.add_perm("core.view_notifications_rule", has_person) # Use search search_predicate = has_person & has_global_perm("core.search") -rules.add_perm("core.search", search_predicate) +rules.add_perm("core.search_rule", search_predicate) # View persons view_persons_predicate = has_person & ( - has_global_perm("core.view_person") | has_any_object("core.view_person", Person) + has_global_perm("core.view_person") | has_any_object("core.view_person_rule", Person) ) -rules.add_perm("core.view_persons", view_persons_predicate) +rules.add_perm("core.view_persons_rule", view_persons_predicate) # View person view_person_predicate = has_person & ( has_global_perm("core.view_person") | has_object_perm("core.view_person") | is_current_person ) -rules.add_perm("core.view_person", view_person_predicate) +rules.add_perm("core.view_person_rule", view_person_predicate) # View person address view_address_predicate = has_person & ( has_global_perm("core.view_address") | has_object_perm("core.view_address") | is_current_person ) -rules.add_perm("core.view_address", view_address_predicate) +rules.add_perm("core.view_address_rule", view_address_predicate) # View person contact details view_contact_details_predicate = has_person & ( @@ -50,13 +50,13 @@ view_contact_details_predicate = has_person & ( | has_object_perm("core.view_contact_details") | is_current_person ) -rules.add_perm("core.view_contact_details", view_contact_details_predicate) +rules.add_perm("core.view_contact_details_rule", view_contact_details_predicate) # View person photo view_photo_predicate = has_person & ( has_global_perm("core.view_photo") | has_object_perm("core.view_photo") | is_current_person ) -rules.add_perm("core.view_photo", view_photo_predicate) +rules.add_perm("core.view_photo_rule", view_photo_predicate) # View persons groups view_groups_predicate = has_person & ( @@ -64,7 +64,7 @@ view_groups_predicate = has_person & ( | has_object_perm("core.view_person_groups") | is_current_person ) -rules.add_perm("core.view_person_groups", view_groups_predicate) +rules.add_perm("core.view_person_groups_rule", view_groups_predicate) # Edit person edit_person_predicate = has_person & ( @@ -72,91 +72,91 @@ edit_person_predicate = has_person & ( | has_object_perm("core.change_person") | is_current_person & is_site_preference_set("account", "editable_fields_person") ) -rules.add_perm("core.edit_person", edit_person_predicate) +rules.add_perm("core.edit_person_rule", edit_person_predicate) # Delete person delete_person_predicate = has_person & ( has_global_perm("core.delete_person") | has_object_perm("core.delete_person") ) -rules.add_perm("core.delete_person", delete_person_predicate) +rules.add_perm("core.delete_person_rule", delete_person_predicate) # Link persons with accounts link_persons_accounts_predicate = has_person & has_global_perm("core.link_persons_accounts") -rules.add_perm("core.link_persons_accounts", link_persons_accounts_predicate) +rules.add_perm("core.link_persons_accounts_rule", link_persons_accounts_predicate) # View groups view_groups_predicate = has_person & ( has_global_perm("core.view_group") | has_any_object("core.view_group", Group) ) -rules.add_perm("core.view_groups", view_groups_predicate) +rules.add_perm("core.view_groups_rule", view_groups_predicate) # View group view_group_predicate = has_person & ( has_global_perm("core.view_group") | has_object_perm("core.view_group") ) -rules.add_perm("core.view_group", view_group_predicate) +rules.add_perm("core.view_group_rule", view_group_predicate) # Edit group edit_group_predicate = has_person & ( has_global_perm("core.change_group") | has_object_perm("core.change_group") ) -rules.add_perm("core.edit_group", edit_group_predicate) +rules.add_perm("core.edit_group_rule", edit_group_predicate) # Delete group delete_group_predicate = has_person & ( has_global_perm("core.delete_group") | has_object_perm("core.delete_group") ) -rules.add_perm("core.delete_group", delete_group_predicate) +rules.add_perm("core.delete_group_rule", delete_group_predicate) # Assign child groups to groups assign_child_groups_to_groups_predicate = has_person & has_global_perm( "core.assign_child_groups_to_groups" ) -rules.add_perm("core.assign_child_groups_to_groups", assign_child_groups_to_groups_predicate) +rules.add_perm("core.assign_child_groups_to_groups_rule", assign_child_groups_to_groups_predicate) # Edit school information edit_school_information_predicate = has_person & has_global_perm("core.change_school") -rules.add_perm("core.edit_school_information", edit_school_information_predicate) +rules.add_perm("core.edit_school_information_rule", edit_school_information_predicate) # Manage data manage_data_predicate = has_person & has_global_perm("core.manage_data") -rules.add_perm("core.manage_data", manage_data_predicate) +rules.add_perm("core.manage_data_rule", manage_data_predicate) # Mark notification as read mark_notification_as_read_predicate = has_person & is_notification_recipient -rules.add_perm("core.mark_notification_as_read", mark_notification_as_read_predicate) +rules.add_perm("core.mark_notification_as_read_rule", mark_notification_as_read_predicate) # View announcements view_announcements_predicate = has_person & ( has_global_perm("core.view_announcement") | has_any_object("core.view_announcement", Announcement) ) -rules.add_perm("core.view_announcements", view_announcements_predicate) +rules.add_perm("core.view_announcements_rule", view_announcements_predicate) # Create or edit announcement 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")) ) -rules.add_perm("core.create_or_edit_announcement", create_or_edit_announcement_predicate) +rules.add_perm("core.create_or_edit_announcement_rule", create_or_edit_announcement_predicate) # Delete announcement delete_announcement_predicate = has_person & ( has_global_perm("core.delete_announcement") | has_object_perm("core.delete_announcement") ) -rules.add_perm("core.delete_announcement", delete_announcement_predicate) +rules.add_perm("core.delete_announcement_rule", delete_announcement_predicate) # Use impersonate impersonate_predicate = has_person & has_global_perm("core.impersonate") -rules.add_perm("core.impersonate", impersonate_predicate) +rules.add_perm("core.impersonate_rule", impersonate_predicate) # View system status view_system_status_predicate = has_person & has_global_perm("core.view_system_status") -rules.add_perm("core.view_system_status", view_system_status_predicate) +rules.add_perm("core.view_system_status_rule", view_system_status_predicate) # View people menu (persons + objects) rules.add_perm( - "core.view_people_menu", + "core.view_people_menu_rule", has_person & ( view_persons_predicate @@ -172,14 +172,14 @@ view_personal_details_predicate = has_person & ( | has_object_perm("core.view_personal_details") | is_current_person ) -rules.add_perm("core.view_personal_details", view_personal_details_predicate) +rules.add_perm("core.view_personal_details_rule", view_personal_details_predicate) # Change site preferences change_site_preferences = has_person & ( has_global_perm("core.change_site_preferences") | has_object_perm("core.change_site_preferences") ) -rules.add_perm("core.change_site_preferences", change_site_preferences) +rules.add_perm("core.change_site_preferences_rule", change_site_preferences) # Change person preferences change_person_preferences = has_person & ( @@ -187,7 +187,7 @@ change_person_preferences = has_person & ( | has_object_perm("core.change_person_preferences") | is_current_person ) -rules.add_perm("core.change_person_preferences", change_person_preferences) +rules.add_perm("core.change_person_preferences_rule", change_person_preferences) # Change group preferences change_group_preferences = has_person & ( @@ -195,81 +195,81 @@ change_group_preferences = has_person & ( | has_object_perm("core.change_group_preferences") | is_group_owner ) -rules.add_perm("core.change_group_preferences", change_group_preferences) +rules.add_perm("core.change_group_preferences_rule", change_group_preferences) # Edit additional field change_additional_field_predicate = has_person & ( has_global_perm("core.change_additionalfield") | has_object_perm("core.change_additionalfield") ) -rules.add_perm("core.change_additionalfield", change_additional_field_predicate) +rules.add_perm("core.change_additionalfield_rule", change_additional_field_predicate) # Edit additional field create_additional_field_predicate = has_person & ( has_global_perm("core.create_additionalfield") | has_object_perm("core.create_additionalfield") ) -rules.add_perm("core.create_additionalfield", create_additional_field_predicate) +rules.add_perm("core.create_additionalfield_rule", create_additional_field_predicate) # Delete additional field delete_additional_field_predicate = has_person & ( has_global_perm("core.delete_additionalfield") | has_object_perm("core.delete_additionalfield") ) -rules.add_perm("core.delete_additionalfield", delete_additional_field_predicate) +rules.add_perm("core.delete_additionalfield_rule", delete_additional_field_predicate) # View additional fields view_additional_fields_predicate = has_person & ( has_global_perm("core.view_additionalfield") | has_any_object("core.view_additionalfield", AdditionalField) ) -rules.add_perm("core.view_additionalfields", view_additional_fields_predicate) +rules.add_perm("core.view_additionalfields_rule", view_additional_fields_predicate) # Edit group type change_group_type_predicate = has_person & ( has_global_perm("core.change_grouptype") | has_object_perm("core.change_grouptype") ) -rules.add_perm("core.edit_grouptype", change_group_type_predicate) +rules.add_perm("core.edit_grouptype_rule", change_group_type_predicate) # Create group type create_group_type_predicate = has_person & ( has_global_perm("core.create_grouptype") | has_object_perm("core.change_grouptype") ) -rules.add_perm("core.create_grouptype", create_group_type_predicate) +rules.add_perm("core.create_grouptype_rule", create_group_type_predicate) # Delete group type delete_group_type_predicate = has_person & ( has_global_perm("core.delete_grouptype") | has_object_perm("core.delete_grouptype") ) -rules.add_perm("core.delete_grouptype", delete_group_type_predicate) +rules.add_perm("core.delete_grouptype_rule", delete_group_type_predicate) # View group types view_group_types_predicate = has_person & ( has_global_perm("core.view_grouptype") | has_any_object("core.view_grouptype", GroupType) ) -rules.add_perm("core.view_grouptypes", view_group_types_predicate) +rules.add_perm("core.view_grouptypes_rule", view_group_types_predicate) # Create person create_person_predicate = has_person & ( has_global_perm("core.create_person") | has_object_perm("core.create_person") ) -rules.add_perm("core.create_person", create_person_predicate) +rules.add_perm("core.create_person_rule", create_person_predicate) # Create group create_group_predicate = has_person & ( has_global_perm("core.create_group") | has_object_perm("core.create_group") ) -rules.add_perm("core.create_group", create_group_predicate) +rules.add_perm("core.create_group_rule", create_group_predicate) # School years view_school_term_predicate = has_person & has_global_perm("core.view_schoolterm") -rules.add_perm("core.view_schoolterm", view_school_term_predicate) +rules.add_perm("core.view_schoolterm_rule", view_school_term_predicate) create_school_term_predicate = has_person & has_global_perm("core.add_schoolterm") -rules.add_perm("core.create_schoolterm", create_school_term_predicate) +rules.add_perm("core.create_schoolterm_rule", create_school_term_predicate) edit_school_term_predicate = has_person & has_global_perm("core.change_schoolterm") -rules.add_perm("core.edit_schoolterm", edit_school_term_predicate) +rules.add_perm("core.edit_schoolterm_rule", edit_school_term_predicate) # View admin menu view_admin_menu_predicate = has_person & ( @@ -279,70 +279,70 @@ view_admin_menu_predicate = has_person & ( | view_system_status_predicate | view_announcements_predicate ) -rules.add_perm("core.view_admin_menu", view_admin_menu_predicate) +rules.add_perm("core.view_admin_menu_rule", view_admin_menu_predicate) # View group stats view_group_stats_predicate = has_person & ( has_global_perm("core.view_group_stats") | has_object_perm("core.view_group_stats") ) -rules.add_perm("core.view_group_stats", view_group_stats_predicate) +rules.add_perm("core.view_group_stats_rule", view_group_stats_predicate) # View data check results view_data_check_results_predicate = has_person & has_global_perm("core.view_datacheckresult") -rules.add_perm("core.view_datacheckresults", view_data_check_results_predicate) +rules.add_perm("core.view_datacheckresults_rule", view_data_check_results_predicate) # Run data checks run_data_checks_predicate = ( has_person & view_data_check_results_predicate & has_global_perm("core.run_data_checks") ) -rules.add_perm("core.run_data_checks", run_data_checks_predicate) +rules.add_perm("core.run_data_checks_rule", run_data_checks_predicate) # Solve data problems solve_data_problem_predicate = ( has_person & view_data_check_results_predicate & has_global_perm("core.solve_data_problem") ) -rules.add_perm("core.solve_data_problem", solve_data_problem_predicate) +rules.add_perm("core.solve_data_problem_rule", solve_data_problem_predicate) view_dashboard_widget_predicate = has_person & has_global_perm("core.view_dashboardwidget") -rules.add_perm("core.view_dashboardwidget", view_dashboard_widget_predicate) +rules.add_perm("core.view_dashboardwidget_rule", view_dashboard_widget_predicate) create_dashboard_widget_predicate = has_person & has_global_perm("core.add_dashboardwidget") -rules.add_perm("core.create_dashboardwidget", create_dashboard_widget_predicate) +rules.add_perm("core.create_dashboardwidget_rule", create_dashboard_widget_predicate) edit_dashboard_widget_predicate = has_person & has_global_perm("core.change_dashboardwidget") -rules.add_perm("core.edit_dashboardwidget", edit_dashboard_widget_predicate) +rules.add_perm("core.edit_dashboardwidget_rule", edit_dashboard_widget_predicate) delete_dashboard_widget_predicate = has_person & has_global_perm("core.delete_dashboardwidget") -rules.add_perm("core.delete_dashboardwidget", delete_dashboard_widget_predicate) +rules.add_perm("core.delete_dashboardwidget_rule", delete_dashboard_widget_predicate) edit_dashboard_predicate = is_site_preference_set("general", "dashboard_editing") & has_person -rules.add_perm("core.edit_dashboard", edit_dashboard_predicate) +rules.add_perm("core.edit_dashboard_rule", edit_dashboard_predicate) edit_default_dashboard_predicate = has_person & has_global_perm("core.edit_default_dashboard") -rules.add_perm("core.edit_default_dashboard", edit_default_dashboard_predicate) +rules.add_perm("core.edit_default_dashboard_rule", edit_default_dashboard_predicate) # OAuth2 permissions add_oauth_applications_predicate = has_person & has_global_perm("core.add_oauth_applications") -rules.add_perm("core.add_oauth_applications", add_oauth_applications_predicate) +rules.add_perm("core.add_oauth_applications_rule", add_oauth_applications_predicate) list_oauth_applications_predicate = has_person & has_global_perm("core.list_oauth_applications") -rules.add_perm("core.list_oauth_applications", list_oauth_applications_predicate) +rules.add_perm("core.list_oauth_applications_rule", list_oauth_applications_predicate) view_oauth_applications_predicate = has_person & has_global_perm("core.view_oauth_applications") -rules.add_perm("core.view_oauth_applications", view_oauth_applications_predicate) +rules.add_perm("core.view_oauth_applications_rule", view_oauth_applications_predicate) update_oauth_applications_predicate = has_person & has_global_perm("core.update_oauth_applications") -rules.add_perm("core.update_oauth_applications", update_oauth_applications_predicate) +rules.add_perm("core.update_oauth_applications_rule", update_oauth_applications_predicate) delete_oauth_applications_predicate = has_person & has_global_perm("core.delete_oauth_applications") -rules.add_perm("core.delete_oauth_applications", delete_oauth_applications_predicate) +rules.add_perm("core.delete_oauth_applications_rule", delete_oauth_applications_predicate) # Upload and browse files via CKEditor upload_files_ckeditor_predicate = has_person & has_global_perm("core.upload_files_ckeditor") -rules.add_perm("core.upload_files_ckeditor", upload_files_ckeditor_predicate) +rules.add_perm("core.upload_files_ckeditor_rule", upload_files_ckeditor_predicate) test_pdf_generation_predicate = has_person & has_global_perm("core.test_pdf") -rules.add_perm("core.test_pdf", test_pdf_generation_predicate) +rules.add_perm("core.test_pdf_rule", test_pdf_generation_predicate) # Generate rules for syncable fields for field in Person._meta.fields: @@ -354,4 +354,4 @@ for field in Person._meta.fields: & contains_site_preference_value("account", "editable_fields_person", field.name) ) ) - rules.add_perm(f"core.change_person_field_{field.name}", perm) + rules.add_perm(f"core.change_person_field_{field.name}_rule", perm) diff --git a/aleksis/core/views.py b/aleksis/core/views.py index eb8ae3eba6cd60f4f71e6bce629cf49ce58d196b..38f336843d590f8875a52d03416dec89a9152583 100644 --- a/aleksis/core/views.py +++ b/aleksis/core/views.py @@ -100,7 +100,7 @@ class RenderPDFView(TemplateView): return render_pdf(request, self.template_name, context) -@permission_required("core.view_dashboard") +@permission_required("core.view_dashboard_rule") def index(request: HttpRequest) -> HttpResponse: """View for dashboard.""" context = {} @@ -137,7 +137,7 @@ def index(request: HttpRequest) -> HttpResponse: class NotificationsListView(PermissionRequiredMixin, ListView): - permission_required = "core.view_notifications" + permission_required = "core.view_notifications_rule" template_name = "core/notifications.html" def get_queryset(self) -> QuerySet: @@ -164,7 +164,7 @@ class SchoolTermListView(PermissionRequiredMixin, SingleTableView): model = SchoolTerm table_class = SchoolTermTable - permission_required = "core.view_schoolterm" + permission_required = "core.view_schoolterm_rule" template_name = "core/school_term/list.html" @@ -174,7 +174,7 @@ class SchoolTermCreateView(PermissionRequiredMixin, AdvancedCreateView): model = SchoolTerm form_class = SchoolTermForm - permission_required = "core.add_schoolterm" + permission_required = "core.add_schoolterm_rule" template_name = "core/school_term/create.html" success_url = reverse_lazy("school_terms") success_message = _("The school term has been created.") @@ -192,7 +192,7 @@ class SchoolTermEditView(PermissionRequiredMixin, AdvancedEditView): success_message = _("The school term has been saved.") -@permission_required("core.view_persons") +@permission_required("core.view_persons_rule") def persons(request: HttpRequest) -> HttpResponse: """List view listing all persons.""" context = {} @@ -215,7 +215,7 @@ def persons(request: HttpRequest) -> HttpResponse: @permission_required( - "core.view_person", fn=objectgetter_optional(Person, "request.user.person", True) + "core.view_person_rule", fn=objectgetter_optional(Person, "request.user.person", True) ) def person(request: HttpRequest, id_: Optional[int] = None) -> HttpResponse: """Detail view for one person; defaulting to logged-in person.""" @@ -235,7 +235,7 @@ def person(request: HttpRequest, id_: Optional[int] = None) -> HttpResponse: return render(request, "core/person/full.html", context) -@permission_required("core.view_group", fn=objectgetter_optional(Group, None, False)) +@permission_required("core.view_group_rule", fn=objectgetter_optional(Group, None, False)) def group(request: HttpRequest, id_: int) -> HttpResponse: """Detail view for one group.""" context = {} @@ -268,7 +268,7 @@ def group(request: HttpRequest, id_: int) -> HttpResponse: return render(request, "core/group/full.html", context) -@permission_required("core.view_groups") +@permission_required("core.view_groups_rule") def groups(request: HttpRequest) -> HttpResponse: """List view for listing all groups.""" context = {} @@ -289,7 +289,7 @@ def groups(request: HttpRequest) -> HttpResponse: @never_cache -@permission_required("core.link_persons_accounts") +@permission_required("core.link_persons_accounts_rule") def persons_accounts(request: HttpRequest) -> HttpResponse: """View allowing to batch-process linking of users to persons.""" context = {} @@ -310,7 +310,7 @@ def persons_accounts(request: HttpRequest) -> HttpResponse: @never_cache -@permission_required("core.assign_child_groups_to_groups") +@permission_required("core.assign_child_groups_to_groups_rule") def groups_child_groups(request: HttpRequest) -> HttpResponse: """View for batch-processing assignment from child groups to groups.""" context = {} @@ -348,7 +348,7 @@ def groups_child_groups(request: HttpRequest) -> HttpResponse: @never_cache -@permission_required("core.edit_person", fn=objectgetter_optional(Person)) +@permission_required("core.edit_person_rule", fn=objectgetter_optional(Person)) def edit_person(request: HttpRequest, id_: Optional[int] = None) -> HttpResponse: """Edit view for a single person, defaulting to logged-in person.""" context = {} @@ -363,7 +363,7 @@ def edit_person(request: HttpRequest, id_: Optional[int] = None) -> HttpResponse ) else: # Empty form to create a new group - if request.user.has_perm("core.create_person"): + if request.user.has_perm("core.create_person_rule"): edit_person_form = EditPersonForm(request, request.POST or None, request.FILES or None) else: raise PermissionDenied() @@ -410,7 +410,7 @@ def get_group_by_id(request: HttpRequest, id_: Optional[int] = None): @never_cache -@permission_required("core.edit_group", fn=objectgetter_optional(Group, None, False)) +@permission_required("core.edit_group_rule", fn=objectgetter_optional(Group, None, False)) def edit_group(request: HttpRequest, id_: Optional[int] = None) -> HttpResponse: """View to edit or create a group.""" context = {} @@ -423,7 +423,7 @@ def edit_group(request: HttpRequest, id_: Optional[int] = None) -> HttpResponse: edit_group_form = EditGroupForm(request.POST or None, instance=group) else: # Empty form to create a new group - if request.user.has_perm("core.create_group"): + if request.user.has_perm("core.create_group_rule"): edit_group_form = EditGroupForm(request.POST or None) else: raise PermissionDenied() @@ -443,7 +443,7 @@ def edit_group(request: HttpRequest, id_: Optional[int] = None) -> HttpResponse: return render(request, "core/group/edit.html", context) -@permission_required("core.manage_data") +@permission_required("core.manage_data_rule") def data_management(request: HttpRequest) -> HttpResponse: """View with special menu for data management.""" context = {} @@ -454,7 +454,7 @@ class SystemStatus(PermissionRequiredMixin, MainView): """View giving information about the system status.""" template_name = "core/pages/system_status.html" - permission_required = "core.view_system_status" + permission_required = "core.view_system_status_rule" context = {} def get(self, request, *args, **kwargs): @@ -479,11 +479,11 @@ class SystemStatus(PermissionRequiredMixin, MainView): class TestPDFGenerationView(PermissionRequiredMixin, RenderPDFView): template_name = "core/pages/test_pdf.html" - permission_required = "core.test_pdf" + permission_required = "core.test_pdf_rule" @permission_required( - "core.mark_notification_as_read", fn=objectgetter_optional(Notification, None, False) + "core.mark_notification_as_read_rule", fn=objectgetter_optional(Notification, None, False) ) def notification_mark_read(request: HttpRequest, id_: int) -> HttpResponse: """Mark a notification read.""" @@ -496,7 +496,7 @@ def notification_mark_read(request: HttpRequest, id_: int) -> HttpResponse: return redirect("index") -@permission_required("core.view_announcements") +@permission_required("core.view_announcements_rule") def announcements(request: HttpRequest) -> HttpResponse: """List view of announcements.""" context = {} @@ -510,7 +510,7 @@ def announcements(request: HttpRequest) -> HttpResponse: @never_cache @permission_required( - "core.create_or_edit_announcement", fn=objectgetter_optional(Announcement, None, False) + "core.create_or_edit_announcement_rule", fn=objectgetter_optional(Announcement, None, False) ) def announcement_form(request: HttpRequest, id_: Optional[int] = None) -> HttpResponse: """View to create or edit an announcement.""" @@ -540,7 +540,7 @@ def announcement_form(request: HttpRequest, id_: Optional[int] = None) -> HttpRe @permission_required( - "core.delete_announcement", fn=objectgetter_optional(Announcement, None, False) + "core.delete_announcement_rule", fn=objectgetter_optional(Announcement, None, False) ) def delete_announcement(request: HttpRequest, id_: int) -> HttpResponse: """View to delete an announcement.""" @@ -552,7 +552,7 @@ def delete_announcement(request: HttpRequest, id_: int) -> HttpResponse: return redirect("announcements") -@permission_required("core.search") +@permission_required("core.search_rule") def searchbar_snippets(request: HttpRequest) -> HttpResponse: """View to return HTML snippet with searchbar autocompletion results.""" query = request.GET.get("q", "") @@ -567,7 +567,7 @@ def searchbar_snippets(request: HttpRequest) -> HttpResponse: class PermissionSearchView(PermissionRequiredMixin, SearchView): """Wrapper to apply permission to haystack's search view.""" - permission_required = "core.search" + permission_required = "core.search_rule" def create_response(self): context = self.get_context() @@ -592,21 +592,21 @@ def preferences( instance = request.site form_class = SitePreferenceForm - if not request.user.has_perm("core.change_site_preferences", instance): + if not request.user.has_perm("core.change_site_preferences_rule", instance): raise PermissionDenied() elif registry_name == "person": registry = person_preferences_registry instance = objectgetter_optional(Person, "request.user.person", True)(request, pk) form_class = PersonPreferenceForm - if not request.user.has_perm("core.change_person_preferences", instance): + if not request.user.has_perm("core.change_person_preferences_rule", instance): raise PermissionDenied() elif registry_name == "group": registry = group_preferences_registry instance = objectgetter_optional(Group, None, False)(request, pk) form_class = GroupPreferenceForm - if not request.user.has_perm("core.change_group_preferences", instance): + if not request.user.has_perm("core.change_group_preferences_rule", instance): raise PermissionDenied() else: # Invalid registry name passed from URL @@ -640,7 +640,7 @@ def preferences( return render(request, "dynamic_preferences/form.html", context) -@permission_required("core.delete_person", fn=objectgetter_optional(Person)) +@permission_required("core.delete_person_rule", fn=objectgetter_optional(Person)) def delete_person(request: HttpRequest, id_: int) -> HttpResponse: """View to delete an person.""" person = objectgetter_optional(Person)(request, id_) @@ -655,7 +655,7 @@ def delete_person(request: HttpRequest, id_: int) -> HttpResponse: return redirect("persons") -@permission_required("core.delete_group", fn=objectgetter_optional(Group)) +@permission_required("core.delete_group_rule", fn=objectgetter_optional(Group)) def delete_group(request: HttpRequest, id_: int) -> HttpResponse: """View to delete an group.""" group = objectgetter_optional(Group)(request, id_) @@ -671,7 +671,7 @@ def delete_group(request: HttpRequest, id_: int) -> HttpResponse: @never_cache @permission_required( - "core.change_additionalfield", fn=objectgetter_optional(AdditionalField, None, False) + "core.change_additionalfield_rule", fn=objectgetter_optional(AdditionalField, None, False) ) def edit_additional_field(request: HttpRequest, id_: Optional[int] = None) -> HttpResponse: """View to edit or create a additional_field.""" @@ -686,7 +686,7 @@ def edit_additional_field(request: HttpRequest, id_: Optional[int] = None) -> Ht request.POST or None, instance=additional_field ) else: - if request.user.has_perm("core.create_additionalfield"): + if request.user.has_perm("core.create_additionalfield_rule"): # Empty form to create a new additional_field edit_additional_field_form = EditAdditionalFieldForm(request.POST or None) else: @@ -705,7 +705,7 @@ def edit_additional_field(request: HttpRequest, id_: Optional[int] = None) -> Ht return render(request, "core/additional_field/edit.html", context) -@permission_required("core.view_additionalfields") +@permission_required("core.view_additionalfields_rule") def additional_fields(request: HttpRequest) -> HttpResponse: """List view for listing all additional fields.""" context = {} @@ -724,7 +724,7 @@ def additional_fields(request: HttpRequest) -> HttpResponse: @permission_required( - "core.delete_additionalfield", fn=objectgetter_optional(AdditionalField, None, False) + "core.delete_additionalfield_rule", fn=objectgetter_optional(AdditionalField, None, False) ) def delete_additional_field(request: HttpRequest, id_: int) -> HttpResponse: """View to delete an additional field.""" @@ -736,7 +736,7 @@ def delete_additional_field(request: HttpRequest, id_: int) -> HttpResponse: @never_cache -@permission_required("core.change_grouptype", fn=objectgetter_optional(GroupType, None, False)) +@permission_required("core.change_grouptype_rule", fn=objectgetter_optional(GroupType, None, False)) def edit_group_type(request: HttpRequest, id_: Optional[int] = None) -> HttpResponse: """View to edit or create a group_type.""" context = {} @@ -764,7 +764,7 @@ def edit_group_type(request: HttpRequest, id_: Optional[int] = None) -> HttpResp return render(request, "core/group_type/edit.html", context) -@permission_required("core.view_grouptypes") +@permission_required("core.view_grouptypes_rule") def group_types(request: HttpRequest) -> HttpResponse: """List view for listing all group types.""" context = {} @@ -780,7 +780,7 @@ def group_types(request: HttpRequest) -> HttpResponse: return render(request, "core/group_type/list.html", context) -@permission_required("core.delete_grouptype", fn=objectgetter_optional(GroupType, None, False)) +@permission_required("core.delete_grouptype_rule", fn=objectgetter_optional(GroupType, None, False)) def delete_group_type(request: HttpRequest, id_: int) -> HttpResponse: """View to delete an group_type.""" group_type = objectgetter_optional(GroupType, None, False)(request, id_) @@ -791,7 +791,7 @@ def delete_group_type(request: HttpRequest, id_: int) -> HttpResponse: class DataCheckView(PermissionRequiredMixin, ListView): - permission_required = "core.view_datacheckresults" + permission_required = "core.view_datacheckresults_rule" model = DataCheckResult template_name = "core/data_check/list.html" context_object_name = "results" @@ -810,7 +810,7 @@ class DataCheckView(PermissionRequiredMixin, ListView): class RunDataChecks(PermissionRequiredMixin, View): - permission_required = "core.run_data_checks" + permission_required = "core.run_data_checks_rule" def get(self, request: HttpRequest, *args, **kwargs) -> HttpResponse: result = check_data.delay() @@ -828,7 +828,7 @@ class RunDataChecks(PermissionRequiredMixin, View): class SolveDataCheckView(PermissionRequiredMixin, RevisionMixin, DetailView): queryset = DataCheckResult.objects.all() - permission_required = "core.solve_data_problem" + permission_required = "core.solve_data_problem_rule" def get(self, request: HttpRequest, *args, **kwargs) -> HttpResponse: solve_option = self.kwargs["solve_option"] @@ -855,7 +855,7 @@ class DashboardWidgetListView(PermissionRequiredMixin, SingleTableView): model = DashboardWidget table_class = DashboardWidgetTable - permission_required = "core.view_dashboardwidget" + permission_required = "core.view_dashboardwidget_rule" template_name = "core/dashboard_widget/list.html" def get_context_data(self, **kwargs: Any) -> dict[str, Any]: @@ -876,7 +876,7 @@ class DashboardWidgetEditView(PermissionRequiredMixin, AdvancedEditView): model = DashboardWidget fields = "__all__" - permission_required = "core.edit_dashboardwidget" + permission_required = "core.edit_dashboardwidget_rule" template_name = "core/dashboard_widget/edit.html" success_url = reverse_lazy("dashboard_widgets") success_message = _("The dashboard widget has been saved.") @@ -906,7 +906,7 @@ class DashboardWidgetCreateView(PermissionRequiredMixin, AdvancedCreateView): return super().post(request, *args, **kwargs) fields = "__all__" - permission_required = "core.add_dashboardwidget" + permission_required = "core.add_dashboardwidget_rule" template_name = "core/dashboard_widget/create.html" success_url = reverse_lazy("dashboard_widgets") success_message = _("The dashboard widget has been created.") @@ -916,7 +916,7 @@ class DashboardWidgetDeleteView(PermissionRequiredMixin, AdvancedDeleteView): """Delete view for dashboard widgets.""" model = DashboardWidget - permission_required = "core.delete_dashboardwidget" + permission_required = "core.delete_dashboardwidget_rule" template_name = "core/pages/delete.html" success_url = reverse_lazy("dashboard_widgets") success_message = _("The dashboard widget has been deleted.") @@ -925,13 +925,13 @@ class DashboardWidgetDeleteView(PermissionRequiredMixin, AdvancedDeleteView): class EditDashboardView(PermissionRequiredMixin, View): """View for editing dashboard widget order.""" - permission_required = "core.edit_dashboard" + permission_required = "core.edit_dashboard_rule" def get_context_data(self, request, **kwargs): context = {} self.default_dashboard = kwargs.get("default", False) - if self.default_dashboard and not request.user.has_perm("core.edit_default_dashboard"): + if self.default_dashboard and not request.user.has_perm("core.edit_default_dashboard_rule"): raise PermissionDenied() context["default_dashboard"] = self.default_dashboard @@ -1001,7 +1001,7 @@ class EditDashboardView(PermissionRequiredMixin, View): class OAuth2List(PermissionRequiredMixin, ListView): """List view for all the applications.""" - permission_required = "core.list_oauth_applications" + permission_required = "core.list_oauth_applications_rule" context_object_name = "applications" template_name = "oauth2_provider/application_list.html" @@ -1013,7 +1013,7 @@ class OAuth2Detail(PermissionRequiredMixin, DetailView): """Detail view for an application instance.""" context_object_name = "application" - permission_required = "core.view_oauth_applications" + permission_required = "core.view_oauth_applications_rule" template_name = "oauth2_provider/application_detail.html" def get_queryset(self): @@ -1023,7 +1023,7 @@ class OAuth2Detail(PermissionRequiredMixin, DetailView): class OAuth2Delete(PermissionRequiredMixin, DeleteView): """View used to delete an application.""" - permission_required = "core.delete_oauth_applications" + permission_required = "core.delete_oauth_applications_rule" context_object_name = "application" success_url = reverse_lazy("oauth_list") template_name = "oauth2_provider/application_confirm_delete.html" @@ -1035,7 +1035,7 @@ class OAuth2Delete(PermissionRequiredMixin, DeleteView): class OAuth2Update(PermissionRequiredMixin, UpdateView): """View used to update an application.""" - permission_required = "core.update_oauth_applications" + permission_required = "core.update_oauth_applications_rule" context_object_name = "application" template_name = "oauth2_provider/application_form.html"