@@ -1212,3 +1212,6 @@ msgstr "Срок действия токена доступа истек" msgid "Token prefix is missing" msgstr "Отсутствует префикс токена" + +msgid "Model data cannot be retrieved" +msgstr "Невозможно получить данные модели" @@ -67,6 +67,18 @@ class NeuronModelSelector: return NeuronModelsSerializer(models, many=True) return models + def get_model_accessible_status(self, model: NeuronModel) -> bool: + user_type = self.user.account_type + if user_type == 'business_account': + return model.title in self.user.business_account.parent_company.allowed_models + else: + if user_type in ( + 'business_security', + 'business_admin', + ): + self.user.payment_plan.plan = self.user.business_account.parent_company.user.payment_plan.plan + return model in self.user.payment_plan.plan.accessed_models.all() + def get_model_by_id(self, id: UUID, hidden: bool = False, **kwargs) -> NeuronModel: model = NeuronModel.objects.prefetch_related( Prefetch( @@ -1,4 +1,7 @@ +from django.utils.translation import gettext_lazy as _ + from drf_spectacular.utils import OpenApiParameter, extend_schema + from rest_framework import status from rest_framework.permissions import AllowAny from rest_framework.response import Response @@ -54,8 +57,10 @@ class NeuronModelAPIView(APIView): ) def get(self, request, slug: str, *args, **kwargs): """Retrieve model by slug""" + selector = NeuronModelSelector(request.user) + model = selector.get_model_by_slug(slug=slug, hidden=False) + if not selector.get_model_accessible_status(model): + return Response({'detail': _('Model data cannot be retrieved')}, status=status.HTTP_403_FORBIDDEN) return Response( - NeuronModelSerializer( - NeuronModelSelector(request.user).get_model_by_slug(slug=slug, hidden=False) - ).data + NeuronModelSerializer(model).data )