SECURITY - МЕЖПРОЕКТНАЯ КОММУНИКАЦИЯ: ограничение создания проектов
This commit is contained in:
@@ -11,6 +11,10 @@ from django.db.models import Min
|
||||
from .base import BaseViewSet, BaseAPIView
|
||||
from plane.app.realtime.issue_events import publish_assignee_cleanup_issue_events_on_commit
|
||||
from plane.app.realtime.nodedc_events import publish_nodedc_workspace_event_on_commit
|
||||
from plane.authentication.nodedc_project_memberships import (
|
||||
ensure_project_admin_membership,
|
||||
ensure_workspace_admin_project_memberships,
|
||||
)
|
||||
from plane.authentication.nodedc_workspace_policy import (
|
||||
is_nodedc_launcher_managed_workspace,
|
||||
nodedc_launcher_managed_workspace_response,
|
||||
@@ -431,12 +435,32 @@ class ProjectMemberViewSet(BaseViewSet):
|
||||
|
||||
class ProjectMemberUserEndpoint(BaseAPIView):
|
||||
def get(self, request, slug, project_id):
|
||||
project_member = ProjectMember.objects.get(
|
||||
project_member = ProjectMember.objects.filter(
|
||||
project_id=project_id,
|
||||
workspace__slug=slug,
|
||||
member=request.user,
|
||||
is_active=True,
|
||||
)
|
||||
).first()
|
||||
|
||||
if project_member is None:
|
||||
project = Project.objects.filter(pk=project_id, workspace__slug=slug).select_related("workspace").first()
|
||||
is_workspace_admin = WorkspaceMember.objects.filter(
|
||||
workspace__slug=slug,
|
||||
member=request.user,
|
||||
is_active=True,
|
||||
role=ROLE.ADMIN.value,
|
||||
).exists()
|
||||
if project is not None and is_workspace_admin:
|
||||
ensure_project_admin_membership(project, request.user)
|
||||
project_member = ProjectMember.objects.filter(
|
||||
project=project,
|
||||
member=request.user,
|
||||
is_active=True,
|
||||
).first()
|
||||
|
||||
if project_member is None:
|
||||
return Response({"error": "Project member not found"}, status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
serializer = ProjectMemberSerializer(project_member)
|
||||
|
||||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||||
@@ -447,6 +471,19 @@ class UserProjectRolesEndpoint(BaseAPIView):
|
||||
use_read_replica = True
|
||||
|
||||
def get(self, request, slug):
|
||||
workspace_member = (
|
||||
WorkspaceMember.objects.filter(
|
||||
workspace__slug=slug,
|
||||
member=request.user,
|
||||
is_active=True,
|
||||
)
|
||||
.select_related("workspace")
|
||||
.first()
|
||||
)
|
||||
|
||||
if workspace_member is not None and workspace_member.role == ROLE.ADMIN.value:
|
||||
ensure_workspace_admin_project_memberships(workspace_member.workspace)
|
||||
|
||||
project_members = ProjectMember.objects.filter(
|
||||
workspace__slug=slug,
|
||||
member_id=request.user.id,
|
||||
|
||||
Reference in New Issue
Block a user