АРХ - МЕЖПРОЕКТНАЯ КОММУНИКАЦИЯ: managedBy split Operational Core

This commit is contained in:
DCCONSTRUCTIONS
2026-05-09 12:49:09 +03:00
parent ca9fd34e91
commit 11c8c6fb1b
11 changed files with 227 additions and 16 deletions
@@ -9,6 +9,10 @@ from django.db.models import Min
# Module imports
from .base import BaseViewSet, BaseAPIView
from plane.authentication.nodedc_workspace_policy import (
is_nodedc_launcher_managed_workspace,
nodedc_launcher_managed_workspace_response,
)
from plane.app.serializers import (
ProjectMemberSerializer,
ProjectMemberAdminSerializer,
@@ -45,6 +49,9 @@ class ProjectMemberViewSet(BaseViewSet):
@allow_permission([ROLE.ADMIN])
def create(self, request, slug, project_id):
if is_nodedc_launcher_managed_workspace(request.user, slug):
return Response(nodedc_launcher_managed_workspace_response(), status=status.HTTP_403_FORBIDDEN)
# Get the list of members to be added to the project and their roles i.e. the user_id and the role
members = request.data.get("members", [])
@@ -204,6 +211,9 @@ class ProjectMemberViewSet(BaseViewSet):
@allow_permission([ROLE.ADMIN, ROLE.MEMBER, ROLE.GUEST])
def partial_update(self, request, slug, project_id, pk):
if is_nodedc_launcher_managed_workspace(request.user, slug):
return Response(nodedc_launcher_managed_workspace_response(), status=status.HTTP_403_FORBIDDEN)
project_member = ProjectMember.objects.get(pk=pk, workspace__slug=slug, project_id=project_id, is_active=True)
# Fetch the workspace role of the project member
@@ -266,6 +276,9 @@ class ProjectMemberViewSet(BaseViewSet):
@allow_permission([ROLE.ADMIN])
def destroy(self, request, slug, project_id, pk):
if is_nodedc_launcher_managed_workspace(request.user, slug):
return Response(nodedc_launcher_managed_workspace_response(), status=status.HTTP_403_FORBIDDEN)
project_member = ProjectMember.objects.get(
workspace__slug=slug,
project_id=project_id,
@@ -300,6 +313,9 @@ class ProjectMemberViewSet(BaseViewSet):
@allow_permission([ROLE.ADMIN, ROLE.MEMBER, ROLE.GUEST])
def leave(self, request, slug, project_id):
if is_nodedc_launcher_managed_workspace(request.user, slug):
return Response(nodedc_launcher_managed_workspace_response(), status=status.HTTP_403_FORBIDDEN)
project_member = ProjectMember.objects.get(
workspace__slug=slug,
project_id=project_id,