1717from jobserver .actions import project_members as members
1818from jobserver .actions import projects
1919from jobserver .auditing .presenters .lookup import get_presenter
20- from jobserver .authorization import StaffAreaAdministrator
21- from jobserver .authorization .decorators import require_role
20+ from jobserver .authorization . decorators import require_permission
21+ from jobserver .authorization .permissions import staff_area_access
2222from jobserver .authorization .utils import roles_for
2323from jobserver .models import AuditableEvent , Org , Project , ProjectMembership , User
2424
3232from .qwargs_tools import qwargs
3333
3434
35- @method_decorator (require_role ( StaffAreaAdministrator ), name = "dispatch" )
35+ @method_decorator (require_permission ( staff_area_access ), name = "dispatch" )
3636class ProjectAddMember (FormView ):
3737 form_class = ProjectAddMemberForm
3838 template_name = "staff/project/membership_create.html"
@@ -72,7 +72,7 @@ def get_initial(self):
7272 }
7373
7474
75- @method_decorator (require_role ( StaffAreaAdministrator ), name = "dispatch" )
75+ @method_decorator (require_permission ( staff_area_access ), name = "dispatch" )
7676class ProjectAuditLog (ListView ):
7777 paginate_by = 25
7878 template_name = "staff/project/audit_log.html"
@@ -109,7 +109,7 @@ def get_queryset(self):
109109 return qs .distinct ()
110110
111111
112- @method_decorator (require_role ( StaffAreaAdministrator ), name = "dispatch" )
112+ @method_decorator (require_permission ( staff_area_access ), name = "dispatch" )
113113class ProjectDetail (DetailView ):
114114 model = Project
115115 template_name = "staff/project/detail.html"
@@ -129,7 +129,7 @@ def get_context_data(self, **kwargs):
129129 }
130130
131131
132- @method_decorator (require_role ( StaffAreaAdministrator ), name = "dispatch" )
132+ @method_decorator (require_permission ( staff_area_access ), name = "dispatch" )
133133class ProjectEdit (UpdateView ):
134134 form_class = ProjectEditForm
135135 model = Project
@@ -142,7 +142,7 @@ def form_valid(self, form):
142142 return redirect (new .get_staff_url ())
143143
144144
145- @method_decorator (require_role ( StaffAreaAdministrator ), name = "dispatch" )
145+ @method_decorator (require_permission ( staff_area_access ), name = "dispatch" )
146146class ProjectLinkApplication (UpdateView ):
147147 form_class = ProjectLinkApplicationForm
148148 model = Project
@@ -175,7 +175,7 @@ def get_context_data(self, **kwargs):
175175 }
176176
177177
178- @method_decorator (require_role ( StaffAreaAdministrator ), name = "dispatch" )
178+ @method_decorator (require_permission ( staff_area_access ), name = "dispatch" )
179179class ProjectList (ListView ):
180180 queryset = Project .objects .order_by ("-number" , Lower ("name" ))
181181 paginate_by = 25
@@ -203,7 +203,7 @@ def get_queryset(self):
203203 return qs .distinct ()
204204
205205
206- @method_decorator (require_role ( StaffAreaAdministrator ), name = "dispatch" )
206+ @method_decorator (require_permission ( staff_area_access ), name = "dispatch" )
207207class ProjectMembershipEdit (UpdateView ):
208208 context_object_name = "membership"
209209 form_class = ProjectMembershipForm
@@ -244,7 +244,7 @@ def get_object(self):
244244 )
245245
246246
247- @method_decorator (require_role ( StaffAreaAdministrator ), name = "dispatch" )
247+ @method_decorator (require_permission ( staff_area_access ), name = "dispatch" )
248248class ProjectMembershipRemove (View ):
249249 def post (self , request , * args , ** kwargs ):
250250 membership = get_object_or_404 (
0 commit comments