|
17 | 17 | from dojo.models import Dojo_User, Product_Type, Finding, Product, Test_Type, \ |
18 | 18 | Endpoint, Development_Environment, Finding_Template, Report, Note_Type, \ |
19 | 19 | Engagement_Survey, Question, TextQuestion, ChoiceQuestion, Endpoint_Status, Engagement, \ |
20 | | - ENGAGEMENT_STATUS_CHOICES |
| 20 | + ENGAGEMENT_STATUS_CHOICES, Test |
21 | 21 | from dojo.utils import get_system_setting |
22 | 22 | from django.contrib.contenttypes.models import ContentType |
| 23 | +from crum import get_current_user |
23 | 24 |
|
24 | 25 | logger = logging.getLogger(__name__) |
25 | 26 |
|
@@ -1072,6 +1073,18 @@ def __init__(self, *args, **kwargs): |
1072 | 1073 | self.form.fields['severity'].choices = self.queryset.order_by( |
1073 | 1074 | 'numerical_severity' |
1074 | 1075 | ).values_list('severity', 'severity').distinct() |
| 1076 | + if get_current_user() is not None and not get_current_user().is_staff: |
| 1077 | + self.form.fields[ |
| 1078 | + 'test__engagement__product__prod_type'].queryset = Product_Type.objects.filter( |
| 1079 | + authorized_users__in=[get_current_user()]) |
| 1080 | + self.form.fields[ |
| 1081 | + 'test'].queryset = Test.objects.filter( |
| 1082 | + Q(engagement__product__authorized_users__in=[get_current_user()]) | |
| 1083 | + Q(engagement__product__prod_type__authorized_users__in=[get_current_user()])) |
| 1084 | + self.form.fields[ |
| 1085 | + 'duplicate_finding'].queryset = Finding.objects.filter( |
| 1086 | + Q(test__engagement__product__authorized_users__in=[get_current_user()]) | |
| 1087 | + Q(test__engagement__product__prod_type__authorized_users__in=[get_current_user()])) |
1075 | 1088 |
|
1076 | 1089 | class Meta: |
1077 | 1090 | model = Finding |
@@ -1117,6 +1130,18 @@ def __init__(self, *args, **kwargs): |
1117 | 1130 | self.form.fields['finding__severity'].choices = self.queryset.order_by( |
1118 | 1131 | 'finding__numerical_severity' |
1119 | 1132 | ).values_list('finding__severity', 'finding__severity').distinct() |
| 1133 | + if get_current_user() is not None and not get_current_user().is_staff: |
| 1134 | + self.form.fields[ |
| 1135 | + 'finding__test__engagement__product__prod_type'].queryset = Product_Type.objects.filter( |
| 1136 | + authorized_users__in=[get_current_user()]) |
| 1137 | + self.form.fields[ |
| 1138 | + 'endpoint'].queryset = Endpoint.objects.filter( |
| 1139 | + Q(product__authorized_users__in=[get_current_user()]) | |
| 1140 | + Q(product__prod_type__authorized_users__in=[get_current_user()])) |
| 1141 | + self.form.fields[ |
| 1142 | + 'finding'].queryset = Finding.objects.filter( |
| 1143 | + Q(test__engagement__product__authorized_users__in=[get_current_user()]) | |
| 1144 | + Q(test__engagement__product__prod_type__authorized_users__in=[get_current_user()])) |
1120 | 1145 |
|
1121 | 1146 | class Meta: |
1122 | 1147 | model = Endpoint_Status |
@@ -1227,8 +1252,10 @@ def __init__(self, *args, **kwargs): |
1227 | 1252 | self.user = kwargs.pop('user') |
1228 | 1253 | super(EndpointFilter, self).__init__(*args, **kwargs) |
1229 | 1254 | if self.user and not self.user.is_staff: |
1230 | | - self.form.fields['product'].queryset = Product.objects.filter( |
1231 | | - authorized_users__in=[self.user]).distinct().order_by('name') |
| 1255 | + self.form.fields[ |
| 1256 | + 'product'].queryset = Product.objects.filter( |
| 1257 | + Q(authorized_users__in=[self.user]) | |
| 1258 | + Q(prod_type__authorized_users__in=[self.user])).distinct().order_by('name') |
1232 | 1259 |
|
1233 | 1260 | class Meta: |
1234 | 1261 | model = Endpoint |
@@ -1286,28 +1313,30 @@ class ReportAuthedFindingFilter(DojoFilter): |
1286 | 1313 | out_of_scope = ReportBooleanFilter() |
1287 | 1314 |
|
1288 | 1315 | def __init__(self, *args, **kwargs): |
1289 | | - self.user = None |
1290 | | - if 'user' in kwargs: |
1291 | | - self.user = kwargs.pop('user') |
1292 | 1316 | super(ReportAuthedFindingFilter, self).__init__(*args, **kwargs) |
1293 | | - if not self.user.is_staff: |
| 1317 | + if get_current_user() and not get_current_user().is_staff: |
1294 | 1318 | self.form.fields[ |
1295 | 1319 | 'test__engagement__product'].queryset = Product.objects.filter( |
1296 | | - authorized_users__in=[self.user]) |
| 1320 | + Q(authorized_users__in=[get_current_user()]) | |
| 1321 | + Q(prod_type__authorized_users__in=[get_current_user()])) |
1297 | 1322 | self.form.fields[ |
1298 | 1323 | 'test__engagement__product__prod_type'].queryset = Product_Type.objects.filter( |
1299 | | - authorized_users__in=[self.user]) |
| 1324 | + authorized_users__in=[get_current_user()]) |
| 1325 | + self.form.fields[ |
| 1326 | + 'duplicate_finding'].queryset = Finding.objects.filter( |
| 1327 | + Q(test__engagement__product__authorized_users__in=[get_current_user()]) | |
| 1328 | + Q(test__engagement__product__prod_type__authorized_users__in=[get_current_user()])) |
1300 | 1329 |
|
1301 | 1330 | @property |
1302 | 1331 | def qs(self): |
1303 | 1332 | parent = super(ReportAuthedFindingFilter, self).qs |
1304 | | - if self.user.is_staff: |
1305 | | - return parent |
1306 | | - else: |
| 1333 | + if get_current_user() and not get_current_user().is_staff: |
1307 | 1334 | return parent.filter( |
1308 | | - Q(test__engagement__product__authorized_users__in=[self.user]) | |
1309 | | - Q(test__engagement__product__prod_type__authorized_users__in=[self.user]) |
| 1335 | + Q(test__engagement__product__authorized_users__in=[get_current_user()]) | |
| 1336 | + Q(test__engagement__product__prod_type__authorized_users__in=[get_current_user()]) |
1310 | 1337 | ) |
| 1338 | + else: |
| 1339 | + return parent |
1311 | 1340 |
|
1312 | 1341 | class Meta: |
1313 | 1342 | model = Finding |
|
0 commit comments