{"id":36829450,"url":"https://github.com/verful/adonis-permissions","last_synced_at":"2026-01-12T14:11:07.661Z","repository":{"id":37991852,"uuid":"462964474","full_name":"verful/adonis-permissions","owner":"verful","description":"Easily manage user roles and permissions on AdonisJS applications","archived":false,"fork":false,"pushed_at":"2024-02-05T13:03:17.000Z","size":1047,"stargazers_count":47,"open_issues_count":7,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-08-24T06:25:14.879Z","etag":null,"topics":["adonisjs","permission","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/verful.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2022-02-24T01:21:32.000Z","updated_at":"2025-06-30T12:57:46.000Z","dependencies_parsed_at":"2023-12-28T06:31:47.669Z","dependency_job_id":"1edc1667-0f48-4655-aabb-26d87eb3d924","html_url":"https://github.com/verful/adonis-permissions","commit_stats":null,"previous_names":["verful/permissions"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/verful/adonis-permissions","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/verful%2Fadonis-permissions","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/verful%2Fadonis-permissions/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/verful%2Fadonis-permissions/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/verful%2Fadonis-permissions/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/verful","download_url":"https://codeload.github.com/verful/adonis-permissions/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/verful%2Fadonis-permissions/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28340384,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T12:22:26.515Z","status":"ssl_error","status_checked_at":"2026-01-12T12:22:10.856Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["adonisjs","permission","typescript"],"created_at":"2026-01-12T14:11:05.438Z","updated_at":"2026-01-12T14:11:07.651Z","avatar_url":"https://github.com/verful.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/verful/permissions/raw/main/.github/banner.png\" width=\"1200px\"\u003e\n\u003c/div\u003e\n\n\n\u003cdiv align=\"center\"\u003e\n  \u003ch2\u003e\u003cb\u003eAdonis Permissions\u003c/b\u003e\u003c/h2\u003e\n  \u003cp\u003eEasily manage user roles and permissions\u003c/p\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n[![npm-image]][npm-url] [![license-image]][license-url] [![typescript-image]][typescript-url]\n\n\u003c/div\u003e\n\n\n## **Pre-requisites**\nThe `@verful/permissions` package requires `@adonisjs/core \u003e= 5` and `@adonisjs/lucid \u003e= 16`\n\n## **Setup**\n\nInstall the package from the npm registry as follows.\n\n```\nnpm i @verful/permissions\n# or\nyarn add @verful/permissions\n```\n\nNext, configure the package by running the following ace command.\n\n```\nnode ace configure @verful/permissions\n```\n\n## **Getting started**\nOnce the package is installed the first thing you want to do is apply the `Authorizable` mixin from `@ioc:Verful/Permissions/Mixins` into a model\n\n```typescript\nimport { Authorizable } from '@ioc:Verful/Permissions/Mixins'\nimport { compose } from '@ioc:Adonis/Core/Helpers'\nimport { BaseModel } from '@ioc:Adonis/Lucid/Orm'\n\nconst config = { \n  permissionsPivotTable: 'user_has_permissions',\n  rolesPivotTable: 'user_has_roles'\n}\n\nexport default class User extends compose(BaseModel, Authorizable(config)) {}\n```\n\nNow its time to create the pivot-table migration files\n```\nnode ace permissions:pivot-table\n```\n\nAfter the mixin is applied you can do stuff like this\n```typescript\nawait user.givePermissionTo('view-users')\nawait user.assignRole('admin')\n\nawait role.givePermissionTo('edit-users')\n```\n\n## **Basic usage**\nThe package allows you to associate Lucid models with roles and permissions. Roles and Permissions are just Lucid models that can be directly managed like any other model\n\n```typescript\nimport Permission from '@ioc:Verful/Permissions/Permission'\nimport Role from '@ioc:Verful/Permissions/Role'\n\nconst role = await Role.create({ name: 'writer' })\nconst permission = await Permission.create({ name: 'edit-posts' })\n```\n\n### **Managing permissions**\nYou can manage permissions for roles and models using the same methods\n\n```typescript\n// Assigning permissions\nawait role.givePermissionTo('do-things')\n\n// Removing permissions\nawait user.revokePermissionTo('do-things')\n\n// Synchronize permissions\nawait role.syncPermissions('do-things', 'try-things')\n```\n\n### **Checking for permissions**\n```typescript\n// Checking permissions\nawait role.hasPermissionTo('do-things') // returns true or false\nawait user.checkPermissionTo('do-things') // returns true or throws\n\n// Returns true if the model has any of the given permissions\nawait role.hasAnyPermission('do-things', 'try-things') \n\n// Returns true if the model has all of the given permissions\nawait user.hasAllPermissions('do-things', 'try-things')\n\n// Returns all permission names\nawait user.getPermissionNames()\n```\n\n### **Managing Roles**\nYou can manage roles for models using the `Authorizable` mixin\n\n```typescript\n// Assign role\nawait user.assignRole('admin')\n\n// Revoke role\nawait user.revokeRole('admin')\n\n// Synchronize roles\nawait user.syncRoles('admin', 'writer', role)\n```\n\n### **Checking for roles**\nGenerally you should be checking against permissions vs checking for roles, but if you want to check against a role instead use one of the following methods\n\n```typescript\nawait user.hasRole('admin')\n\n// Returns true if the model has any of the given permissions\nawait role.hasAnyRoles('admin', 'writer') \n\n// Returns true if the model has all of the given permissions\nawait user.hasAllRoles('admin', 'writer')\n\n// Returns all role names\nawait user.getRoleNames()\n```\n\n### **Accessing direct and role permissions**\n```typescript\n// Check if the model has the permission directly\nawait user.hasDirectPermission('do-things')\n\n// Check if the model has the permission via role\nawait user.hasPermissionViaRole('do-things')\n\n// Get all direct permissions\nawait user.getDirectPermissions()\n\n// Get all permissions via roles\nawait user.getPermissionsViaRoles()\n\n// Get all permissions combined\nawait user.getAllPermissions()\n```\n\n\n[npm-image]: https://img.shields.io/npm/v/@verful/permissions.svg?style=for-the-badge\u0026logo=npm\n[npm-url]: https://npmjs.org/package/@verful/permissions \"npm\"\n\n[license-image]: https://img.shields.io/npm/l/@verful/permissions?color=blueviolet\u0026style=for-the-badge\n[license-url]: LICENSE.md \"license\"\n\n[typescript-image]: https://img.shields.io/badge/Typescript-294E80.svg?style=for-the-badge\u0026logo=typescript\n[typescript-url]:  \"typescript\"\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fverful%2Fadonis-permissions","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fverful%2Fadonis-permissions","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fverful%2Fadonis-permissions/lists"}