| 116 | self.get_project_from_object_callable = get_project_from_object_callable |
| 117 | |
| 118 | def has_permission(self, request, view): # type: ignore[no-untyped-def] |
| 119 | if not super().has_permission(request, view): |
| 120 | return False |
| 121 | |
| 122 | try: |
| 123 | pk = view.kwargs.get("project_pk") |
| 124 | project = Project.objects.get(pk=pk) |
| 125 | except Project.DoesNotExist: |
| 126 | return False |
| 127 | |
| 128 | if view.action in self.action_permission_map: |
| 129 | return request.user.has_project_permission( |
| 130 | self.action_permission_map[view.action], project |
| 131 | ) |
| 132 | |
| 133 | if view.action == "create": |
| 134 | return request.user.is_project_admin(project) |
| 135 | |
| 136 | return view.detail |
| 137 | |
| 138 | def has_object_permission(self, request, view, obj): # type: ignore[no-untyped-def] |
| 139 | if view.action in self.action_permission_map: |