ФУНКЦИИ - МЕЖПРОЕКТНАЯ КОММУНИКАЦИЯ: backend enforcement workspace policy

This commit is contained in:
DCCONSTRUCTIONS
2026-05-06 09:38:14 +03:00
parent 9fa05d60b6
commit e009915e34
6 changed files with 116 additions and 0 deletions
@@ -7,6 +7,7 @@ from django.urls import path
from plane.app.views import (
UserWorkspaceInvitationsViewSet,
NodeDCWorkspaceCreationPolicyEndpoint,
WorkSpaceViewSet,
WorkspaceJoinEndpoint,
WorkSpaceMemberViewSet,
@@ -49,6 +50,11 @@ urlpatterns = [
WorkSpaceAvailabilityCheckEndpoint.as_view(),
name="workspace-availability",
),
path(
"nodedc/workspace-policy/",
NodeDCWorkspaceCreationPolicyEndpoint.as_view(),
name="nodedc-workspace-policy",
),
path(
"workspaces/",
WorkSpaceViewSet.as_view({"get": "list", "post": "create"}),
@@ -37,6 +37,7 @@ from .base import BaseAPIView, BaseViewSet
from .workspace.base import (
WorkSpaceViewSet,
UserWorkSpacesEndpoint,
NodeDCWorkspaceCreationPolicyEndpoint,
WorkSpaceAvailabilityCheckEndpoint,
UserWorkspaceDashboardEndpoint,
WorkspaceThemeViewSet,
@@ -34,6 +34,7 @@ from plane.app.permissions import (
# Module imports
from plane.app.serializers import WorkSpaceSerializer, WorkspaceThemeSerializer
from plane.app.views.base import BaseAPIView, BaseViewSet
from plane.authentication.nodedc_workspace_policy import get_nodedc_workspace_creation_policy
from plane.db.models import (
Issue,
IssueActivity,
@@ -83,6 +84,17 @@ class WorkSpaceViewSet(BaseViewSet):
def create(self, request):
try:
workspace_policy = get_nodedc_workspace_creation_policy(request.user)
if not workspace_policy["can_create_workspace"]:
return Response(
{
"error": "nodedc_workspace_creation_denied",
"reason": workspace_policy["reason"],
"workspace_policy": workspace_policy,
},
status=status.HTTP_403_FORBIDDEN,
)
(DISABLE_WORKSPACE_CREATION,) = get_configuration_value(
[
{
@@ -243,6 +255,11 @@ class UserWorkSpacesEndpoint(BaseAPIView):
return Response(workspaces, status=status.HTTP_200_OK)
class NodeDCWorkspaceCreationPolicyEndpoint(BaseAPIView):
def get(self, request):
return Response(get_nodedc_workspace_creation_policy(request.user), status=status.HTTP_200_OK)
class WorkSpaceAvailabilityCheckEndpoint(BaseAPIView):
def get(self, request):
slug = request.GET.get("slug", False)