[#13750] Allow policies to control sub-fields of requests #13769
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Introduce a dot-delimited ('.') syntax to policy parameters to allow the application of parameter restrictions to the contents of request maps. These can be applied to
allowed
,denied
, andrequired
parameters.Description
The unit tests for the ACL define this behaviour in more detail, but for an overview:
map.top.middle.bottom
map.top.*
will matchmap.top.foo
andmap.top.bar.baz
.map.*
will overrule an allow formap.foo
.map.foo = ["bar", "baz*"]
will allowbar, baz, bazza, ...
The policy parser contains validation for the new nested parameter format.
Approach
Nested parameter values was considered as an approach. However, using a flat, delimited key format over nested values provides more flexibility when defining constraints. Their behaviour also proved more intuitive, in particular when combining
denied_parameters
withallowed_parameters
.Drawbacks
Any existing, "flat" parameter in a policy which contains a '.' will no longer be valid. As far as I can tell, these do not exist.
Resolves #13750.