enniel / Adonis Acl
Licence: mit
demo app: https://github.com/enniel/adonis-acl-blog-demo
Stars: ✭ 195
Programming Languages
javascript
184084 projects - #8 most used programming language
Projects that are alternatives of or similar to Adonis Acl
Bouncer
Eloquent roles and abilities.
Stars: ✭ 2,763 (+1316.92%)
Mutual labels: permissions, acl, roles
Accesscontrol
Role and Attribute based Access Control for Node.js
Stars: ✭ 1,723 (+783.59%)
Mutual labels: permissions, acl, roles
Brandenburg
Laravel Authentication Package
Stars: ✭ 79 (-59.49%)
Mutual labels: permissions, acl, roles
laravel-acl
Laravel ACL is a simple role, permission ACL for Laravel Framework.
Stars: ✭ 78 (-60%)
Mutual labels: permissions, acl, roles
nova-permissions
Add Permissions based authorization for your Nova installation via User-based Roles and Permissions. Roles are defined in the database whereas Permissions are defined in the code base.
Stars: ✭ 115 (-41.03%)
Mutual labels: permissions, acl, roles
rbac
Simple RBAC/ACL for Laravel 8 caching and permission groups.
Stars: ✭ 43 (-77.95%)
Mutual labels: permissions, acl, roles
Think Authz
An authorization library that supports access control models like ACL, RBAC, ABAC in ThinkPHP 6.0 .
Stars: ✭ 155 (-20.51%)
Mutual labels: permissions, acl, roles
Laratrust
Handle roles and permissions in your Laravel application
Stars: ✭ 1,799 (+822.56%)
Mutual labels: permissions, acl, roles
ngx-security
Security directives for your Angular application to show/hide elements based on a user roles / permissions.
Stars: ✭ 18 (-90.77%)
Mutual labels: permissions, acl, roles
Ngx Permissions
Permission and roles based access control for your angular(angular 2,4,5,6,7,9+) applications(AOT, lazy modules compatible
Stars: ✭ 749 (+284.1%)
Mutual labels: permissions, acl, roles
Vakt
Attribute-based access control (ABAC) SDK for Python
Stars: ✭ 92 (-52.82%)
Mutual labels: permissions, acl
Lock Laravel
This package is a Laravel 5 driver for Lock
Stars: ✭ 161 (-17.44%)
Mutual labels: permissions, acl
Sentinel
A framework agnostic authentication & authorization system.
Stars: ✭ 1,354 (+594.36%)
Mutual labels: permissions, roles
Unix Permissions
Swiss Army knife for Unix permissions
Stars: ✭ 106 (-45.64%)
Mutual labels: permissions, acl
Lock
A flexible, driver based Acl package for PHP 5.4+
Stars: ✭ 913 (+368.21%)
Mutual labels: permissions, acl
Laravel Auth
A powerful authentication, authorization and verification package built on top of Laravel. It provides developers with Role Based Access Control, Two-Factor Authentication, Social Authentication, and much more, compatible Laravel’s standard API and fully featured out of the box.
Stars: ✭ 128 (-34.36%)
Mutual labels: permissions, roles
Laravel Governor
Manage authorization with granular role-based permissions in your Laravel Apps.
Stars: ✭ 131 (-32.82%)
Mutual labels: permissions, roles
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.
class User extends Model {
...
static get traits () {
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 = new Role()
roleAdmin.name = 'Administrator'
roleAdmin.slug = 'administrator'
roleAdmin.description = 'manage administration privileges'
await roleAdmin.save()
const roleModerator = new Role()
roleModerator.name = 'Moderator'
roleModerator.slug = 'moderator'
roleModerator.description = 'manage moderator privileges'
await roleModerator.save()
Before, You should do first, use the HasRole
trait in Your User
Model.
class User extends Model {
...
static get traits () {
return [
'@provider:Adonis/Acl/HasRole'
]
}
...
}
Attach Role(s) To User
const user = await User.find(1)
await user.roles().attach([roleAdmin.id, roleModerator.id])
Detach Role(s) From User
const user = await User.find(1)
await user.roles().detach([roleAdmin.id])
Get User Roles
Get roles assigned to a user.
const user = await User.first()
const roles = await user.getRoles() // ['administrator', 'moderator']
Working With Permissions
Create Role Permissions
const createUsersPermission = new Permission()
createUsersPermission.slug = 'create_users'
createUsersPermission.name = 'Create Users'
createUsersPermission.description = 'create users permission'
await createUsersPermission.save()
const updateUsersPermission = new Permission()
updateUsersPermission.slug = 'update_users'
updateUsersPermission.name = 'Update Users'
updateUsersPermission.description = 'update users permission'
await updateUsersPermission.save()
const deleteUsersPermission = new Permission()
deleteUsersPermission.slug = 'delete_users'
deleteUsersPermission.name = 'Delete Users'
deleteUsersPermission.description = 'delete users permission'
await deleteUsersPermission.save()
const readUsersPermission = new Permission()
readUsersPermission.slug = 'read_users'
readUsersPermission.name = 'Read Users'
readUsersPermission.description = 'read users permission'
await readUsersPermission.save()
Before, You should do first, use the HasPermission
trait in Your User
Model.
class User extends Model {
...
static get traits () {
return [
'@provider:Adonis/Acl/HasPermission'
]
}
...
}
Attach Permissions to Role
const roleAdmin = await Role.find(1)
await roleAdmin.permissions().attach([
createUsersPermission.id,
updateUsersPermission.id,
deleteUsersPermission.is,
readUsersPermission.id
])
Detach Permissions from Role
const roleAdmin = await Role.find(1)
await roleAdmin.permissions().detach([
createUsersPermission.id,
updateUsersPermission.id,
deleteUsersPermission.is,
readUsersPermission.id
])
Get User Permissions
Get permissions assigned to a role.
const roleAdmin = await Role.find(1)
// ['create_users', 'update_users', 'delete_users', 'read_users']
await roleAdmin.getPermissions()
or
const roleAdmin = await Role.find(1)
// collection of permissions
await roleAdmin.permissions().fetch()
Working With Permissions
Create User Permissions
const createUsersPermission = new Permission()
createUsersPermission.slug = 'create_users'
createUsersPermission.name = 'Create Users'
createUsersPermission.description = 'create users permission'
await createUsersPermission.save()
const updateUsersPermission = new Permission()
updateUsersPermission.slug = 'update_users'
updateUsersPermission.name = 'Update Users'
updateUsersPermission.description = 'update users permission'
await updateUsersPermission.save()
const deleteUsersPermission = new Permission()
deleteUsersPermission.slug = 'delete_users'
deleteUsersPermission.name = 'Delete Users'
deleteUsersPermission.description = 'delete users permission'
await deleteUsersPermission.save()
const readUsersPermission = new Permission()
readUsersPermission.slug = 'read_users'
readUsersPermission.name = 'Read Users'
readUsersPermission.description = 'read users permission'
await readUsersPermission.save()
Before, You should do first, use the HasPermission
trait in Your User
Model.
class User extends Model {
...
static get traits () {
return [
'Adonis/Acl/HasPermission'
]
}
...
}
Attach Permissions to User
const user = await User.find(1)
await user.permissions().attach([
createUsersPermission.id,
updateUsersPermission.id,
deleteUsersPermission.is,
readUsersPermission.id
])
Detach Permissions from User
const user = await User.find(1)
await user.permissions().detach([
createUsersPermission.id,
updateUsersPermission.id,
deleteUsersPermission.is,
readUsersPermission.id
])
Get User Permissions
Get permissions assigned to a role.
const user = await User.find(1)
// ['create_users', 'update_users', 'delete_users', 'read_users']
await user.getPermissions()
or
const user = await User.find(1)
// collection of permissions
await user.permissions().fetch()
Protect Routes
Syntax:
and (&&)
- administrator && moderator
or (||)
- administrator || moderator
not (!)
- administrator && !moderator
// check roles
Route
.get('/users')
.middleware(['auth:jwt', 'is:(administrator || moderator) && !customer'])
// check permissions
Route
.get('/posts')
.middleware(['auth:jwt', 'can:read_posts'])
// scopes (using permissions table for scopes)
Route
.get('/posts')
.middleware(['auth:jwt', 'scope:posts.*'])
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.
Note that the project description data, including the texts, logos, images, and/or trademarks,
for each open source project belongs to its rightful owner.
If you wish to add or remove any projects, please contact us at [email protected].