Skip to content

Commit a64d230

Browse files
refactor: replacing access type with access tag (#73)
removing unused parameters, using the new method for access grant. moving the approval type check and status change code to models adding the call to the accept_request in the accept access request function
1 parent 9458e7f commit a64d230

File tree

6 files changed

+70
-73
lines changed

6 files changed

+70
-73
lines changed

Access/accessrequest_helper.py

Lines changed: 33 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@
1616
User,
1717
GroupV2,
1818
AccessV2,
19+
ApprovalType,
1920
)
20-
from Access.background_task_manager import background_task
21+
from Access.background_task_manager import background_task, accept_request
2122
from . import helpers as helper
2223

2324
logger = logging.getLogger(__name__)
@@ -548,10 +549,10 @@ def validate_access_labels(access_labels_json, access_type):
548549
return access_labels
549550

550551

551-
def _get_approver_permissions(access_type, access_label=None):
552+
def _get_approver_permissions(access_tag, access_label=None):
552553
json_response = {}
553554

554-
access_module = helper.get_available_access_module_from_tag(access_type)
555+
access_module = helper.get_available_access_module_from_tag(access_tag)
555556
approver_permissions = []
556557
approver_permissions = access_module.fetch_approver_permissions(access_label)
557558

@@ -573,7 +574,7 @@ def is_request_valid(request_id, access_mapping):
573574
return True
574575

575576

576-
def accept_user_access_requests(request, access_type, request_id):
577+
def accept_user_access_requests(auth_user, request_id):
577578
json_response = {}
578579
access_mapping = UserAccessMapping.get_access_request(request_id)
579580
if not is_request_valid(request_id, access_mapping):
@@ -583,54 +584,53 @@ def accept_user_access_requests(request, access_type, request_id):
583584
return json_response
584585

585586
requester = access_mapping.user_identity.user.email
586-
if request.user.username == requester:
587+
if auth_user.username == requester:
587588
json_response["error"] = USER_REQUEST_PERMISSION_DENIED_ERR_MSG
588589
return json_response
589590

590591
access_label = access_mapping.access.access_label
591592

592593
try:
593-
permissions = _get_approver_permissions(access_type, access_label)
594+
permissions = _get_approver_permissions(access_mapping.access.access_tag, access_label)
594595
approver_permissions = permissions["approver_permissions"]
595596
if not helper.check_user_permissions(
596-
request.user, list(approver_permissions.values())
597+
auth_user, list(approver_permissions.values())
597598
):
598599
logger.debug(USER_REQUEST_PERMISSION_DENIED_ERR_MSG)
599600
json_response["error"] = USER_REQUEST_PERMISSION_DENIED_ERR_MSG
600601
return json_response
601602

602603
is_primary_approver = (
603604
access_mapping.is_pending()
604-
and request.user.user.has_permission(approver_permissions["1"])
605+
and auth_user.user.has_permission(approver_permissions["1"])
605606
)
606607
is_secondary_approver = (
607608
access_mapping.is_secondary_pending()
608-
and request.user.user.has_permission(approver_permissions["2"])
609+
and auth_user.user.has_permission(approver_permissions["2"])
609610
)
610611

611612
if not (is_primary_approver or is_secondary_approver):
612613
logger.debug(USER_REQUEST_PERMISSION_DENIED_ERR_MSG)
613614
json_response["error"] = USER_REQUEST_PERMISSION_DENIED_ERR_MSG
614615
return json_response
615616
if is_primary_approver and "2" in approver_permissions:
616-
access_mapping.approver_1 = request.user.user
617+
access_mapping.approver_1 = auth_user.user
617618
access_mapping.update_access_status("SecondaryPending")
618619
json_response["msg"] = USER_REQUEST_SECONDARY_PENDING_MSG.format(
619-
request_id=request_id, approved_by=request.user.username
620+
request_id=request_id, approved_by=auth_user.username
620621
)
621622
logger.debug(
622623
USER_REQUEST_SECONDARY_PENDING_MSG.format(
623-
request_id=request_id, approved_by=request.user.username
624+
request_id=request_id, approved_by=auth_user.username
624625
)
625626
)
626627
else:
627628
json_response = run_accept_request_task(
628629
is_primary_approver,
629630
access_mapping,
630-
request,
631-
request_id,
632-
access_type,
633-
access_label,
631+
auth_user=auth_user,
632+
request_id=request_id,
633+
access_label=access_label,
634634
)
635635
except Exception as e:
636636
return process_error_response(e)
@@ -639,24 +639,16 @@ def accept_user_access_requests(request, access_type, request_id):
639639

640640

641641
def run_accept_request_task(
642-
is_primary_approver, access_mapping, request, request_id, access_type, access_label
642+
is_primary_approver, access_mapping, auth_user, request_id, access_label
643643
):
644644
json_response = {}
645645
json_response["status"] = []
646-
if is_primary_approver:
647-
access_mapping.approver_1 = request.user.user
648-
else:
649-
access_mapping.approver_2 = request.user.user
646+
approval_type = ApprovalType.Primary if is_primary_approver else ApprovalType.Secondary
650647
json_response["msg"] = REQUEST_PROCESS_MSG.format(request_id=request_id)
651648

652649
with transaction.atomic():
653650
try:
654-
access_mapping.update_access_status("Processing")
655-
656-
background_task(
657-
"run_accept_request",
658-
json.dumps({"request_id": request_id, "access_type": access_type}),
659-
)
651+
accept_request(user_access_mapping=access_mapping, approval_type=approval_type, approver = auth_user.user)
660652
except Exception as e:
661653
logger.exception(e)
662654
raise Exception(
@@ -725,7 +717,7 @@ def decline_individual_access(request, access_type, request_id, reason):
725717
return json_response
726718

727719

728-
def accept_group_access(request, request_id):
720+
def accept_group_access(auth_user, request_id):
729721
json_response = {}
730722

731723
group_mapping = GroupAccessMapping.get_by_request_id(request_id=request_id)
@@ -742,7 +734,7 @@ def accept_group_access(request, request_id):
742734
approver_permissions = permissions["approver_permissions"]
743735

744736
if not helper.check_user_permissions(
745-
request.user, list(approver_permissions.values())
737+
auth_user, list(approver_permissions.values())
746738
):
747739
logger.debug(USER_REQUEST_PERMISSION_DENIED_ERR_MSG)
748740
return create_error_response(
@@ -752,17 +744,17 @@ def accept_group_access(request, request_id):
752744
if not (group_mapping.is_pending() or group_mapping.is_secondary_pending()):
753745
logger.warning(
754746
ALREADY_PROCESSED_REQUEST_MSG.format(
755-
request_id=request_id, user=request.user.username
747+
request_id=request_id, user=auth_user.username
756748
)
757749
)
758750
return create_error_response(
759751
error_msg=USER_REQUEST_IN_PROCESS_ERR_MSG.format(request_id=request_id)
760752
)
761-
elif group_mapping.is_self_approval(approver=request.user.user):
753+
elif group_mapping.is_self_approval(approver=auth_user.user):
762754
return create_error_response(error_msg=SELF_APPROVAL_ERROR_MSG)
763755
else:
764756
is_primary_approver, is_secondary_approver = is_valid_approver(
765-
request=request,
757+
auth_user=auth_user,
766758
group_mapping=group_mapping,
767759
approver_permissions=approver_permissions,
768760
)
@@ -772,21 +764,21 @@ def accept_group_access(request, request_id):
772764
error_msg=USER_REQUEST_PERMISSION_DENIED_ERR_MSG
773765
)
774766
if is_primary_approver and "2" in approver_permissions:
775-
group_mapping.set_primary_approver(request.user.user)
767+
group_mapping.set_primary_approver(auth_user.user)
776768
json_response["msg"] = USER_REQUEST_SECONDARY_PENDING_MSG.format(
777-
request_id=request_id, approved_by=request.user.username
769+
request_id=request_id, approved_by=auth_user.username
778770
)
779771
group_mapping.update_access_status(current_status="SecondaryPending")
780772
logger.debug(
781773
USER_REQUEST_SECONDARY_PENDING_MSG.format(
782-
request_id=request_id, approved_by=request.user.username
774+
request_id=request_id, approved_by=auth_user.username
783775
)
784776
)
785777
else:
786778
if is_primary_approver:
787-
group_mapping.set_primary_approver(request.user.user)
779+
group_mapping.set_primary_approver(auth_user.user)
788780
else:
789-
group_mapping.set_secondary_approver(request.user.user)
781+
group_mapping.set_secondary_approver(auth_user.user)
790782
json_response["msg"] = REQUEST_ACCESS_AUTO_APPROVED_MSG["title"].format(
791783
request_id=request_id
792784
)
@@ -799,7 +791,7 @@ def accept_group_access(request, request_id):
799791
execute_group_access(userMappingsList)
800792
logger.debug(
801793
APPROVAL_PROCESS_STARTED_MSG.format(
802-
request_id=request_id, approver=request.user.username
794+
request_id=request_id, approver=auth_user.username
803795
)
804796
)
805797
return json_response
@@ -889,14 +881,14 @@ def create_error_response(error_msg):
889881
return json_response
890882

891883

892-
def is_valid_approver(request, group_mapping, approver_permissions):
884+
def is_valid_approver(auth_user, group_mapping, approver_permissions):
893885
is_primary_approver = (
894886
group_mapping.is_pending()
895-
and request.user.user.has_permission(approver_permissions["1"])
887+
and auth_user.user.has_permission(approver_permissions["1"])
896888
)
897889
is_secondary_approver = (
898890
group_mapping.is_secondary_pending()
899-
and request.user.user.has_permission(approver_permissions["2"])
891+
and auth_user.user.has_permission(approver_permissions["2"])
900892
)
901893
return is_primary_approver, is_secondary_approver
902894

Access/background_task_manager.py

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -299,17 +299,12 @@ def run_accept_request(data):
299299
return {"status": False}
300300

301301

302-
def accept_request(user_access_mapping, approval_type="", approver=None):
302+
def accept_request(user_access_mapping, approval_type, approver):
303303
result = None
304+
if approval_type != ApprovalType.Primary and approval_type != ApprovalType.Secondary:
305+
raise Exception("Invalid Approval Type")
304306

305-
if approval_type == ApprovalType.Primary:
306-
user_access_mapping.approver_1 = approver
307-
elif approval_type == ApprovalType.Secondary:
308-
user_access_mapping.approver_2 = approver
309-
elif user_access_mapping.approver_1 or user_access_mapping.approver_2:
310-
raise Exception("Request Not approved")
311-
312-
user_access_mapping.processing()
307+
user_access_mapping.processing(approval_type = approval_type, approver=approver)
313308
try:
314309
result = run_access_grant.delay(user_access_mapping.request_id)
315310
except Exception:
@@ -319,7 +314,6 @@ def accept_request(user_access_mapping, approval_type="", approver=None):
319314
return True
320315
return False
321316

322-
323317
def revoke_request(user_access_mapping, revoker=None):
324318
result = None
325319
# change the status to revoke processing

Access/group_helper.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ def get_generic_access(group_mapping):
172172
return access_details
173173

174174

175-
def get_group_access_list(request, group_name):
175+
def get_group_access_list(auth_user, group_name):
176176
context = {}
177177
group = GroupV2.get_active_group_by_name(group_name)
178178
if not group:
@@ -186,7 +186,7 @@ def get_group_access_list(request, group_name):
186186
return context
187187

188188
group_members = group.get_all_members().filter(status="Approved")
189-
auth_user = request.user
189+
auth_user = auth_user
190190

191191
if not auth_user.user.is_allowed_admin_actions_on_group(group):
192192
logger.debug("Permission denied, requester is non owner")
@@ -304,7 +304,7 @@ def check_user_is_group_owner(user_name, group):
304304
return False
305305

306306

307-
def approve_new_group_request(request, group_id):
307+
def approve_new_group_request(auth_user, group_id):
308308
try:
309309
group = GroupV2.get_pending_group(group_id=group_id)
310310
except Exception as e:
@@ -316,7 +316,7 @@ def approve_new_group_request(request, group_id):
316316
context["error"] = REQUEST_NOT_FOUND_ERROR
317317
return context
318318
try:
319-
if group.is_self_approval(approver=request.user.user):
319+
if group.is_self_approval(approver=auth_user.user):
320320
context = {}
321321
context["error"] = SELF_APPROVAL_ERROR
322322
return context
@@ -325,8 +325,8 @@ def approve_new_group_request(request, group_id):
325325
context["msg"] = REQUEST_PROCESSING.format(requestId=group_id)
326326

327327
with transaction.atomic():
328-
group.approve(approved_by=request.user.user)
329-
group.approve_all_pending_users(approved_by=request.user.user)
328+
group.approve(approved_by=auth_user.user)
329+
group.approve_all_pending_users(approved_by=auth_user.user)
330330
initial_members = group.get_all_members()
331331
initial_member_names = [user.user.name for user in initial_members]
332332
try:
@@ -344,7 +344,7 @@ def approve_new_group_request(request, group_id):
344344
"Approved group creation for - "
345345
+ group_id
346346
+ " - Approver="
347-
+ request.user.username
347+
+ auth_user.username
348348
)
349349
if initial_members:
350350
logger.debug(
@@ -502,7 +502,7 @@ def is_user_in_group(user_email, group_members_email):
502502
return user_email in group_members_email
503503

504504

505-
def accept_member(request, requestId, shouldRender=True):
505+
def accept_member(auth_user, requestId, shouldRender=True):
506506
try:
507507
membership = MembershipV2.get_membership(membership_id=requestId)
508508
except Exception as e:
@@ -514,22 +514,22 @@ def accept_member(request, requestId, shouldRender=True):
514514
if not membership.is_pending():
515515
logger.warning(
516516
"An Already Approved/Declined/Processing Request was accessed by - "
517-
+ request.user.username
517+
+ auth_user.username
518518
)
519519
context = {}
520520
context["error"] = REQUEST_PROCESSED_BY.format(
521521
requestId=requestId, user=membership.approver.user.username
522522
)
523523
return context
524-
elif membership.is_self_approval(approver=request.user.user):
524+
elif membership.is_self_approval(approver=auth_user.user):
525525
context = {}
526526
context["error"] = SELF_APPROVAL_ERROR
527527
return context
528528
else:
529529
context = {}
530530
context["msg"] = REQUEST_PROCESSING.format(requestId=requestId)
531531
with transaction.atomic():
532-
membership.approve(request.user.user)
532+
membership.approve(auth_user.user)
533533
group = membership.group
534534
user = membership.user
535535
user_mappings_list = views_helper.generate_user_mappings(
@@ -545,7 +545,7 @@ def accept_member(request, requestId, shouldRender=True):
545545
"Process has been started for the Approval of request - "
546546
+ requestId
547547
+ " - Approver="
548-
+ request.user.username
548+
+ auth_user.username
549549
)
550550
return context
551551
except Exception as e:

Access/models.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -843,7 +843,13 @@ def revoking(self, revoker):
843843
self.status = "ProcessingRevoke"
844844
self.save()
845845

846-
def processing(self):
846+
def processing(self, approval_type, approver):
847+
if approval_type == ApprovalType.Primary:
848+
self.approver_1 = approver
849+
elif approval_type == ApprovalType.Secondary:
850+
self.approver_2 = approver
851+
else:
852+
raise Exception("Invalid ApprovalType")
847853
self.status = "Processing"
848854
self.save()
849855

Access/userlist_helper.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import json
22
from Access import helpers
33
from Access.background_task_manager import background_task, accept_request, revoke_request
4-
from Access.models import MembershipV2, User
4+
from Access.models import User, ApprovalType
55
import logging
66
from . import helpers as helper
77
from django.db import transaction
@@ -151,8 +151,14 @@ def __change_identity_and_transfer_access_mapping(
151151
existing_user_identity.decline_all_non_approved_access_mappings("Identity Updated")
152152

153153
for mapping in new_user_access_mapping:
154-
if mapping.is_approved():
155-
accept_request(user_access_mapping = mapping)
154+
if mapping.is_approved() or mapping.is_grantfailed():
155+
if mapping.approver_2:
156+
accept_request(user_access_mapping = mapping, approval_type=ApprovalType.Secondary, approver = mapping.approver_2)
157+
elif mapping.approver_1:
158+
accept_request(user_access_mapping=mapping, approval_type=ApprovalType.Primary, approver = mapping.approver_1)
159+
else:
160+
logger.fatal("migration failed for request_id:%s mapping is approved but approvers are missing: %s",
161+
mapping.request_id)
156162

157163
def getallUserList(request):
158164
try:

0 commit comments

Comments
 (0)