Skip to content
Snippets Groups Projects
rules.py 9.33 KiB
from rules import add_perm

from aleksis.core.models import Group
from aleksis.core.util.predicates import (
    has_any_object,
    has_global_perm,
    has_object_perm,
    has_person,
    is_current_person,
    is_site_preference_set,
)

from .util.predicates import (
    can_edit_documentation,
    can_edit_participation_status,
    can_edit_personal_note,
    can_register_absence_for_at_least_one_group,
    can_register_absence_for_person,
    can_view_documentation,
    can_view_participation_status,
    can_view_personal_note,
    can_view_statistics_for_person,
    has_person_group_object_perm,
    is_course_group_owner,
    is_course_member,
    is_course_teacher,
    is_group_member,
    is_group_owner,
    is_group_role_assignment_group_owner,
    is_in_allowed_time_range,
    is_in_allowed_time_range_for_participation_status,
    is_lesson_event_group_owner,
    is_lesson_event_teacher,
    is_owner_of_any_group,
    is_parent_group_owner,
    is_person_group_owner,
)

# Register absence
view_register_absence_predicate = has_person & (
    can_register_absence_for_at_least_one_group | has_global_perm("alsijil.register_absence")
)
add_perm("alsijil.view_register_absence_rule", view_register_absence_predicate)

register_absence_predicate = has_person & (
    can_register_absence_for_person
    | has_global_perm("alsijil.register_absence")
    | has_object_perm("core.register_absence_person")
    | has_person_group_object_perm("core.register_absence_group")
)
add_perm("alsijil.register_absence_rule", register_absence_predicate)

# View full register for group
view_full_register_predicate = has_person & (
    is_group_owner
    | (
        is_parent_group_owner
        & is_site_preference_set("alsijil", "inherit_privileges_from_parent_group")
    )
    | has_global_perm("alsijil.view_full_register")
    | has_object_perm("core.view_full_register_group")
)
add_perm("alsijil.view_full_register_rule", view_full_register_predicate)


# View extra mark list
view_extramarks_predicate = has_person & has_global_perm("alsijil.view_extramark")
add_perm("alsijil.view_extramarks_rule", view_extramarks_predicate)

# Fetch all extra marks
fetch_extramarks_predicate = has_person
add_perm("alsijil.fetch_extramarks_rule", fetch_extramarks_predicate)

# Add extra mark
add_extramark_predicate = view_extramarks_predicate & has_global_perm("alsijil.add_extramark")
add_perm("alsijil.add_extramark_rule", add_extramark_predicate)

# Edit extra mark
edit_extramark_predicate = view_extramarks_predicate & has_global_perm("alsijil.change_extramark")
add_perm("alsijil.edit_extramark_rule", edit_extramark_predicate)

# Delete extra mark
delete_extramark_predicate = view_extramarks_predicate & has_global_perm("alsijil.delete_extramark")
add_perm("alsijil.delete_extramark_rule", delete_extramark_predicate)

# View group role list
view_group_roles_predicate = has_person & has_global_perm("alsijil.view_grouprole")
add_perm("alsijil.view_grouproles_rule", view_group_roles_predicate)

# Add group role
add_group_role_predicate = view_group_roles_predicate & has_global_perm("alsijil.add_grouprole")
add_perm("alsijil.add_grouprole_rule", add_group_role_predicate)

# Edit group role
edit_group_role_predicate = view_group_roles_predicate & has_global_perm("alsijil.change_grouprole")
add_perm("alsijil.edit_grouprole_rule", edit_group_role_predicate)

# Delete group role
delete_group_role_predicate = view_group_roles_predicate & has_global_perm(
    "alsijil.delete_grouprole"
)
add_perm("alsijil.delete_grouprole_rule", delete_group_role_predicate)

view_assigned_group_roles_predicate = has_person & (
    is_group_owner
    | (
        is_parent_group_owner
        & is_site_preference_set("alsijil", "inherit_privileges_from_parent_group")
    )
    | has_global_perm("alsijil.assign_grouprole")
    | has_object_perm("core.assign_grouprole")
)
add_perm("alsijil.view_assigned_grouproles_rule", view_assigned_group_roles_predicate)

assign_group_role_person_predicate = has_person & (
    is_person_group_owner | has_global_perm("alsijil.assign_grouprole")
)
add_perm("alsijil.assign_grouprole_to_person_rule", assign_group_role_person_predicate)

assign_group_role_for_multiple_predicate = has_person & (
    is_owner_of_any_group | has_global_perm("alsijil.assign_grouprole")
)
add_perm("alsijil.assign_grouprole_for_multiple_rule", assign_group_role_for_multiple_predicate)

assign_group_role_group_predicate = view_assigned_group_roles_predicate
add_perm("alsijil.assign_grouprole_for_group_rule", assign_group_role_group_predicate)

edit_group_role_assignment_predicate = has_person & (
    has_global_perm("alsijil.assign_grouprole") | is_group_role_assignment_group_owner
)
add_perm("alsijil.edit_grouproleassignment_rule", edit_group_role_assignment_predicate)

stop_group_role_assignment_predicate = edit_group_role_assignment_predicate
add_perm("alsijil.stop_grouproleassignment_rule", stop_group_role_assignment_predicate)

delete_group_role_assignment_predicate = has_person & (
    has_global_perm("alsijil.assign_grouprole") | is_group_role_assignment_group_owner
)
add_perm("alsijil.delete_grouproleassignment_rule", delete_group_role_assignment_predicate)

view_register_objects_list_predicate = has_person & (
    has_any_object("core.view_full_register_group", Group)
    | has_global_perm("alsijil.view_full_register")
)
add_perm("alsijil.view_register_objects_list_rule", view_register_objects_list_predicate)

view_documentation_predicate = has_person & (
    has_global_perm("alsijil.view_documentation") | can_view_documentation
)
add_perm("alsijil.view_documentation_rule", view_documentation_predicate)

view_documentations_for_course_predicate = has_person & (
    has_global_perm("alsijil.view_documentation")
    | is_course_teacher
    | is_course_member
    | is_course_group_owner
)
add_perm("alsijil.view_documentations_for_course_rule", view_documentations_for_course_predicate)

view_documentations_for_group_predicate = has_person & (
    has_global_perm("alsijil.view_documentation")
    | is_group_owner
    | is_group_member
    | is_parent_group_owner
)
add_perm("alsijil.view_documentations_for_group_rule", view_documentations_for_group_predicate)

view_documentations_menu_predicate = has_person
add_perm("alsijil.view_documentations_menu_rule", view_documentations_menu_predicate)

view_documentations_for_teacher_predicate = has_person & (
    has_global_perm("alsijil.view_documentation") | is_current_person
)
add_perm("alsijil.view_documentations_for_teacher_rule", view_documentations_for_teacher_predicate)

add_documentation_for_course_predicate = has_person & (
    has_global_perm("alsijil.add_documentation") | is_course_teacher
)
add_perm("alsijil.add_documentation_for_course_rule", add_documentation_for_course_predicate)

add_documentation_for_lesson_event_predicate = has_person & (
    has_global_perm("alsijil.add_documentation")
    | is_lesson_event_teacher
    | is_lesson_event_group_owner
)
add_perm(
    "alsijil.add_documentation_for_lesson_event_rule", add_documentation_for_lesson_event_predicate
)

edit_documentation_predicate = (
    has_person
    & (has_global_perm("alsijil.change_documentation") | can_edit_documentation)
    & is_in_allowed_time_range
)
add_perm("alsijil.edit_documentation_rule", edit_documentation_predicate)
add_perm("alsijil.delete_documentation_rule", edit_documentation_predicate)

view_participation_status_for_documentation_predicate = has_person & (
    has_global_perm("alsijil.change_participationstatus") | can_view_participation_status
)
add_perm(
    "alsijil.view_participation_status_for_documentation_rule",
    view_participation_status_for_documentation_predicate,
)

edit_participation_status_for_documentation_with_time_range_predicate = (
    has_person
    & (has_global_perm("alsijil.change_participationstatus") | can_edit_participation_status)
    & is_in_allowed_time_range_for_participation_status
)
add_perm(
    "alsijil.edit_participation_status_for_documentation_with_time_range_rule",
    edit_participation_status_for_documentation_with_time_range_predicate,
)

edit_participation_status_for_documentation_predicate = has_person & (
    has_global_perm("alsijil.change_participationstatus") | can_edit_participation_status
)
add_perm(
    "alsijil.edit_participation_status_for_documentation_rule",
    edit_participation_status_for_documentation_predicate,
)

view_personal_note_predicate = has_person & (
    has_global_perm("alsijil.change_newpersonalnote") | can_view_personal_note
)
add_perm(
    "alsijil.view_personal_note_rule",
    view_personal_note_predicate,
)

edit_personal_note_predicate = (
    has_person
    & (has_global_perm("alsijil.change_newpersonalnote") | can_edit_personal_note)
    & is_in_allowed_time_range
)
add_perm(
    "alsijil.edit_personal_note_rule",
    edit_personal_note_predicate,
)

view_group_statistics_predicate = has_person & (
    has_global_perm("alsijil.view_participationstatus") | is_group_owner
)
add_perm(
    "alsijil.view_group_statistics_rule",
    view_group_statistics_predicate,
)

view_person_statistics_predicate = has_person & (
    is_current_person
    | has_global_perm("alsijil.view_participationstatus")
    | can_view_statistics_for_person
)
add_perm(
    "alsijil.view_person_statistics_rule",
    view_person_statistics_predicate,
)

# View parent menu entry
view_menu_predicate = has_person & (view_documentations_menu_predicate | view_extramarks_predicate)
add_perm(
    "alsijil.view_menu_rule",
    view_menu_predicate,
)