Basic Usage

Middleware

Protect routes with role and permission middlewares.

node ace configure registers three named middlewares in start/kernel.ts:

start/kernel.ts
export const middleware = router.named({
  // ...
  role: () => import('@eienjs/adonisjs-permission/middleware/role_middleware'),
  permission: () => import('@eienjs/adonisjs-permission/middleware/permission_middleware'),
  roleOrPermission: () => import('@eienjs/adonisjs-permission/middleware/role_or_permission_middleware'),
})

Use them after middleware.auth():

start/routes.ts
import router from '@adonisjs/core/services/router'
import { middleware } from '#start/kernel'

router
  .post('projects', [ProjectsController, 'store'])
  .use([
    middleware.auth(),
    middleware.permission({ permissions: ['publish projects', 'edit projects'] }),
  ])

router
  .get('admin', [AdminController, 'index'])
  .use([middleware.auth(), middleware.role({ roles: ['admin', 'manager'] })])

router
  .get('reports', [ReportsController, 'index'])
  .use([
    middleware.auth(),
    middleware.roleOrPermission({ roleOrPermission: ['administrator', 'view reports'] }),
  ])

Options

MiddlewareOptionDescription
rolerolesRole(s). Passes if the user has any.
permissionpermissionsPermission(s). Passes if the user has any.
roleOrPermissionroleOrPermissionPasses if the user has any of the roles or permissions.

Values can be an array or a string separated by | (e.g. 'admin|manager'). All of them also accept an optional guard.

If there is no authenticated user, the user lacks the required access, or the user model does not use HasAuthorizable, a 403 E_PERMISSION_UNAUTHORIZED_ACCESS is thrown.