Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
A
AlekSIS-App-Alsijil
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
AlekSIS®
Official
AlekSIS-App-Alsijil
Commits
c29718dc
Verified
Commit
c29718dc
authored
8 months ago
by
Jonathan Weth
Browse files
Options
Downloads
Patches
Plain Diff
Drop old predicates and rules
parent
c07b08bd
No related branches found
No related tags found
1 merge request
!396
Migration path to new models
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
aleksis/apps/alsijil/rules.py
+0
-226
0 additions, 226 deletions
aleksis/apps/alsijil/rules.py
aleksis/apps/alsijil/util/predicates.py
+2
-188
2 additions, 188 deletions
aleksis/apps/alsijil/util/predicates.py
with
2 additions
and
414 deletions
aleksis/apps/alsijil/rules.py
+
0
−
226
View file @
c29718dc
...
...
@@ -20,9 +20,7 @@ from .util.predicates import (
can_view_documentation
,
can_view_participation_status
,
can_view_personal_note
,
has_lesson_group_object_perm
,
has_person_group_object_perm
,
has_personal_note_group_perm
,
is_course_group_owner
,
is_course_member
,
is_course_teacher
,
...
...
@@ -33,144 +31,11 @@ from .util.predicates import (
is_in_allowed_time_range_for_participation_status
,
is_lesson_event_group_owner
,
is_lesson_event_teacher
,
is_lesson_original_teacher
,
is_lesson_parent_group_owner
,
is_lesson_participant
,
is_lesson_teacher
,
is_none
,
is_own_personal_note
,
is_owner_of_any_group
,
is_parent_group_owner
,
is_person_group_owner
,
is_person_primary_group_owner
,
is_personal_note_lesson_original_teacher
,
is_personal_note_lesson_parent_group_owner
,
is_personal_note_lesson_teacher
,
is_teacher
,
)
# View lesson
view_register_object_predicate
=
has_person
&
(
is_none
# View is opened as "Current lesson"
|
is_lesson_teacher
|
is_lesson_original_teacher
|
is_lesson_participant
|
is_lesson_parent_group_owner
|
has_global_perm
(
"
alsijil.view_lesson
"
)
|
has_lesson_group_object_perm
(
"
core.view_week_class_register_group
"
)
)
add_perm
(
"
alsijil.view_register_object_rule
"
,
view_register_object_predicate
)
# View lesson in menu
add_perm
(
"
alsijil.view_lesson_menu_rule
"
,
has_person
)
# View lesson personal notes
view_lesson_personal_notes_predicate
=
view_register_object_predicate
&
(
~
is_lesson_participant
|
is_lesson_teacher
|
is_lesson_original_teacher
|
(
is_lesson_parent_group_owner
&
is_site_preference_set
(
"
alsijil
"
,
"
inherit_privileges_from_parent_group
"
)
)
|
has_global_perm
(
"
alsijil.view_personalnote
"
)
|
has_lesson_group_object_perm
(
"
core.view_personalnote_group
"
)
)
add_perm
(
"
alsijil.view_register_object_personalnote_rule
"
,
view_lesson_personal_notes_predicate
)
# Edit personal note
edit_lesson_personal_note_predicate
=
view_lesson_personal_notes_predicate
&
(
is_lesson_teacher
|
(
is_lesson_original_teacher
&
is_site_preference_set
(
"
alsijil
"
,
"
edit_lesson_documentation_as_original_teacher
"
)
)
|
(
is_lesson_parent_group_owner
&
is_site_preference_set
(
"
alsijil
"
,
"
inherit_privileges_from_parent_group
"
)
)
|
has_global_perm
(
"
alsijil.change_personalnote
"
)
|
has_lesson_group_object_perm
(
"
core.edit_personalnote_group
"
)
)
add_perm
(
"
alsijil.edit_register_object_personalnote_rule
"
,
edit_lesson_personal_note_predicate
)
# View personal note
view_personal_note_predicate
=
has_person
&
(
(
is_own_personal_note
&
is_site_preference_set
(
"
alsijil
"
,
"
view_own_personal_notes
"
))
|
is_personal_note_lesson_teacher
|
is_personal_note_lesson_original_teacher
|
is_personal_note_lesson_parent_group_owner
|
has_global_perm
(
"
alsijil.view_personalnote
"
)
|
has_personal_note_group_perm
(
"
core.view_personalnote_group
"
)
)
add_perm
(
"
alsijil.view_personalnote_rule
"
,
view_personal_note_predicate
)
# Edit personal note
edit_personal_note_predicate
=
view_personal_note_predicate
&
(
~
is_own_personal_note
&
~
(
is_personal_note_lesson_original_teacher
|
~
is_site_preference_set
(
"
alsijil
"
,
"
edit_lesson_documentation_as_original_teacher
"
)
)
|
(
is_personal_note_lesson_parent_group_owner
|
is_site_preference_set
(
"
alsijil
"
,
"
inherit_privileges_from_parent_group
"
)
)
|
has_global_perm
(
"
alsijil.view_personalnote
"
)
|
has_personal_note_group_perm
(
"
core.edit_personalnote_group
"
)
)
add_perm
(
"
alsijil.edit_personalnote_rule
"
,
edit_personal_note_predicate
)
# View lesson documentation
view_lesson_documentation_predicate
=
view_register_object_predicate
add_perm
(
"
alsijil.view_lessondocumentation_rule
"
,
view_lesson_documentation_predicate
)
# Edit lesson documentation
edit_lesson_documentation_predicate
=
view_register_object_predicate
&
(
is_lesson_teacher
|
(
is_lesson_original_teacher
&
is_site_preference_set
(
"
alsijil
"
,
"
edit_lesson_documentation_as_original_teacher
"
)
)
|
(
is_lesson_parent_group_owner
&
is_site_preference_set
(
"
alsijil
"
,
"
inherit_privileges_from_parent_group
"
)
)
|
has_global_perm
(
"
alsijil.change_lessondocumentation
"
)
|
has_lesson_group_object_perm
(
"
core.edit_lessondocumentation_group
"
)
)
add_perm
(
"
alsijil.edit_lessondocumentation_rule
"
,
edit_lesson_documentation_predicate
)
# View week overview
view_week_predicate
=
has_person
&
(
is_current_person
|
is_group_member
|
is_group_owner
|
(
is_parent_group_owner
&
is_site_preference_set
(
"
alsijil
"
,
"
inherit_privileges_from_parent_group
"
)
)
|
has_global_perm
(
"
alsijil.view_week
"
)
|
has_object_perm
(
"
core.view_week_class_register_group
"
)
)
add_perm
(
"
alsijil.view_week_rule
"
,
view_week_predicate
)
# View week overview in menu
add_perm
(
"
alsijil.view_week_menu_rule
"
,
has_person
)
# View week personal notes
view_week_personal_notes_predicate
=
has_person
&
(
(
is_current_person
&
is_teacher
)
|
is_group_owner
|
(
is_parent_group_owner
&
is_site_preference_set
(
"
alsijil
"
,
"
inherit_privileges_from_parent_group
"
)
)
|
has_global_perm
(
"
alsijil.view_personalnote
"
)
|
has_object_perm
(
"
core.view_personalnote_group
"
)
)
add_perm
(
"
alsijil.view_week_personalnote_rule
"
,
view_week_personal_notes_predicate
)
# Register absence
view_register_absence_predicate
=
has_person
&
(
can_register_absence_for_at_least_one_group
|
has_global_perm
(
"
alsijil.register_absence
"
)
...
...
@@ -197,86 +62,6 @@ view_full_register_predicate = has_person & (
)
add_perm
(
"
alsijil.view_full_register_rule
"
,
view_full_register_predicate
)
# View students list
view_my_students_predicate
=
has_person
&
is_teacher
add_perm
(
"
alsijil.view_my_students_rule
"
,
view_my_students_predicate
)
# View groups list
view_my_groups_predicate
=
has_person
&
is_teacher
add_perm
(
"
alsijil.view_my_groups_rule
"
,
view_my_groups_predicate
)
# View students list
view_students_list_predicate
=
view_my_groups_predicate
&
(
is_group_owner
|
(
is_parent_group_owner
&
is_site_preference_set
(
"
alsijil
"
,
"
inherit_privileges_from_parent_group
"
)
)
|
has_global_perm
(
"
alsijil.view_personalnote
"
)
|
has_object_perm
(
"
core.view_personalnote_group
"
)
)
add_perm
(
"
alsijil.view_students_list_rule
"
,
view_students_list_predicate
)
# View person overview
view_person_overview_predicate
=
has_person
&
(
(
is_current_person
&
is_site_preference_set
(
"
alsijil
"
,
"
view_own_personal_notes
"
))
|
is_person_group_owner
)
add_perm
(
"
alsijil.view_person_overview_rule
"
,
view_person_overview_predicate
)
# View person overview
view_person_overview_menu_predicate
=
has_person
add_perm
(
"
alsijil.view_person_overview_menu_rule
"
,
view_person_overview_menu_predicate
)
# View person overview personal notes
view_person_overview_personal_notes_predicate
=
view_person_overview_predicate
&
(
(
is_current_person
&
is_site_preference_set
(
"
alsijil
"
,
"
view_own_personal_notes
"
))
|
is_person_primary_group_owner
|
has_global_perm
(
"
alsijil.view_personalnote
"
)
|
has_person_group_object_perm
(
"
core.view_personalnote_group
"
)
)
add_perm
(
"
alsijil.view_person_overview_personalnote_rule
"
,
view_person_overview_personal_notes_predicate
,
)
# Edit person overview personal notes
edit_person_overview_personal_notes_predicate
=
view_person_overview_predicate
&
(
~
is_current_person
|
has_global_perm
(
"
alsijil.change_personalnote
"
)
|
has_person_group_object_perm
(
"
core.edit_personalnote_group
"
)
)
add_perm
(
"
alsijil.edit_person_overview_personalnote_rule
"
,
edit_person_overview_personal_notes_predicate
,
)
# View person statistics on personal notes
view_person_statistics_personal_notes_predicate
=
view_person_overview_personal_notes_predicate
add_perm
(
"
alsijil.view_person_statistics_personalnote_rule
"
,
view_person_statistics_personal_notes_predicate
,
)
# View excuse type list
view_excusetypes_predicate
=
has_person
&
has_global_perm
(
"
alsijil.view_excusetype
"
)
add_perm
(
"
alsijil.view_excusetypes_rule
"
,
view_excusetypes_predicate
)
# Add excuse type
add_excusetype_predicate
=
view_excusetypes_predicate
&
has_global_perm
(
"
alsijil.add_excusetype
"
)
add_perm
(
"
alsijil.add_excusetype_rule
"
,
add_excusetype_predicate
)
# Edit excuse type
edit_excusetype_predicate
=
view_excusetypes_predicate
&
has_global_perm
(
"
alsijil.change_excusetype
"
)
add_perm
(
"
alsijil.edit_excusetype_rule
"
,
edit_excusetype_predicate
)
# Delete excuse type
delete_excusetype_predicate
=
view_excusetypes_predicate
&
has_global_perm
(
"
alsijil.delete_excusetype
"
)
add_perm
(
"
alsijil.delete_excusetype_rule
"
,
delete_excusetype_predicate
)
# View extra mark list
view_extramarks_predicate
=
has_person
&
has_global_perm
(
"
alsijil.view_extramark
"
)
...
...
@@ -327,17 +112,6 @@ view_assigned_group_roles_predicate = has_person & (
)
add_perm
(
"
alsijil.view_assigned_grouproles_rule
"
,
view_assigned_group_roles_predicate
)
view_assigned_group_roles_register_object_predicate
=
has_person
&
(
is_lesson_teacher
|
is_lesson_original_teacher
|
is_lesson_parent_group_owner
|
has_global_perm
(
"
alsijil.assign_grouprole
"
)
)
add_perm
(
"
alsijil.view_assigned_grouproles_for_register_object
"
,
view_assigned_group_roles_register_object_predicate
,
)
assign_group_role_person_predicate
=
has_person
&
(
is_person_group_owner
|
has_global_perm
(
"
alsijil.assign_grouprole
"
)
)
...
...
This diff is collapsed.
Click to expand it.
aleksis/apps/alsijil/util/predicates.py
+
2
−
188
View file @
c29718dc
from
typing
import
Any
,
Union
from
typing
import
Union
from
django.contrib.auth.models
import
User
from
django.db.models
import
Q
...
...
@@ -6,7 +6,7 @@ from django.utils.timezone import localdate, now
from
rules
import
predicate
from
aleksis.apps.chronos.models
import
Event
,
ExtraLesson
,
LessonEvent
,
LessonPeriod
from
aleksis.apps.chronos.models
import
LessonEvent
from
aleksis.apps.cursus.models
import
Course
from
aleksis.core.models
import
Group
,
Person
from
aleksis.core.util.core_helpers
import
get_site_preferences
...
...
@@ -15,70 +15,6 @@ from aleksis.core.util.predicates import check_object_permission
from
..models
import
Documentation
,
NewPersonalNote
@predicate
def
is_none
(
user
:
User
,
obj
:
Any
)
->
bool
:
"""
Predicate that checks if the provided object is None-like.
"""
return
not
bool
(
obj
)
@predicate
def
is_lesson_teacher
(
user
:
User
,
obj
:
Union
[
LessonPeriod
,
Event
,
ExtraLesson
])
->
bool
:
"""
Predicate for teachers of a lesson.
Checks whether the person linked to the user is a teacher in the register object.
If the register object is a lesson period and has a substitution linked,
this will **only** check if the person is one of the substitution teachers.
"""
if
obj
:
return
user
.
person
in
obj
.
get_teachers
().
all
()
return
False
@predicate
def
is_lesson_original_teacher
(
user
:
User
,
obj
:
Union
[
LessonPeriod
,
Event
,
ExtraLesson
])
->
bool
:
"""
Predicate for teachers of a lesson.
Checks whether the person linked to the user is a teacher in the register object.
If the register object is a lesson period and has a substitution linked,
this will **also** check if the person is one of the substitution teachers.
"""
if
obj
:
if
isinstance
(
obj
,
LessonPeriod
)
and
user
.
person
in
obj
.
lesson
.
teachers
.
all
():
return
True
return
user
.
person
in
obj
.
get_teachers
().
all
()
return
False
@predicate
def
is_lesson_participant
(
user
:
User
,
obj
:
LessonPeriod
)
->
bool
:
"""
Predicate for participants of a lesson.
Checks whether the person linked to the user is a member in
the groups linked to the given LessonPeriod.
"""
if
hasattr
(
obj
,
"
lesson
"
)
or
hasattr
(
obj
,
"
groups
"
):
for
group
in
obj
.
get_groups
().
all
():
if
user
.
person
in
list
(
group
.
members
.
all
()):
return
True
return
False
@predicate
def
is_lesson_parent_group_owner
(
user
:
User
,
obj
:
LessonPeriod
)
->
bool
:
"""
Predicate for parent group owners of a lesson.
Checks whether the person linked to the user is the owner of
any parent groups of any groups of the given LessonPeriods lesson.
"""
if
hasattr
(
obj
,
"
lesson
"
)
or
hasattr
(
obj
,
"
groups
"
):
for
group
in
obj
.
get_groups
().
all
():
for
parent_group
in
group
.
parent_groups
.
all
():
if
user
.
person
in
list
(
parent_group
.
owners
.
all
()):
return
True
return
False
@predicate
def
is_group_owner
(
user
:
User
,
obj
:
Union
[
Group
,
Person
])
->
bool
:
"""
Predicate for group owners of a given group.
...
...
@@ -130,19 +66,6 @@ def use_prefetched(obj, attr):
return
getattr
(
obj
,
attr
).
all
()
@predicate
def
is_person_primary_group_owner
(
user
:
User
,
obj
:
Person
)
->
bool
:
"""
Predicate for group owners of the person
'
s primary group.
Checks whether the person linked to the user is
the owner of the primary group of the given person.
"""
if
obj
.
primary_group
:
return
user
.
person
in
use_prefetched
(
obj
.
primary_group
,
"
owners
"
)
return
False
def
has_person_group_object_perm
(
perm
:
str
):
"""
Predicate builder for permissions on a set of member groups.
...
...
@@ -171,55 +94,6 @@ def is_group_member(user: User, obj: Union[Group, Person]) -> bool:
return
False
def
has_lesson_group_object_perm
(
perm
:
str
):
"""
Predicate builder for permissions on lesson groups.
Checks whether a user has a permission on any group of a LessonPeriod.
"""
name
=
f
"
has_lesson_group_object_perm:
{
perm
}
"
@predicate
(
name
)
def
fn
(
user
:
User
,
obj
:
LessonPeriod
)
->
bool
:
if
hasattr
(
obj
,
"
lesson
"
):
groups
=
obj
.
lesson
.
groups
.
all
()
for
group
in
groups
:
if
check_object_permission
(
user
,
perm
,
group
,
checker_obj
=
obj
):
return
True
return
False
return
fn
def
has_personal_note_group_perm
(
perm
:
str
):
"""
Predicate builder for permissions on personal notes.
Checks whether a user has a permission on any group of a person of a PersonalNote.
"""
name
=
f
"
has_personal_note_person_or_group_perm:
{
perm
}
"
@predicate
(
name
)
def
fn
(
user
:
User
,
obj
)
->
bool
:
if
hasattr
(
obj
,
"
person
"
):
groups
=
obj
.
person
.
member_of
.
all
()
for
group
in
groups
:
if
check_object_permission
(
user
,
perm
,
group
,
checker_obj
=
obj
):
return
True
return
False
return
fn
@predicate
def
is_own_personal_note
(
user
:
User
,
obj
)
->
bool
:
"""
Predicate for users referred to in a personal note.
Checks whether the user referred to in a PersonalNote is the active user.
"""
if
hasattr
(
obj
,
"
person
"
)
and
obj
.
person
is
user
.
person
:
return
True
return
False
@predicate
def
is_parent_group_owner
(
user
:
User
,
obj
:
Group
)
->
bool
:
"""
Predicate which checks whether the user is the owner of any parent group of the group.
"""
...
...
@@ -230,66 +104,6 @@ def is_parent_group_owner(user: User, obj: Group) -> bool:
return
False
@predicate
def
is_personal_note_lesson_teacher
(
user
:
User
,
obj
)
->
bool
:
"""
Predicate for teachers of a register object linked to a personal note.
Checks whether the person linked to the user is a teacher
in the register object linked to the personal note.
If the register object is a lesson period and has a substitution linked,
this will **only** check if the person is one of the substitution teachers.
"""
if
hasattr
(
obj
,
"
register_object
"
):
return
user
.
person
in
obj
.
register_object
.
get_teachers
().
all
()
return
False
@predicate
def
is_personal_note_lesson_original_teacher
(
user
:
User
,
ob
)
->
bool
:
"""
Predicate for teachers of a register object linked to a personal note.
Checks whether the person linked to the user is a teacher
in the register object linked to the personal note.
If the register object is a lesson period and has a substitution linked,
this will **also** check if the person is one of the substitution teachers.
"""
if
hasattr
(
obj
,
"
register_object
"
):
if
(
isinstance
(
obj
.
register_object
,
LessonPeriod
)
and
user
.
person
in
obj
.
lesson_period
.
lesson
.
teachers
.
all
()
):
return
True
return
user
.
person
in
obj
.
register_object
.
get_teachers
().
all
()
return
False
@predicate
def
is_personal_note_lesson_parent_group_owner
(
user
:
User
,
obj
)
->
bool
:
"""
Predicate for parent group owners of a lesson referred to in the lesson of a personal note.
Checks whether the person linked to the user is the owner of
any parent groups of any groups of the given LessonPeriod lesson of the given PersonalNote.
If so, also checks whether the person linked to the personal note actually is a member of this
parent group.
"""
if
hasattr
(
obj
,
"
register_object
"
):
for
group
in
obj
.
register_object
.
get_groups
().
all
():
for
parent_group
in
group
.
parent_groups
.
all
():
if
user
.
person
in
use_prefetched
(
parent_group
,
"
owners
"
)
and
obj
.
person
in
use_prefetched
(
parent_group
,
"
members
"
):
return
True
return
False
@predicate
def
is_teacher
(
user
:
User
,
obj
:
Person
)
->
bool
:
"""
Predicate which checks if the provided object is a teacher.
"""
return
user
.
person
.
is_teacher
@predicate
def
is_group_role_assignment_group_owner
(
user
:
User
,
obj
:
Union
[
Group
,
Person
])
->
bool
:
"""
Predicate for group owners of a group role assignment.
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment