unacl
TypeScript icon, indicating that this package has built-in type declarations

0.2.1 • Public • Published

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 and permissions 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

License

MIT License © 2022 Johann Schopplich

MIT License © 2019 Karl Davies

Package Sidebar

Install

npm i unacl

Weekly Downloads

0

Version

0.2.1

License

MIT

Unpacked Size

10.5 kB

Total Files

5

Last publish

Collaborators

  • johannschopplich