1111from rest_framework .response import Response
1212from rest_framework .viewsets import GenericViewSet
1313
14- from ..models import NetworkSession , TableSession
14+ from ..models import NetworkSession , TableSession , Workspace , WorkspaceRoleChoice
15+ from ..auth .decorators import require_workspace_permission
1516from .serializers import NetworkSessionSerializer , TableSessionSerializer
1617from .common import WorkspaceChildMixin
1718
@@ -38,11 +39,19 @@ class SessionStatePatchSerializer(serializers.Serializer):
3839class SessionViewSet (
3940 CreateModelMixin , RetrieveModelMixin , DestroyModelMixin , ListModelMixin , GenericViewSet
4041):
42+ swagger_tags = ['sessions' ]
43+
4144 @swagger_auto_schema (request_body = SessionStatePatchSerializer )
4245 @action (detail = True , methods = ['patch' ])
43- def state (self , request , pk = None ):
46+ @require_workspace_permission (WorkspaceRoleChoice .WRITER )
47+ def state (self , request , parent_lookup_workspace__name : str , pk = None ):
4448 session = self .get_object ()
4549
50+ workspace : Workspace = get_object_or_404 (Workspace , name = parent_lookup_workspace__name )
51+ session_ws = session .table .workspace if hasattr (session , 'table' ) else session .network .workspace
52+ if workspace .id != session_ws :
53+ raise Http404
54+
4655 serializer = SessionStatePatchSerializer (data = request .data )
4756 serializer .is_valid (raise_exception = True )
4857 data = serializer .validated_data ['state' ]
0 commit comments