felicity-lims/felicity/api/gql/permissions.py

104 lines
2.4 KiB
Python
Raw Normal View History

import logging
from strawberry.permission import BasePermission
2023-03-19 23:21:32 +08:00
from ...apps.analysis.permissions import (
check_result_verification,
check_sample_verification,
)
from . import auth_from_info
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
class IsAuthenticated(BasePermission):
message = "You mst be authenticated"
async def has_permission(self, source, info, **kwargs):
is_authenticated, _ = await auth_from_info(info)
return is_authenticated
class IsActiveUser(BasePermission):
message = "You must be an active user"
async def has_permission(self, source, info, **kwargs):
is_authenticated, user = await auth_from_info(info)
if not is_authenticated:
return False
return user.is_active
class IsSuperUser(BasePermission):
message = "You dont have enough privileges"
async def has_permission(self, source, info, **kwargs):
is_authenticated, user = await auth_from_info(info)
if not is_authenticated:
return False
if not user.is_active:
return False
return user.is_superuser
class CanVerifySample(BasePermission):
message = "Action not allowed"
async def has_permission(self, source, info, **kwargs):
is_authenticated, user = await auth_from_info(info)
if not is_authenticated:
return False
if not user.is_active:
return False
2022-11-06 20:09:44 +08:00
try:
2022-11-06 20:09:44 +08:00
samples = kwargs.get("samples", [])
except KeyError:
samples = []
2022-11-06 20:09:44 +08:00
_, restricted, message, suggestion = await check_sample_verification(
samples, user
)
if restricted:
2022-11-06 20:09:44 +08:00
self.message = message + " " + suggestion
return False
return True
class CanVerifyAnalysisResult(BasePermission):
message = "Action not allowed"
async def has_permission(self, source, info, **kwargs):
is_authenticated, user = await auth_from_info(info)
if not is_authenticated:
return False
if not user.is_active:
return False
2022-11-06 20:09:44 +08:00
try:
2022-11-06 20:09:44 +08:00
analyses = kwargs.get("analyses", [])
except KeyError:
analyses = []
2022-11-06 20:09:44 +08:00
_, restricted, message, suggestion = await check_result_verification(
analyses, user
)
if restricted:
2022-11-06 20:09:44 +08:00
self.message = message + " " + suggestion
return False
return True