Skip to content

Commit c579a07

Browse files
committed
remove orphaned AssetMember V3 API ViewSet, serializer, filter, and permission
The asset_members route was never registered with v2_api (the add_asset_urls() comment confirms it was punted to pro/product_members instead). The AssetMemberViewSet, AssetMemberSerializer, AssetMemberFilterSet, and UserHasAssetMemberPermission classes have lived on as dead code that touches the Product_Member RBAC model. Drop them.
1 parent 70e25ef commit c579a07

4 files changed

Lines changed: 0 additions & 100 deletions

File tree

dojo/asset/api/filters.py

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
from dojo.authorization.models import (
77
Product_Group,
8-
Product_Member,
98
)
109
from dojo.filters import (
1110
CharFieldFilterANDExpression,
@@ -108,14 +107,6 @@ class ApiAssetFilter(DojoFilter):
108107
)
109108

110109

111-
class AssetMemberFilterSet(FilterSet):
112-
asset_id = NumberFilter(field_name="product_id")
113-
114-
class Meta:
115-
model = Product_Member
116-
fields = ("id", "user_id")
117-
118-
119110
class AssetGroupFilterSet(FilterSet):
120111
asset_id = NumberFilter(field_name="product_id")
121112

dojo/asset/api/serializers.py

Lines changed: 0 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
from dojo.authorization.authorization import user_has_permission
66
from dojo.authorization.models import (
77
Product_Group,
8-
Product_Member,
98
)
109
from dojo.models import (
1110
Dojo_User,
@@ -81,49 +80,6 @@ def get_findings_list(self, obj) -> list[int]:
8180
return obj.open_findings_list()
8281

8382

84-
class AssetMemberSerializer(serializers.ModelSerializer):
85-
asset = RelatedAssetField(source="product")
86-
87-
class Meta:
88-
model = Product_Member
89-
exclude = ("product",)
90-
91-
def validate(self, data):
92-
if (
93-
self.instance is not None
94-
and data.get("asset") != self.instance.product
95-
and not user_has_permission(
96-
self.context["request"].user,
97-
data.get("asset"),
98-
"staff_only",
99-
)
100-
):
101-
msg = "You are not permitted to add a member to this Asset"
102-
raise PermissionDenied(msg)
103-
104-
if (
105-
self.instance is None
106-
or data.get("asset") != self.instance.product
107-
or data.get("user") != self.instance.user
108-
):
109-
members = Product_Member.objects.filter(
110-
product=data.get("asset"), user=data.get("user"),
111-
)
112-
if members.count() > 0:
113-
msg = "Asset Member already exists"
114-
raise ValidationError(msg)
115-
116-
if data.get("role").is_owner and not user_has_permission(
117-
self.context["request"].user,
118-
data.get("asset"),
119-
"staff_only",
120-
):
121-
msg = "You are not permitted to add a member as Owner to this Asset"
122-
raise PermissionDenied(msg)
123-
124-
return data
125-
126-
12783
class AssetGroupSerializer(serializers.ModelSerializer):
12884
asset = RelatedAssetField(source="product")
12985

dojo/asset/api/views.py

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,10 @@
1414
ApiAssetFilter,
1515
AssetAPIScanConfigurationFilterSet,
1616
AssetGroupFilterSet,
17-
AssetMemberFilterSet,
1817
)
1918
from dojo.authorization import api_permissions as permissions
2019
from dojo.authorization.models import (
2120
Product_Group,
22-
Product_Member,
2321
)
2422
from dojo.models import (
2523
Product,
@@ -28,7 +26,6 @@
2826
from dojo.product.queries import (
2927
get_authorized_product_api_scan_configurations,
3028
get_authorized_product_groups,
31-
get_authorized_product_members,
3229
get_authorized_products,
3330
)
3431
from dojo.utils import async_delete, get_setting
@@ -129,34 +126,6 @@ def generate_report(self, request, pk=None):
129126
return Response(report.data)
130127

131128

132-
# Authorization: object-based
133-
@extend_schema_view(**schema_with_prefetch())
134-
class AssetMemberViewSet(
135-
PrefetchDojoModelViewSet,
136-
):
137-
serializer_class = serializers.AssetMemberSerializer
138-
queryset = Product_Member.objects.none()
139-
filter_backends = (DjangoFilterBackend,)
140-
filterset_class = AssetMemberFilterSet
141-
permission_classes = (
142-
IsAuthenticated,
143-
permissions.UserHasAssetMemberPermission,
144-
)
145-
146-
def get_queryset(self):
147-
return get_authorized_product_members(
148-
"view",
149-
).distinct()
150-
151-
@extend_schema(
152-
exclude=True,
153-
)
154-
def partial_update(self, request, pk=None):
155-
# Object authorization won't work if not all data is provided
156-
response = {"message": "Patch function is not offered in this path."}
157-
return Response(response, status=status.HTTP_405_METHOD_NOT_ALLOWED)
158-
159-
160129
# Authorization: object-based
161130
@extend_schema_view(**schema_with_prefetch())
162131
class AssetGroupViewSet(

dojo/authorization/api_permissions.py

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -535,22 +535,6 @@ def has_object_permission(self, request, view, obj):
535535
)
536536

537537

538-
class UserHasAssetMemberPermission(permissions.BasePermission):
539-
def has_permission(self, request, view):
540-
return check_post_permission(
541-
request, Product, "asset", "staff_only",
542-
)
543-
544-
def has_object_permission(self, request, view, obj):
545-
return check_object_permission(
546-
request,
547-
obj,
548-
"view",
549-
"staff_only",
550-
"delete",
551-
)
552-
553-
554538
class UserHasAssetGroupPermission(permissions.BasePermission):
555539
def has_permission(self, request, view):
556540
return check_post_permission(

0 commit comments

Comments
 (0)