Minimal, type-safe and reactive ACL implementation.
This library doesn't replace a full-featured ACL system, like CASL. It rather serves a lightweight base for simple access control requirements, like SPAs.
unacl
utilizes @vue/reactivity under the hood and wraps roles
and persmissions
into reactive sets. Thus, you can pair it with Vue in an instant. Of course, you don't have to.
- 🧩 Reactive
roles
andpermissions
sets - 🙆♂️ Including checks, like
can
,is
,hasEveryRole
- 🙅♀️ Excluding checks, like
missesSomePermissions
- 🪶 About 100 loc
import { ACL } from 'unacl'
// Setup the acl instance
const acl = new ACL({
permissions: ['read'],
roles: ['admin', 'editor'],
})
const isEditor = acl.is('editor') // `true`
if (acl.can('archive'))
console.log('You are not allowed to archive this entity')
// Change permissions, say after sign in
if (acl.has('admin'))
acl.addPermissions(['create', 'update', 'delete'])
else
acl.addPermissions(['update'])
Run the following command to add unacl
to your project.
pnpm install unacl # or npm or yarn
interface AclConfig<T = string, U = string> {
roles?: Array<T>
permissions?: Array<U>
}
There are also a number of methods you can leverage on the ACL
instance:
Method | Description |
---|---|
can() |
Shorthand accessor for hasEveryPermission() . |
hasEveryPermission() |
Assert the store has every given permission(s). |
hasSomePermissions() |
Assert the store has some of the given permission(s). |
missesEveryPermission() |
Assert the store is missing every given permission(s). |
missesSomePermissions() |
Assert the store is missing at least 1 of the given permission(s). |
has() & is()
|
Shorthand accessor for hasEveryRole() . |
hasEveryRole() |
Assert the store has every given role(s). |
hasSomeRoles() |
Assert the store has some of the given role(s). |
missesEveryRole() |
Assert the store is missing every given role(s). |
missesSomeRoles() |
Assert the store is missing at least 1 of the given role(s). |
getRoles() |
Gets the array of currently stored roles. |
getPermissions() |
Gets the array of currently stored permissions. |
setRoles() |
Overwrites the role store with the given new roles. |
setPermissions() |
Overwrites the permission store with the given new permissions. |
addRoles() |
Adds the given role(s) to the role store. |
addPermissions() |
Adds the given permission(s) to the permission store. |
clearRoles() |
Clears the currently stored roles. |
clearPermissions() |
Clears the currently stored permissions. |
clear() |
Clears both the role and permission store. |
- @fullstackfool for vacl which served as inspiration and base for this project.
MIT License © 2022 Johann Schopplich
MIT License © 2019 Karl Davies