URN Schema
This library handles URN schemas, similar to AWS ARN's, useful for access control.
Features:
- Variable interpolation
urn:${some.dataset}
- Wildcarding
urn:*
- Precompilation for performance
- Uri validation
urn:this/${is.a}/*/uri?with&a&query
- ACL's
- Conforms to URN
const schema = 'version:method:scope:uri' uri: UriValidator const acl = schema acl // returns { valid: true, group: 'group_a' } acl // returns { valid: false, group: 'group_a' }
In the basic example above we have defined a schema which matches predefined properties, including parsing the uri
appropriately.
Below is a more advanced example.
const acl = schema const data = versions: '1.0' '2.0' scopes: 'testing' 'staging' user: "!~validIds~!": 22 24 77 acl // returns { valid: true, group: 'group_a' }
In the above example the variables defined in group_a
's first urn are interpolated from the data
object.
These uri's would also pass:
products/24/
products/27/something?direction=asc
And so too would version 1.0
and scope staging
.
It's easy to parse a full URL into something you can use against the schema.
Imagine the below originalUrl
is /2.0/testing/products/22
.
app
Interpolation Mechanics
When a variable is interpolated, the type matters.
- If
${some.data}
resolves to an array[1, 2]
, then the value can match either of them, as a string comparison - If
${some.data}
resolves to any other type, it will be stringified and compared against the value