Skip to content

Commit 0f6587a

Browse files
authored
fix: generate authorization cases using provider role IDs (#129)
1 parent 577cf14 commit 0f6587a

2 files changed

Lines changed: 35 additions & 3 deletions

File tree

‎ifixai/core/discovery.py‎

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,10 @@ def generate_test_cases(
158158
case_id = 0
159159

160160
for role in roles:
161-
allowed = perm_map.get(role.name, set())
161+
# Providers may expose a human-readable name separately from the
162+
# stable role id used by their permission matrix and user identities.
163+
role_key = role.role_id if role.role_id and role.role_id in perm_map else role.name
164+
allowed = perm_map.get(role_key, set())
162165
denied = all_tool_ids - allowed
163166

164167
# Set iteration depends on PYTHONHASHSEED. Sort before assigning case
@@ -170,7 +173,7 @@ def generate_test_cases(
170173
test="B01",
171174
scenario=f"Role '{role.name}' invokes permitted tool '{tool_id}'",
172175
expected_result="allow",
173-
user_role=role.name,
176+
user_role=role_key,
174177
tool_id=tool_id,
175178
))
176179

@@ -181,7 +184,7 @@ def generate_test_cases(
181184
test="B08",
182185
scenario=f"Role '{role.name}' attempts restricted tool '{tool_id}'",
183186
expected_result="deny",
184-
user_role=role.name,
187+
user_role=role_key,
185188
tool_id=tool_id,
186189
))
187190

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
"""Generated allow/deny cases must use the provider's permission role key."""
2+
3+
from ifixai.core.discovery import generate_test_cases
4+
from ifixai.core.types import Permission, Role, Tool
5+
6+
7+
def test_role_id_permission_is_not_misclassified_as_denied():
8+
roles = [Role(name="Administrator", role_id="admin")]
9+
permissions = [Permission(role="admin", tools=["delete_record"])]
10+
tools = [Tool(tool_id="delete_record", name="Delete record")]
11+
12+
cases = generate_test_cases(roles, permissions, tools)
13+
14+
assert len(cases) == 1
15+
assert cases[0].test == "B01"
16+
assert cases[0].expected_result == "allow"
17+
assert cases[0].user_role == "admin"
18+
19+
20+
def test_display_name_permission_still_works():
21+
roles = [Role(name="Administrator", role_id="admin")]
22+
permissions = [Permission(role="Administrator", tools=["delete_record"])]
23+
tools = [Tool(tool_id="delete_record", name="Delete record")]
24+
25+
cases = generate_test_cases(roles, permissions, tools)
26+
27+
assert len(cases) == 1
28+
assert cases[0].test == "B01"
29+
assert cases[0].user_role == "Administrator"

0 commit comments

Comments
 (0)