update: custom permissions for nested_field

This commit is contained in:
Jean-Baptiste Pasquier 2019-08-23 14:56:03 +02:00
parent 6b9e8162a0
commit 7f87f83b80
No known key found for this signature in database
GPG Key ID: F2702E6D22ED4D62
2 changed files with 40 additions and 0 deletions

View File

@ -16,6 +16,7 @@ from djangoldp.fields import LDPUrlField
from djangoldp.models import Model
from django.template import loader
from .permissions import InboxPermissions
class Notification(Model):
@ -30,6 +31,7 @@ class Notification(Model):
class Meta(Model.Meta):
owner_field = 'user'
ordering = ['-date']
permission_classes = [InboxPermissions]
anonymous_perms = ['add']
authenticated_perms = ['inherit']
owner_perms = ['view', 'change', 'control']

View File

@ -0,0 +1,38 @@
from djangoldp.permissions import LDPPermissions
class InboxPermissions(LDPPermissions):
def has_permission(self, request, view):
from djangoldp.models import Model
if self.is_a_container(request._request.path):
try:
"""
If on nested field we use users permissions
"""
obj = Model.resolve_parent(request.path)
model = view.parent_model
"""
If still on nested field and request is post (/users/X/inbox/) we use notification permissions
"""
if view.parent_model != view.model and request.method == 'POST':
obj = None
model = view.model
except:
"""
Not on nested field we use notification permissions
"""
obj = None
model = view.model
else:
obj = Model.resolve_id(request._request.path)
model = view.model
perms = self.get_permissions(request.method, model)
for perm in perms:
if not perm.split('.')[1].split('_')[0] in self.user_permissions(request.user, model, obj):
return False
return True