@@ -278,40 +278,55 @@ def has_object_permission(self, request, view, obj):
278278 )
279279
280280
281- class UserHasEngagementPermission (permissions .BasePermission ):
282- # Permission checks for related objects (like notes or metadata) can be moved
283- # into a seperate class, when the legacy authorization will be removed.
284- path_engagement_post = re .compile (r"^/api/v2/engagements/$" )
285- path_engagement = re .compile (r"^/api/v2/engagements/\d+/$" )
281+ class BaseRelatedObjectPermission (permissions .BasePermission ):
282+
283+ """
284+ An "abstract" base class for related object permissions (like notes, metadata, etc.)
285+ that only need object permissions, not general permissions. This class will serve as
286+ the base class for other more aptly named permission classes.
287+ """
288+
289+ permission_map = {
290+ "get_permission" : None ,
291+ "put_permission" : None ,
292+ "delete_permission" : None ,
293+ "post_permission" : None ,
294+ }
286295
287296 def has_permission (self , request , view ):
288- if UserHasEngagementPermission .path_engagement_post .match (
289- request .path ,
290- ) or UserHasEngagementPermission .path_engagement .match (request .path ):
291- return check_post_permission (
292- request , Product , "product" , Permissions .Engagement_Add ,
293- )
294297 # related object only need object permission
295298 return True
296299
297300 def has_object_permission (self , request , view , obj ):
298- if UserHasEngagementPermission .path_engagement_post .match (
299- request .path ,
300- ) or UserHasEngagementPermission .path_engagement .match (request .path ):
301- return check_object_permission (
302- request ,
303- obj ,
304- Permissions .Engagement_View ,
305- Permissions .Engagement_Edit ,
306- Permissions .Engagement_Delete ,
301+ return check_object_permission (
302+ request ,
303+ obj ,
304+ ** self .permission_map ,
305+ )
306+
307+
308+ class UserHasEngagementRelatedObjectPermission (BaseRelatedObjectPermission ):
309+ permission_map = {
310+ "get_permission" : Permissions .Engagement_View ,
311+ "put_permission" : Permissions .Engagement_Edit ,
312+ "delete_permission" : Permissions .Engagement_Edit ,
313+ "post_permission" : Permissions .Engagement_Edit ,
314+ }
315+
316+
317+ class UserHasEngagementPermission (permissions .BasePermission ):
318+ def has_permission (self , request , view ):
319+ return check_post_permission (
320+ request , Product , "product" , Permissions .Engagement_Add ,
307321 )
322+
323+ def has_object_permission (self , request , view , obj ):
308324 return check_object_permission (
309325 request ,
310326 obj ,
311327 Permissions .Engagement_View ,
312328 Permissions .Engagement_Edit ,
313- Permissions .Engagement_Edit ,
314- Permissions .Engagement_Edit ,
329+ Permissions .Engagement_Delete ,
315330 )
316331
317332
0 commit comments