paperless-ngx/src/documents/permissions.py

34 lines
1.2 KiB
Python
Raw Normal View History

2022-11-24 14:26:32 -08:00
from rest_framework.permissions import BasePermission
2022-12-05 22:56:03 -08:00
from rest_framework.permissions import DjangoObjectPermissions
2022-12-05 22:56:03 -08:00
class PaperlessObjectPermissions(DjangoObjectPermissions):
"""
A permissions backend that checks for object-level permissions
or for ownership.
"""
perms_map = {
"GET": ["%(app_label)s.view_%(model_name)s"],
2022-12-05 22:56:03 -08:00
"OPTIONS": ["%(app_label)s.view_%(model_name)s"],
"HEAD": ["%(app_label)s.view_%(model_name)s"],
"POST": ["%(app_label)s.add_%(model_name)s"],
"PUT": ["%(app_label)s.change_%(model_name)s"],
"PATCH": ["%(app_label)s.change_%(model_name)s"],
"DELETE": ["%(app_label)s.delete_%(model_name)s"],
}
2022-11-24 14:26:32 -08:00
2022-12-05 22:56:03 -08:00
def has_object_permission(self, request, view, obj):
2022-12-06 20:14:33 -08:00
if hasattr(obj, "owner") and obj.owner is not None:
if request.user == obj.owner:
return True
else:
return super().has_object_permission(request, view, obj)
2022-12-05 22:56:03 -08:00
else:
2022-12-06 20:14:33 -08:00
return True # no owner
2022-12-05 22:56:03 -08:00
2022-11-24 14:26:32 -08:00
class PaperlessAdminPermissions(BasePermission):
def has_permission(self, request, view):
return request.user.has_perm("admin.view_logentry")