|
5 | 5 | from dojo.importers.reimporter.utils import get_target_engagement_if_exists, get_target_product_by_id_if_exists, \ |
6 | 6 | get_target_product_if_exists, get_target_test_if_exists, \ |
7 | 7 | get_target_product_type_if_exists |
8 | | -from dojo.models import Endpoint, Engagement, Finding, Product_Type, Product, Test, Dojo_Group |
| 8 | +from dojo.models import Endpoint, Engagement, Finding, Finding_Group, Product_Type, Product, Test, Dojo_Group |
9 | 9 | from django.shortcuts import get_object_or_404 |
10 | 10 | from rest_framework import permissions, serializers |
11 | 11 | from dojo.authorization.authorization import user_has_global_permission, user_has_permission, user_has_configuration_permission |
@@ -109,6 +109,14 @@ def has_object_permission(self, request, view, obj): |
109 | 109 | return has_permission_result |
110 | 110 |
|
111 | 111 |
|
| 112 | +class UserHasToolProductSettingsPermission(permissions.BasePermission): |
| 113 | + def has_permission(self, request, view): |
| 114 | + return check_post_permission(request, Product, 'product', Permissions.Product_Edit) |
| 115 | + |
| 116 | + def has_object_permission(self, request, view, obj): |
| 117 | + return check_object_permission(request, obj.product, Permissions.Product_View, Permissions.Product_Edit, Permissions.Product_Edit) |
| 118 | + |
| 119 | + |
112 | 120 | class UserHasEndpointPermission(permissions.BasePermission): |
113 | 121 | def has_permission(self, request, view): |
114 | 122 | return check_post_permission(request, Product, 'product', Permissions.Endpoint_Add) |
@@ -347,6 +355,77 @@ def has_object_permission(self, request, view, obj): |
347 | 355 | return check_object_permission(request, obj, Permissions.Product_API_Scan_Configuration_View, Permissions.Product_API_Scan_Configuration_Edit, Permissions.Product_API_Scan_Configuration_Delete) |
348 | 356 |
|
349 | 357 |
|
| 358 | +class UserHasJiraProductPermission(permissions.BasePermission): |
| 359 | + def has_permission(self, request, view): |
| 360 | + if request.method == 'POST': |
| 361 | + has_permission_result = True |
| 362 | + engagement_id = request.data.get('engagement', None) |
| 363 | + if engagement_id: |
| 364 | + object = get_object_or_404(Engagement, pk=engagement_id) |
| 365 | + has_permission_result = has_permission_result and \ |
| 366 | + user_has_permission(request.user, object, Permissions.Engagement_Edit) |
| 367 | + product_id = request.data.get('product', None) |
| 368 | + if product_id: |
| 369 | + object = get_object_or_404(Product, pk=product_id) |
| 370 | + has_permission_result = has_permission_result and \ |
| 371 | + user_has_permission(request.user, object, Permissions.Product_Edit) |
| 372 | + return has_permission_result |
| 373 | + else: |
| 374 | + return True |
| 375 | + |
| 376 | + def has_object_permission(self, request, view, obj): |
| 377 | + has_permission_result = True |
| 378 | + engagement = obj.engagement |
| 379 | + if engagement: |
| 380 | + has_permission_result = has_permission_result and \ |
| 381 | + check_object_permission(request, engagement, Permissions.Engagement_View, Permissions.Engagement_Edit, Permissions.Engagement_Edit) |
| 382 | + product = obj.product |
| 383 | + if product: |
| 384 | + has_permission_result = has_permission_result and \ |
| 385 | + check_object_permission(request, product, Permissions.Product_View, Permissions.Product_Edit, Permissions.Product_Edit) |
| 386 | + return has_permission_result |
| 387 | + |
| 388 | + |
| 389 | +class UserHasJiraIssuePermission(permissions.BasePermission): |
| 390 | + def has_permission(self, request, view): |
| 391 | + if request.method == 'POST': |
| 392 | + has_permission_result = True |
| 393 | + engagement_id = request.data.get('engagement', None) |
| 394 | + if engagement_id: |
| 395 | + object = get_object_or_404(Engagement, pk=engagement_id) |
| 396 | + has_permission_result = has_permission_result and \ |
| 397 | + user_has_permission(request.user, object, Permissions.Engagement_Edit) |
| 398 | + finding_id = request.data.get('finding', None) |
| 399 | + if finding_id: |
| 400 | + object = get_object_or_404(Finding, pk=finding_id) |
| 401 | + has_permission_result = has_permission_result and \ |
| 402 | + user_has_permission(request.user, object, Permissions.Finding_Edit) |
| 403 | + finding_group_id = request.data.get('finding_group', None) |
| 404 | + if finding_group_id: |
| 405 | + object = get_object_or_404(Finding_Group, pk=finding_group_id) |
| 406 | + has_permission_result = has_permission_result and \ |
| 407 | + user_has_permission(request.user, object, Permissions.Finding_Group_Edit) |
| 408 | + return has_permission_result |
| 409 | + else: |
| 410 | + return True |
| 411 | + |
| 412 | + def has_object_permission(self, request, view, obj): |
| 413 | + has_permission_result = True |
| 414 | + engagement = obj.engagement |
| 415 | + if engagement: |
| 416 | + has_permission_result = has_permission_result and \ |
| 417 | + check_object_permission(request, engagement, Permissions.Engagement_View, Permissions.Engagement_Edit, Permissions.Engagement_Edit) |
| 418 | + finding = obj.finding |
| 419 | + if finding: |
| 420 | + has_permission_result = has_permission_result and \ |
| 421 | + check_object_permission(request, finding, Permissions.Finding_View, Permissions.Finding_Edit, Permissions.Finding_Edit) |
| 422 | + finding_group = obj.finding_group |
| 423 | + if finding_group: |
| 424 | + has_permission_result = has_permission_result and \ |
| 425 | + check_object_permission(request, finding_group, Permissions.Finding_Group_View, Permissions.Finding_Group_Edit, Permissions.Finding_Group_Edit) |
| 426 | + return has_permission_result |
| 427 | + |
| 428 | + |
350 | 429 | class IsSuperUser(permissions.BasePermission): |
351 | 430 | def has_permission(self, request, view): |
352 | 431 | return request.user and request.user.is_superuser |
|
0 commit comments