loopback-component-role-user v1.4.4
Loopback Component user dynamic role
This loopback component add a new dynamic user role which mapping the operators of model to the role.
The role name should be 'modelName' + '.' + 'operator'. The role should be mapped into the ACL too.
And the role can be nested like this:
Role1:
User.add
Role2:
Role1
Role3:
Role2The Role3 should has the User.add role too.
The role could have multi containers of permission(aother role) or permissions.
The Permission is the model with operation. You can use the * to match the any model or any operation.
eg, '*.add', 'User.*'.
Add the .owned dynamical roles to edit, view, find, and delete roles as postfix.
For only edit/delete/view/find owned items.
Note:
- The same role could be exists in multi-roles.
- Disable batch update roles.
- The nested max level of role to limit. see config:
maxLevel
Installation
Install in you loopback project:
npm install --save loopback-component-role-userCreate a component-config.json file in your server folder (if you don't already have one)
Configure options inside
component-config.json:{ "loopback-component-role-user": { "enabled": true, "cached": 0, "role": "$user", "userModel": "User", "roleIdFieldName": "name", "rolesFieldName": "roles", "permsFieldName": "_perms", "roleRefsFieldName": "_roleRefs", "models": [], "operations":[] } }
enabledBoolean: whether enable this component. defaults: truecached: Integer: whether cache the perms. defaults: 10'none': no cache. you can write the custom _getPerms class method on the Role model to your cache.1'updated': the cached perms updated when the role updated(default)2'manual': if the _perms is not empty use the cached _perms else calc perms and update the _perms.- NOTE: you should update the
_permsfield by yourself. just empty it for updated.
- NOTE: you should update the
deleteUsedRoleBoolean: whether allow to cascade delete used roles. defaults: false- only for updated
cached: 1.
- only for updated
maxLevelInteger: the max nested role level to limit. defaults: 10roleString : the role name. defaults: $userroleModelstring: The role model to inject. defaults: Role- The
rolesFieldNameandpermsFieldNamefields will be added to the Model. - The
hasPermmethod will be added to the Model. - The
addRolesandremoveRolesmethods will be added if therolesFieldNameis 'roles'.- The
Role.addRolesandRole.removeRolespermissions are added too.
- The
- The
userModelstring: The user model to inject. defaults: User- The
rolesFieldNameandpermsFieldNamefields will be added to the User Model. - The
hasPermmethod will be added to the User Model. - The
addRolesandremoveRolesmethods will be added if therolesFieldNameis 'roles'.- The
User.addRolesandUser.removeRolespermissions are added too.
- The
- The
rolesFieldNamestring: The roles field to define. defaults: roles- The model(role) can have zero or more roles/permissions.
permsFieldNamestring: The cached perms of this role. defaults: _perms- Cache all the permissions to the roles(Readonly).
ownerFieldNamestring: The owner id field to define. defaults: creatorIdroleRefsFieldNamestring: The cached items which reference this role(Readonly). defaults: _roleRefsmodelsBoolean|Array of string. defaults: true- enable the user role to the models.
truemeans all models in the app.models.
- enable the user role to the models.
operationsObject: the mapping operations of model to the role name.- the
keyis the operation(method), thevalueis the role name. - Note: the operations name is the role name if no mapping operations.
defaults:
{ create: 'add', upsert: 'edit', updateAttributes: 'edit', exists: 'view', findById: 'view', find: 'find', findOne: 'find', count: 'find', destroyById: 'delete', deleteById: 'delete' }
- the
Usage
Just enable it on component-config.json.
set DEBUG=loopback:security:role:user env vaiable to show debug info.
Model::hasPerm(perm)
History
V1.3.0
- add the
cachedto determine whether cache the perms.
V1.2.0
- add the
.owneddynamical roles toedit.owned,view.owned,find.owned, anddelete.owned. Only edit/delete/view/find owned items.
V1.1.0
- remove the limits: The same permission CAN NOT be exists in multi-roles.
- bug the hasPerm should use the match function instead minimatch
- bug updatePermsByRefs can not work properly.
- bug mongodb error: key can not contain "." for _perms is object
- bug can not change itself to roleRefs after roles changed
- add the
maxLeveloption to limit the max nested role level to avoid recusive
- avoid exception when component not enabled.
- add the
deleteUsedRoleoption to allow or forbidden cascade delete
V1.0.0
- remove the deprecated
adminRoleoption. you can define the admin Role with*.*principal.
- rename the operators option to operations
- Customize the Role and User Model.
- remove
hasRoleMethod.
- add the
Rolesmxin.- Define the
rolesandpermsfields.- roles: the
- Add the
hasPerm,addRolesandremoveRolesmethods.
- Define the
- add the
hasPerm,addRolesandremoveRolesmethods to Role and User Model.
- Performance optimization.
- cache permissions and references.
V0.2.0
- add the
Role::hasRole
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago