Adonis ACL
Adonis ACL adds role based permissions to built in Auth System of Adonis Framework.
Installation
- Add package:
$ npm i adonis-acl --save
or
$ yarn add adonis-acl
- Register ACL providers inside the your start/app.js file.
const providers = ... 'adonis-acl/providers/AclProvider' ... const aceProviders = ... 'adonis-acl/providers/CommandsProvider' ...
- Setting up aliases inside
start/app.js
file.
const aliases = ... Role: 'Adonis/Acl/Role' Permission: 'Adonis/Acl/Permission' ...
- Setting up traits to
User
model.
... static { return '@provider:Adonis/Acl/HasRole' '@provider:Adonis/Acl/HasPermission' } ...
- Setting up middlewares inside
start/kernel.js
file.
const namedMiddleware = ... is: 'Adonis/Acl/Is' can: 'Adonis/Acl/Can' ...
For using in views
const globalMiddleware = ... 'Adonis/Acl/Init' ...
- Publish the package migrations to your application and run these with
./ace migrations:run
.
$ ./ace acl:setup
Working With Roles
Create Role
Lets create your first roles.
const roleAdmin = roleAdminname = 'Administrator'roleAdminslug = 'administrator'roleAdmindescription = 'manage administration privileges'await roleAdmin const roleModerator = roleModeratorname = 'Moderator'roleModeratorslug = 'moderator'roleModeratordescription = 'manage moderator privileges'await roleModerator
Before, You should do first, use the HasRole
trait in Your User
Model.
... static { return '@provider:Adonis/Acl/HasRole' } ...
Attach Role(s) To User
const user = await Userawait user
Detach Role(s) From User
const user = await Userawait user
Get User Roles
Get roles assigned to a user.
const user = await Userconst roles = await user // ['administrator', 'moderator']
Working With Permissions
Create Role Permissions
const createUsersPermission = createUsersPermissionslug = 'create_users'createUsersPermissionname = 'Create Users'createUsersPermissiondescription = 'create users permission'await createUsersPermission const updateUsersPermission = updateUsersPermissionslug = 'update_users'updateUsersPermissionname = 'Update Users'updateUsersPermissiondescription = 'update users permission'await updateUsersPermission const deleteUsersPermission = deleteUsersPermissionslug = 'delete_users'deleteUsersPermissionname = 'Delete Users'deleteUsersPermissiondescription = 'delete users permission'await deleteUsersPermission const readUsersPermission = readUsersPermissionslug = 'read_users'readUsersPermissionname = 'Read Users'readUsersPermissiondescription = 'read users permission'await readUsersPermission
Before, You should do first, use the HasPermission
trait in Your User
Model.
... static { return '@provider:Adonis/Acl/HasPermission' } ...
Attach Permissions to Role
const roleAdmin = await Roleawait roleAdmin
Detach Permissions from Role
const roleAdmin = await Roleawait roleAdmin
Get User Permissions
Get permissions assigned to a role.
const roleAdmin = await Role// ['create_users', 'update_users', 'delete_users', 'read_users']await roleAdmin
or
const roleAdmin = await Role// collection of permissionsawait roleAdmin
Working With Permissions
Create User Permissions
const createUsersPermission = createUsersPermissionslug = 'create_users'createUsersPermissionname = 'Create Users'createUsersPermissiondescription = 'create users permission'await createUsersPermission const updateUsersPermission = updateUsersPermissionslug = 'update_users'updateUsersPermissionname = 'Update Users'updateUsersPermissiondescription = 'update users permission'await updateUsersPermission const deleteUsersPermission = deleteUsersPermissionslug = 'delete_users'deleteUsersPermissionname = 'Delete Users'deleteUsersPermissiondescription = 'delete users permission'await deleteUsersPermission const readUsersPermission = readUsersPermissionslug = 'read_users'readUsersPermissionname = 'Read Users'readUsersPermissiondescription = 'read users permission'await readUsersPermission
Before, You should do first, use the HasPermission
trait in Your User
Model.
... static { return 'Adonis/Acl/HasPermission' } ...
Attach Permissions to User
const user = await Userawait user
Detach Permissions from User
const user = await Userawait user
Get User Permissions
Get permissions assigned to a role.
const user = await User// ['create_users', 'update_users', 'delete_users', 'read_users']await user
or
const user = await User// collection of permissionsawait user
Protect Routes
Syntax:
and (&&)
- administrator && moderator
or (||)
- administrator || moderator
not (!)
- administrator && !moderator
// check rolesRoute // check permissionsRoute // scopes (using permissions table for scopes)Route
Using in Views
@loggedIn
@is('administrator')
<h2>Protected partial</h2>
@endis
@endloggedIn
or
@loggedIn
@can('create_posts && delete_posts')
<h2>Protected partial</h2>
@endcan
@endloggedIn
or
@loggedIn
@scope('posts.create', 'posts.delete')
<h2>Protected partial</h2>
@endscope
@endloggedIn
Credits
Support
Having trouble? Open an issue!
License
The MIT License (MIT). Please see License File for more information.