# unacl

> Minimal, type-safe and reactive ACL implementation

Latest version **0.2.1** (published 2022-09-23) · MIT license · 0 weekly downloads

> **Deprecated.** This package is deprecated.

## Install

```sh
npm install unacl
pnpm add unacl
yarn add unacl
bun add unacl
```

## Health

**Score 10/100 (F)** — status: deprecated.

Negative: deprecated.

## Facts

| | |
|---|---|
| Version | 0.2.1 |
| Published | 2022-09-23 |
| First published | 2022-03-01 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM |
| Dependencies | 1 |
| Unpacked size | 10.2 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 11 |
| Author | Johann Schopplich |
| Maintainers | johannschopplich |
| Keywords | access-control, acl, roles, permissions, reactive |

## Links

- npm: https://www.npmjs.com/package/unacl
- Repository: https://github.com/johannschopplich/unacl
- Homepage: https://github.com/johannschopplich/unacl#readme
- Issues: https://github.com/johannschopplich/unacl/issues
- npm.io page: https://npm.io/package/unacl

## Dependencies (1)

- [@vue/reactivity](https://npm.io/package/@vue/reactivity.md) ^3.2.39

## Recent versions

- 0.2.1 (latest) — 2022-09-23
- 0.2.0 — 2022-07-13
- 0.1.0 — 2022-03-01

## README

# unacl

> Minimal, type-safe and reactive ACL implementation.

This library doesn't replace a full-featured ACL system, like [CASL](https://github.com/stalniy/casl/). It rather serves a lightweight base for simple access control requirements, like SPAs.

`unacl` utilizes [@vue/reactivity](https://www.npmjs.com/package/@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

```ts
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.

```bash
pnpm install unacl # or npm or yarn
```

## Configuration

```ts
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](https://github.com/fullstackfool) for [vacl](https://github.com/fullstackfool/vacl) which served as inspiration and base for this project.

## License

[MIT](./LICENSE) License © 2022 [Johann Schopplich](https://github.com/johannschopplich)

[MIT](./LICENSE) License © 2019 [Karl Davies](https://github.com/fullstackfool)

---
_Source: https://npm.io/package/unacl · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
