|
10 | 10 | Payload,
|
11 | 11 | PolicyContext,
|
12 | 12 | Scope,
|
| 13 | + SelectorPermissionMap, |
13 | 14 | UserKey,
|
14 | 15 | )
|
15 | 16 |
|
@@ -91,7 +92,8 @@ def check_permission(
|
91 | 92 | Obs.: In this case, scope is always [access_request.selector]
|
92 | 93 | """
|
93 | 94 | 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 |
95 | 97 | return (
|
96 | 98 | [access_request.selector],
|
97 | 99 | is_write_allowed(owned_policies, access_request),
|
@@ -130,19 +132,22 @@ def get_read_scope(
|
130 | 132 | # Sanity check
|
131 | 133 | assert access_request.operation == Permission.READ.value
|
132 | 134 |
|
| 135 | + selector = access_request.selector |
133 | 136 | resource = access_request.resource
|
134 | 137 | if resource not in owned_policies:
|
135 | 138 | # Subject has no permission related to requested resource.
|
136 | 139 | return []
|
137 | 140 |
|
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 | + ) |
142 | 149 |
|
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)) |
146 | 151 |
|
147 | 152 |
|
148 | 153 | def is_write_allowed(
|
|
0 commit comments