mirror of
https://github.com/Dispatcharr/Dispatcharr.git
synced 2026-01-23 02:35:14 +00:00
56 lines
1.5 KiB
Python
56 lines
1.5 KiB
Python
from rest_framework.permissions import IsAuthenticated
|
|
from .models import User
|
|
from dispatcharr.utils import network_access_allowed
|
|
|
|
|
|
class Authenticated(IsAuthenticated):
|
|
def has_permission(self, request, view):
|
|
is_authenticated = super().has_permission(request, view)
|
|
network_allowed = network_access_allowed(request, "UI")
|
|
|
|
return is_authenticated and network_allowed
|
|
|
|
|
|
class IsStandardUser(Authenticated):
|
|
def has_permission(self, request, view):
|
|
if not super().has_permission(request, view):
|
|
return False
|
|
|
|
return request.user and request.user.user_level >= User.UserLevel.STANDARD
|
|
|
|
|
|
class IsAdmin(Authenticated):
|
|
def has_permission(self, request, view):
|
|
if not super().has_permission(request, view):
|
|
return False
|
|
|
|
return request.user.user_level >= 10
|
|
|
|
|
|
class IsOwnerOfObject(Authenticated):
|
|
def has_object_permission(self, request, view, obj):
|
|
if not super().has_permission(request, view):
|
|
return False
|
|
|
|
is_admin = IsAdmin().has_permission(request, view)
|
|
is_owner = request.user in obj.users.all()
|
|
|
|
return is_admin or is_owner
|
|
|
|
|
|
permission_classes_by_action = {
|
|
"list": [IsStandardUser],
|
|
"create": [IsAdmin],
|
|
"retrieve": [IsStandardUser],
|
|
"update": [IsAdmin],
|
|
"partial_update": [IsAdmin],
|
|
"destroy": [IsAdmin],
|
|
}
|
|
|
|
permission_classes_by_method = {
|
|
"GET": [IsStandardUser],
|
|
"POST": [IsAdmin],
|
|
"PATCH": [IsAdmin],
|
|
"PUT": [IsAdmin],
|
|
"DELETE": [IsAdmin],
|
|
}
|