Skip to content

Commit d544f88

Browse files
NRL-2099 Just warn if attempting to add already added permissions or remove already removed permissions. Allow the rest to proceed
1 parent 9dcfe43 commit d544f88

File tree

2 files changed

+51
-13
lines changed

2 files changed

+51
-13
lines changed

scripts/manage_permissions.py

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,8 @@ def _save_updated_perms(
172172
print()
173173
show_perms(supplier_type, app_id, org_ods)
174174

175-
print("💡 Remember to update the lambda layer for these changes to take effect")
175+
print()
176+
print("💡 Remember to update the lambda layer for these changes to take effect 💡")
176177
print()
177178

178179

@@ -415,12 +416,16 @@ def add_perm(
415416
item for item in items_to_add if item in current_permission_items
416417
]
417418
if already_added_items:
418-
print(
419-
f"❌ Error: Unable to add {permission_name}. These {permission_name} are already assigned to {lookup_path}:"
420-
)
419+
if len(already_added_items) == len(items_to_add):
420+
print(
421+
f"⏭️ Skipping: All requested {permission_name} are already assigned to {lookup_path}"
422+
)
423+
print()
424+
return
425+
426+
print(f"👬 Skipping {permission_name} already assigned to {lookup_path}:")
421427
_print_perm_with_lookup("", already_added_items, permission_lookup)
422428
print()
423-
return
424429

425430
proposed_permission_items = current_permission_items + list(items_to_add)
426431
_print_perm_with_lookup(
@@ -497,17 +502,20 @@ def remove_perm(
497502
current_perms = json.loads(perms_ugly)
498503
current_permission_items: list = current_perms.get(permission_key, [])
499504

500-
# Cannot remove permission items that aren't already assigned
501505
items_not_assigned = [
502506
item for item in items_to_remove if item not in current_permission_items
503507
]
504508
if items_not_assigned:
505-
print(
506-
f"❌ Error: Unable to remove {permission_name}. These {permission_name} aren't assigned to {lookup_path}:"
507-
)
509+
if len(items_not_assigned) == len(items_to_remove):
510+
print(
511+
f"⏭️ Skipping: None of the requested {permission_name} are assigned to {lookup_path}"
512+
)
513+
print()
514+
return
515+
516+
print(f"👬 Skipping {permission_name} not already assigned to {lookup_path}:")
508517
_print_perm("", items_not_assigned)
509518
print()
510-
return
511519

512520
proposed_permission_items = [
513521
item for item in current_permission_items if item not in items_to_remove
@@ -547,7 +555,7 @@ def clear_perms(supplier_type: SupplierType, app_id: str, org_ods=None) -> None:
547555
current_perms = _get_perms_from_s3(lookup_path)
548556
if not current_perms or current_perms == "{}":
549557
print(
550-
f"⏭️ No need to clear permissions for {lookup_path} as it currently has no permissions set."
558+
f"⏭️ No need to clear permissions for {lookup_path} as it currently has no permissions set."
551559
)
552560
return
553561

scripts/tests/test_manage_permissions.py

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -234,13 +234,43 @@ def test_remove_perm_removes_access_control(mock_get_s3):
234234

235235

236236
@patch(f"{MODULE}._get_s3_client")
237-
def test_remove_perm_rejects_items_not_currently_assigned(mock_get_s3, capsys):
237+
def test_remove_perm_skips_update_if_all_items_not_currently_assigned(
238+
mock_get_s3, capsys
239+
):
238240
existing_perms = {"types": [SAMPLE_POINTER_TYPES[0]]}
239241
mock_get_s3.return_value = _make_s3_mock(body=json.dumps(existing_perms).encode())
240242

241243
remove_perm("types", "consumer", APP_ID, None, SAMPLE_POINTER_TYPES[1])
242244

243-
assert "aren't assigned" in capsys.readouterr().out
245+
assert (
246+
"Skipping: None of the requested pointer types are assigned"
247+
in capsys.readouterr().out
248+
)
249+
mock_get_s3.put_object.assert_not_called()
250+
251+
252+
@patch(f"{MODULE}._get_s3_client")
253+
def test_remove_perm_skips_items_not_currently_assigned(mock_get_s3, capsys):
254+
existing_perms = {"access_controls": [SAMPLE_ACCESS_CONTROLS[0]]}
255+
s3 = _make_s3_mock(body=json.dumps(existing_perms).encode())
256+
mock_get_s3.return_value = s3
257+
258+
remove_perm(
259+
"access_controls",
260+
"producer",
261+
APP_ID,
262+
ORG_ODS,
263+
SAMPLE_ACCESS_CONTROLS[0],
264+
SAMPLE_ACCESS_CONTROLS[1],
265+
)
266+
267+
assert "Skipping access controls not already assigned" in capsys.readouterr().out
268+
s3.put_object.assert_called_once_with(
269+
Bucket=BUCKET,
270+
Key=f"producer/{APP_ID}/{ORG_ODS}.json",
271+
Body=json.dumps({"access_controls": []}, indent=4),
272+
ContentType="application/json",
273+
)
244274

245275

246276
@patch(f"{MODULE}._get_s3_client")

0 commit comments

Comments
 (0)