feat: govern selected-user access diagnostics
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import unittest
|
||||
|
||||
from govoplan_core.core.access import PrincipalRef
|
||||
from govoplan_policy.backend.access_explanation_subjects import (
|
||||
ACCESS_EXPLANATION_SUBJECT_SCOPE,
|
||||
AccessExplanationSubjectPolicyProvider,
|
||||
)
|
||||
|
||||
|
||||
class AccessExplanationSubjectPolicyTests(unittest.TestCase):
|
||||
def setUp(self) -> None:
|
||||
self.provider = AccessExplanationSubjectPolicyProvider()
|
||||
|
||||
def test_defaults_to_current_user_without_permission(self) -> None:
|
||||
decision = self.provider.decide_subject_selection(
|
||||
object(),
|
||||
PrincipalRef(
|
||||
account_id="account-1",
|
||||
membership_id="user-1",
|
||||
tenant_id="tenant-1",
|
||||
),
|
||||
tenant_id="tenant-1",
|
||||
)
|
||||
|
||||
self.assertFalse(decision.allow_other_users)
|
||||
self.assertEqual(ACCESS_EXPLANATION_SUBJECT_SCOPE, decision.required_scope)
|
||||
self.assertEqual("current_user", decision.provenance["mode"])
|
||||
|
||||
def test_permission_enables_cross_user_diagnostics(self) -> None:
|
||||
decision = self.provider.decide_subject_selection(
|
||||
object(),
|
||||
PrincipalRef(
|
||||
account_id="account-1",
|
||||
membership_id="user-1",
|
||||
tenant_id="tenant-1",
|
||||
scopes=frozenset({ACCESS_EXPLANATION_SUBJECT_SCOPE}),
|
||||
),
|
||||
tenant_id="tenant-1",
|
||||
)
|
||||
|
||||
self.assertTrue(decision.allow_other_users)
|
||||
self.assertEqual("cross_user", decision.provenance["mode"])
|
||||
|
||||
def test_never_crosses_the_active_tenant(self) -> None:
|
||||
decision = self.provider.decide_subject_selection(
|
||||
object(),
|
||||
PrincipalRef(
|
||||
account_id="account-1",
|
||||
membership_id="user-1",
|
||||
tenant_id="tenant-1",
|
||||
scopes=frozenset({ACCESS_EXPLANATION_SUBJECT_SCOPE}),
|
||||
),
|
||||
tenant_id="tenant-2",
|
||||
)
|
||||
|
||||
self.assertFalse(decision.allow_other_users)
|
||||
self.assertEqual("policy.tenant_boundary", decision.source)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user