Skip to content

Commit 5b60a12

Browse files
committed
Refactor: An empty selector now raises UnauthorizedException
1 parent 0ffe1c0 commit 5b60a12

File tree

1 file changed

+13
-8
lines changed

1 file changed

+13
-8
lines changed

kingdom/access/flow.py

+13-8
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
Payload,
1111
PolicyContext,
1212
Scope,
13+
SelectorPermissionMap,
1314
UserKey,
1415
)
1516

@@ -91,7 +92,8 @@ def check_permission(
9192
Obs.: In this case, scope is always [access_request.selector]
9293
"""
9394
if access_request.operation == Permission.READ.value:
94-
return get_read_scope(owned_policies, access_request), True
95+
scope = get_read_scope(owned_policies, access_request)
96+
return scope, len(scope) > 0
9597
return (
9698
[access_request.selector],
9799
is_write_allowed(owned_policies, access_request),
@@ -130,19 +132,22 @@ def get_read_scope(
130132
# Sanity check
131133
assert access_request.operation == Permission.READ.value
132134

135+
selector = access_request.selector
133136
resource = access_request.resource
134137
if resource not in owned_policies:
135138
# Subject has no permission related to requested resource.
136139
return []
137140

138-
# Subject has at least one selector that it can read.
139-
if TOKEN_ALL in owned_policies[resource]:
140-
# If it has any binding to "*", then it can read it all.
141-
return [TOKEN_ALL]
141+
owned_selectors: SelectorPermissionMap = owned_policies[resource]
142+
if selector == TOKEN_ALL:
143+
# If it has an entry, it is allowed to read it.
144+
return (
145+
[TOKEN_ALL]
146+
if TOKEN_ALL in owned_selectors
147+
else list(owned_selectors.keys())
148+
)
142149

143-
# Subject has specific selectors, we shall return them.
144-
allowed_ids = owned_policies[resource].keys()
145-
return list(allowed_ids)
150+
return list(filter(lambda s: s == selector, owned_selectors))
146151

147152

148153
def is_write_allowed(

0 commit comments

Comments
 (0)