Implementations
There are currently two known implementations of Structured Scopes
Both of them have a very similar API.
Installation
To get started install from your language's package manager.
1 | pip install sscopes |
1 | npm install sscopes |
Acceptance
The package has a single callable function that processes acceptance and returns a BOOLEAN value: validate().
1 2 3 4 5 | from sscopes import validate is_valid = validate("user", "user") print(is_valid) # True |
1 2 3 4 5 | import validate from 'sscopes'; const isValid = validate("user", "user"); console.log(isValid); # true |
Parameters
The validate function accepts two required parameters, and three optional.
base_scopes- REQUIRED The base scopes to be tested againstinbounds- REQUIRED The inbound scopes to be accepted or rejectedrequire_all- Whether all base scopes must be present, or just one, defaultTRUErequire_all_actions- Whether all actions must be present, or just one, defaultTRUEoverride- A callable that will override the acceptance algorithm
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | from sscopes import validate is_valid = validate("user foobar", "user") print(is_valid) # False is_valid = validate("user foobar", "user", require_all=False) print(is_valid) # True is_valid = validate("user:write:read", "user:write") print(is_valid) # False is_valid = validate("user:write:read", "user:write", require_all_actions=False) print(is_valid) # True |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import validate from 'sscopes'; const isValid = validate("user foobar", "user"); console.log(isValid); # false const isValid = validate("user foobar", "user", false); console.log(isValid); # true const isValid = validate("user:write:read", "user:write"); console.log(isValid); # false const isValid = validate("user:write:read", "user:write", true, false); console.log(isValid); # true |
Override/Extend
Somethimes, you may decide that the predefined logic of Structured Scopes is not enough, and you need to extend it. No problem, simple pass validate() a callable function. Note that the callable will receive the following parameters:
is_valid- Whether the standard logic would accept the inbound scope or notbase- The current base scope being testedinbounds- All current inbound scope(s)require_all_actions- The state ofrequire_all_actionsforvalidate
Important
It is important to note that the override callable is called one time for each base scope that was passed to validate. Therefore, if the base scope was one two three, it will be called three separate times.
1 2 3 4 5 6 7 8 | from sscopes import validate def always_true(is_valid, base,inbounds, require_all_actions): return True is_valid = validate("user foobar", "user", override=always_true) print(is_valid) # True |
1 2 3 4 5 6 7 8 9 | import validate from 'sscopes'; const alwaysTrue = (is_valid, base,inbounds, require_all_actions) => { return true; } const isValid = validate("user foobar", "user", true, true, alwaysTrue); console.log(isValid); # true |