55from rest_framework import permissions , exceptions
66from rest_framework .exceptions import AuthenticationFailed
77from .constants import ALLOWED_RESOURCE_TYPES
8+ from apps .versions import Versions , VersionNotMatched
89
910import apps .logging .request_logger as bb2logging
1011
@@ -30,35 +31,36 @@ def has_permission(self, request, view):
3031
3132class HasCrosswalk (permissions .BasePermission ):
3233 def has_permission (self , request , view ):
33- return bool (
34- # BB2-4166-TODO : this needs to use version to determine fhir_id, probably in request
35- request .user and request .user .crosswalk and request .user .crosswalk .fhir_id (2 )
36- )
34+ if view .version in Versions .supported_versions ():
35+ return request .user and request .user .crosswalk and request .user .crosswalk .fhir_id (view .version )
36+ else :
37+ # this should not happen where we'd get an unsupported version
38+ raise VersionNotMatched ("Version not matched in has_permission" )
3739
3840
3941class ReadCrosswalkPermission (HasCrosswalk ):
4042 def has_object_permission (self , request , view , obj ):
4143 # Now check that the user has permission to access the data
4244 # Patient resources were taken care of above # TODO - verify this
4345 # Return 404 on error to avoid notifying unauthorized user the object exists
44-
46+ if view .version in Versions .supported_versions ():
47+ fhir_id = request .crosswalk .fhir_id (view .version )
48+ else :
49+ raise VersionNotMatched ("Version not matched in has_object_permission in ReadCrosswalkPermission" )
4550 try :
4651 if request .resource_type == "Coverage" :
4752 reference = obj ["beneficiary" ]["reference" ]
4853 reference_id = reference .split ("/" )[1 ]
49- # BB2-4166-TODO : this needs to use version to determine fhir_id, probably in request
50- if reference_id != request .crosswalk .fhir_id (2 ):
54+ if reference_id != fhir_id :
5155 raise exceptions .NotFound ()
5256 elif request .resource_type == "ExplanationOfBenefit" :
5357 reference = obj ["patient" ]["reference" ]
5458 reference_id = reference .split ("/" )[1 ]
55- # BB2-4166-TODO : this needs to use version to determine fhir_id, probably in request
56- if reference_id != request .crosswalk .fhir_id (2 ):
59+ if reference_id != fhir_id :
5760 raise exceptions .NotFound ()
5861 else :
5962 reference_id = obj ["id" ]
60- # BB2-4166-TODO : this needs to use version to determine fhir_id, probably in request
61- if reference_id != request .crosswalk .fhir_id (2 ):
63+ if reference_id != fhir_id :
6264 raise exceptions .NotFound ()
6365
6466 except exceptions .NotFound :
@@ -71,9 +73,10 @@ def has_object_permission(self, request, view, obj):
7173
7274class SearchCrosswalkPermission (HasCrosswalk ):
7375 def has_object_permission (self , request , view , obj ):
74- # BB2-4166-TODO: this is hardcoded to be version 2
75- patient_id = request .crosswalk .fhir_id (2 )
76-
76+ if view .version in Versions .supported_versions ():
77+ patient_id = request .crosswalk .fhir_id (view .version )
78+ else :
79+ raise VersionNotMatched ("Version not matched in has_object_permission in SearchCrosswalkPermission" )
7780 if "patient" in request .GET and request .GET ["patient" ] != patient_id :
7881 return False
7982
0 commit comments