update: custom permissions for nested_field
This commit is contained in:
parent
6b9e8162a0
commit
7f87f83b80
djangoldp_notification
@ -16,6 +16,7 @@ from djangoldp.fields import LDPUrlField
|
|||||||
from djangoldp.models import Model
|
from djangoldp.models import Model
|
||||||
|
|
||||||
from django.template import loader
|
from django.template import loader
|
||||||
|
from .permissions import InboxPermissions
|
||||||
|
|
||||||
|
|
||||||
class Notification(Model):
|
class Notification(Model):
|
||||||
@ -30,6 +31,7 @@ class Notification(Model):
|
|||||||
class Meta(Model.Meta):
|
class Meta(Model.Meta):
|
||||||
owner_field = 'user'
|
owner_field = 'user'
|
||||||
ordering = ['-date']
|
ordering = ['-date']
|
||||||
|
permission_classes = [InboxPermissions]
|
||||||
anonymous_perms = ['add']
|
anonymous_perms = ['add']
|
||||||
authenticated_perms = ['inherit']
|
authenticated_perms = ['inherit']
|
||||||
owner_perms = ['view', 'change', 'control']
|
owner_perms = ['view', 'change', 'control']
|
||||||
|
38
djangoldp_notification/permissions.py
Normal file
38
djangoldp_notification/permissions.py
Normal 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
|
Loading…
Reference in New Issue
Block a user