mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-07-23 22:49:50 +03:00
Update decorators.py
This commit is contained in:
parent
4abfa28e08
commit
c5e6a6093f
|
@ -107,9 +107,30 @@ def throttle_classes(throttle_classes):
|
||||||
|
|
||||||
|
|
||||||
def permission_classes(permission_classes):
|
def permission_classes(permission_classes):
|
||||||
|
def decorator(obj):
|
||||||
|
obj.permission_classes = permission_classes
|
||||||
|
return obj
|
||||||
|
return decorator
|
||||||
|
|
||||||
|
|
||||||
|
def extra_permissions(permission_classes):
|
||||||
|
"""Decorate a CBV method to add specific permissions on the instance."""
|
||||||
def decorator(func):
|
def decorator(func):
|
||||||
func.permission_classes = permission_classes
|
def decorated_func(self, *args, **kwargs):
|
||||||
return func
|
for permission_class in permission_classes:
|
||||||
|
# Check the extra view level permissions.
|
||||||
|
permission = permission_class()
|
||||||
|
if not permission.has_permission(self.request, self):
|
||||||
|
self.permission_denied(
|
||||||
|
self.request,
|
||||||
|
message=getattr(permission, "message", None),
|
||||||
|
code=getattr(permission, "code", None)
|
||||||
|
)
|
||||||
|
# Add them to permission classes for obj level checks.
|
||||||
|
# Reassignment is for global tests as they call the same CBV intances.
|
||||||
|
self.permission_classes = self.permission_classes + [permission_class]
|
||||||
|
return func(self, *args, **kwargs)
|
||||||
|
return decorated_func
|
||||||
return decorator
|
return decorator
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user