feat: Add ABAC support and make custom actions more flexible #168
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.
Hello,
After filing the ticket #167, I decided to create a fork which adds the requested feature. ABAC models allow request parameters to be object or class instances instead of only strings, however, the current implementation of
nest-authz
requires strings. This means that ABAC models in Casbin are unusable. In this PR, I added support by doing the following:AuthUser
andAuthResource
asstring | Record<string, any>
.usernameFromContext
has been changed touserFromContext
which returns anAuthUser
.Additionally, in order to support more flexible naming of actions (especially in use cases without the concept of possession), I made possession optional:
enablePosession
to the module options that defaults totrue
if not provided.possession
optional in@UsePermissions
and it defaults toAuthPossession.ANY
"{actionVerb}:{possession}"
. If possession is disabled, actions are formatted as"{actionVerb}"
.Let me know what you think and if there are any improvements to make.