@@ -40,24 +40,28 @@ class ProjectViewSet(viewsets.ModelViewSet):
4040 permission_classes = [IsAuthenticated ] # Default for list and create
4141
4242 def get_permissions (self ):
43- if self .action == 'retrieve' :
44- # For retrieve, user must be at least a viewer
45- return [IsAuthenticated (), IsProjectViewerOrHigher ()]
46- elif self .action in ['update' , 'partial_update' , 'destroy' ]:
47- # For modifications, user must be a manager or owner
48- return [IsAuthenticated (), IsProjectManager ()]
49- # For list, create, and other actions, IsAuthenticated is sufficient
50- # as get_queryset and perform_create handle specifics.
43+ """
44+ Instantiates and returns the list of permissions that this view requires.
45+ Owners/Managers can do anything. Developers can read. Authenticated users can list/create.
46+ """
47+ if self .action in ['list' , 'create' ]:
48+ self .permission_classes = [permissions .IsAuthenticated ] # Any authenticated user can list or create projects
49+ elif self .action in ['retrieve' , 'update' , 'partial_update' , 'destroy' ]:
50+ # For specific project instances, check if user is owner or manager
51+ self .permission_classes = [permissions .IsAuthenticated , IsProjectOwner ]
52+ else :
53+ # Default to deny all for any other actions
54+ self .permission_classes = [permissions .DenyAll ]
5155 return super ().get_permissions ()
5256
5357 def perform_create (self , serializer ):
54- project = serializer . save ( owner = self . request . user )
55- # Automatically make the creator a 'manager' of the project
56- ProjectMembership . objects . create (
57- user = self .request .user ,
58- project = project ,
59- role = ProjectMembership . Role . MANAGER
60- )
58+ """Ensure the user creating the project is set as its owner."""
59+ project = serializer . save ( owner = self . request . user ) # Pass owner directly
60+ # Create a ProjectMembership for the creator as 'owner'
61+ ProjectMembership . objects . create ( user = self .request .user , project = project , role = 'owner' )
62+ # The direct owner field on the project model is now set by serializer.save()
63+ # project.owner = self.request.user # This line is no longer strictly needed if owner is passed in save
64+ # project.save() # And this save is also not needed as the first save includes the owner
6165
6266 def get_queryset (self ):
6367 user = self .request .user
0 commit comments