An open API service indexing awesome lists of open source software.

https://github.com/dystcz/nuxt-permissions

Nuxt module for permission management
https://github.com/dystcz/nuxt-permissions

nuxt nuxt3 permissions roles roles-management roles-permission-management

Last synced: 6 months ago
JSON representation

Nuxt module for permission management

Awesome Lists containing this project

README

          

# Nuxt Permissions

[![npm version](https://badge.fury.io/js/nuxt-permissions.svg)](https://badge.fury.io/js/nuxt-permissions)

This is a simple package for integrating roles and permissions with a Nuxt application.
It is designed to complement backend permissions, and should not be used as the sole solution.

Please note that this is alpha quality software and **should not be used in production**.
This package is a work in progress and is subject to change.

## Installation

```bash
yarn add nuxt-permissions
# or
npm i nuxt-permissions
```

Introduce the module into the `nuxt.config.[js,ts]`. and set `ssr` to `false`

```js
export default defineNuxtConfig({
ssr: false,
modules: [
'nuxt-permissions'
// ...
]
})
```

## Usage

### Setting user permissions or roles

To set user permissions or roles, you must use a `usePermissions` or `useRoles` composable, that contains an array of strings for permissions or roles.

```ts
const userPermissions = usePermissions()
const userRoles = useRoles()

const user = await login() // your login functionality
userPermissions.value = user.permissions // ['read posts', ..., 'delete posts']
userRoles.value = user.roles // ['admin', 'editor']
```

### Middleware usage

To use the module, you must set `nuxt-permissions` as middleware and add `permissions` or `roles` in `definePageMeta`. For example, for the admin dashboard, you would set `roles` to `['admin']` and/or `permissions` to `['access dashboard']`, depending on your backend settings.

You can use a combination of both, but permissions have higher priority than roles.

If roles or permissions are not set, access to that page is unrestricted.

```ts
// ~/pages/admin/dashboard
definePageMeta({
middleware: [
'auth', // your auth middleware
'nuxt-permissions'
],
roles: ['admin'],
permissions: ['access dashboard']
})
```

### Directives

Directives can be a string or an array of strings. If an array is passed, only one item needs to apply for the condition to be fulfilled.

#### v-can

Works as `v-if` but for permissions

```vue

Edit

View or edit

```

#### v-can:not

Works as negated `v-if` but for permissions

```vue


You do not have permissions to edit this post


You do not have permissions to edit nor view this post

```

#### v-role

Works as `v-if` but for roles

```vue


You are admin


You are admin or editor

```

#### v-role:not

Works as negated `v-if` but for roles

```vue


You are not admin


You are not admin nor editor

```

## Development

- Run `npm run dev:prepare` to generate type stubs.
- Use `npm run dev` to start playground in development mode.
- Use `npm run test` to run tests.