unacl
v0.2.1
Published
Minimal, type-safe and reactive ACL implementation
Downloads
4
Maintainers
Readme
unacl
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.
Key Features
- 🧩 Reactive
roles
andpermissions
sets - 🙆♂️ Including checks, like
can
,is
,hasEveryRole
- 🙅♀️ Excluding checks, like
missesSomePermissions
- 🪶 About 100 loc
Example
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'])
Installation
Run the following command to add unacl
to your project.
pnpm install unacl # or npm or yarn
Configuration
interface AclConfig<T = string, U = string> {
roles?: Array<T>
permissions?: Array<U>
}
Usage
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. |
Credits
- @fullstackfool for vacl which served as inspiration and base for this project.
License
MIT License © 2022 Johann Schopplich
MIT License © 2019 Karl Davies