diff --git a/conftest.py b/conftest.py index 904c46ec..fe0afdf1 100644 --- a/conftest.py +++ b/conftest.py @@ -28,6 +28,7 @@ def admin_user(admin_user): admin_user.last_name = "Test" admin_user.initials = "ETU" admin_user.is_approved = True + admin_user.is_supervisor = True admin_user.save() return admin_user diff --git a/training/decorators.py b/training/decorators.py index d232f4da..c56f9470 100644 --- a/training/decorators.py +++ b/training/decorators.py @@ -1,5 +1,5 @@ from PyRIGS.decorators import user_passes_test_with_403 -def has_perm_or_supervisor(perm, login_url=None, oembed_view=None): - return user_passes_test_with_403(lambda u: (hasattr(u, 'is_supervisor') and u.is_supervisor) or u.has_perm(perm), login_url=login_url, oembed_view=oembed_view) +def is_supervisor(login_url=None, oembed_view=None): + return user_passes_test_with_403(lambda u: (hasattr(u, 'is_supervisor') and u.is_supervisor)) diff --git a/training/models.py b/training/models.py index ee5cadf5..db36c7ed 100644 --- a/training/models.py +++ b/training/models.py @@ -201,7 +201,7 @@ class TrainingItemQualification(models.Model, RevisionMixin): @property def activity_feed_string(self): - return f"{self.trainee} {self.get_depth_display().lower()} {self.get_depth_display()} in {self.item}" + return f"{self.trainee} {self.get_depth_display().lower()} in {self.item}" @classmethod def get_colour_from_depth(cls, depth): diff --git a/training/templates/base_training.html b/training/templates/base_training.html index 56957302..f60de7f1 100644 --- a/training/templates/base_training.html +++ b/training/templates/base_training.html @@ -30,7 +30,7 @@ Item List - {% if perms.training.add_trainingitemqualification or request.user.is_supervisor %} + {% if request.user.is_supervisor %} {% endif %} diff --git a/training/templates/level_detail.html b/training/templates/level_detail.html index 184ad845..b95591b4 100644 --- a/training/templates/level_detail.html +++ b/training/templates/level_detail.html @@ -44,7 +44,7 @@ {% endblock %} {% block content %} -{% if request.user.is_supervisor or perms.training.add_traininglevelrequirement %} +{% if request.user.is_supervisor %}
Add New Requirement @@ -79,9 +79,9 @@ {% endfor %} {{object}} - - - + + + diff --git a/training/templates/partials/add_qualification.html b/training/templates/partials/add_qualification.html index 96cb5b42..094b54dc 100644 --- a/training/templates/partials/add_qualification.html +++ b/training/templates/partials/add_qualification.html @@ -1,4 +1,4 @@ -{% if request.user.is_supervisor or perms.training.add_trainingitemqualification %} +{% if request.user.is_supervisor %} Add New Training Record diff --git a/training/templates/trainee_item_list.html b/training/templates/trainee_item_list.html index 235a849a..91e2cc9d 100644 --- a/training/templates/trainee_item_list.html +++ b/training/templates/trainee_item_list.html @@ -54,7 +54,7 @@ Date Supervisor Notes - {% if request.user.is_supervisor or perms.training.change_trainingitemqualification %} + {% if request.user.is_supervisor %} {% endif %} @@ -67,7 +67,7 @@ {{ object.date }} {{ object.supervisor }} {{ object.notes }} - {% if request.user.is_supervisor or perms.training.change_trainingitemqualification %} + {% if request.user.is_supervisor %} {% button 'edit' 'edit_qualification' object.pk id="edit" %} {% endif %} diff --git a/training/tests/test_unit.py b/training/tests/test_unit.py index 4c23e0ab..4660c141 100644 --- a/training/tests/test_unit.py +++ b/training/tests/test_unit.py @@ -16,7 +16,7 @@ def test_add_qualification(admin_client, trainee, admin_user, training_item): response = admin_client.post(url, {'date': date, 'trainee': trainee.pk, 'supervisor': trainee.pk, 'item': training_item.pk}) assertFormError(response, 'form', 'date', 'Qualification date may not be in the future') assertFormError(response, 'form', 'supervisor', 'One may not supervise oneself...') - response = admin_client.post(url, {'date': date, 'trainee': trainee.pk, 'supervisor': admin_user.pk, 'item': training_item.pk}) + response = admin_client.post(url, {'date': date, 'trainee': admin_user.pk, 'supervisor': trainee.pk, 'item': training_item.pk}) print(response.content) assertFormError(response, 'form', 'supervisor', 'Selected supervisor must actually *be* a supervisor...') diff --git a/training/urls.py b/training/urls.py index bb512c96..4fefe353 100644 --- a/training/urls.py +++ b/training/urls.py @@ -1,7 +1,8 @@ from django.urls import path from django.contrib.auth.decorators import login_required -from training.decorators import has_perm_or_supervisor +from training.decorators import is_supervisor +from PyRIGS.decorators import permission_required_with_403 from training import views, models from versioning.views import VersionHistory @@ -12,22 +13,22 @@ urlpatterns = [ path('trainee/list/', login_required(views.TraineeList.as_view()), name='trainee_list'), path('trainee//', - has_perm_or_supervisor('RIGS.view_profile')(views.TraineeDetail.as_view()), + permission_required_with_403('RIGS.view_profile')(views.TraineeDetail.as_view()), name='trainee_detail'), - path('trainee//history', has_perm_or_supervisor('RIGS.view_profile')(VersionHistory.as_view()), name='trainee_history', kwargs={'model': models.Trainee, 'app': 'training'}), # Not picked up automatically because proxy model (I think) - path('trainee//add_qualification/', has_perm_or_supervisor('training.add_trainingitemqualification')(views.AddQualification.as_view()), + path('trainee//history', permission_required_with_403('RIGS.view_profile')(VersionHistory.as_view()), name='trainee_history', kwargs={'model': models.Trainee, 'app': 'training'}), # Not picked up automatically because proxy model (I think) + path('trainee//add_qualification/', is_supervisor()(views.AddQualification.as_view()), name='add_qualification'), - path('trainee/edit_qualification//', has_perm_or_supervisor('training.change_trainingitemqualification')(views.EditQualification.as_view()), + path('trainee/edit_qualification//', is_supervisor()(views.EditQualification.as_view()), name='edit_qualification'), path('levels/', login_required(views.LevelList.as_view()), name='level_list'), path('level//', login_required(views.LevelDetail.as_view()), name='level_detail'), path('level//user//', login_required(views.LevelDetail.as_view()), name='level_detail'), - path('level//add_requirement/', login_required(views.AddLevelRequirement.as_view()), name='add_requirement'), - path('level/remove_requirement//', login_required(views.RemoveRequirement.as_view()), name='remove_requirement'), + path('level//add_requirement/', is_supervisor()(views.AddLevelRequirement.as_view()), name='add_requirement'), + path('level/remove_requirement//', is_supervisor()(views.RemoveRequirement.as_view()), name='remove_requirement'), - path('trainee//level//confirm', login_required(views.ConfirmLevel.as_view()), name='confirm_level'), + path('trainee//level//confirm', is_supervisor()(views.ConfirmLevel.as_view()), name='confirm_level'), path('trainee//item_record', login_required(views.TraineeItemDetail.as_view()), name='trainee_item_detail'), - path('session_log', has_perm_or_supervisor('training.add_trainingitemqualification')(views.SessionLog.as_view()), name='session_log'), + path('session_log', is_supervisor()(views.SessionLog.as_view()), name='session_log'), ]