f56b088643
Base Image Build / prepare (push) Has been cancelled
Build and Push Multi-Arch Docker Image / build-and-push (push) Has been cancelled
Frontend Tests / test (push) Has been cancelled
Base Image Build / docker (amd64, ubuntu-24.04) (push) Has been cancelled
Base Image Build / docker (arm64, ubuntu-24.04-arm) (push) Has been cancelled
Base Image Build / create-manifest (push) Has been cancelled
57 lines
1.5 KiB
Python
57 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],
|
|
}
|