# nuxt-can
[![npm version][npm-version-src]][npm-version-href]
[![npm downloads][npm-downloads-src]][npm-downloads-href]
[![License][license-src]][license-href]
[![Nuxt][nuxt-src]][nuxt-href]
`nuxt-can` apporte deux directives Vue (`v-can`, `v-cannot`) pour écrire des permissions ultra lisibles dans les templates Nuxt. Les directives sont transformées à la compilation en appels à une fonction `__can__` fournie par l’application hôte tout en restant 100 % tree-shake friendly et parfaitement typées côté TypeScript.
- [✨ Release Notes](/CHANGELOG.md)
## Features
- ✅ Directives `v-can` / `v-cannot` transformées en `v-if` / `!v-if`
- ✅ Merge automatique avec des `v-if` existants (pas de runtime inutile)
- ✅ Proxy global `can` + types générés selon votre configuration de permissions
- ✅ Import configurable de la fonction `__can__` (store, API, …)
- ✅ Erreurs compile-time claires (cas interdits détectés avant build)
## Quick Setup
Installez le module dans votre application Nuxt :
```bash
npm install nuxt-can
# ou
npx nuxi module add nuxt-can
```
Déclarez ensuite le module et configurez vos permissions :
```ts
// nuxt.config.ts
import NuxtCan from 'nuxt-can'
export default defineNuxtConfig({
modules: [NuxtCan],
nuxtCan: {
permissions: {
employee: ['view', 'edit'],
contract: ['create'],
},
canFunctionImport: '~/permissions/can', // chemin vers votre implémentation __can__
},
})
```
Implémentez la fonction `__can__` dans le fichier ciblé (`~/permissions/can` dans l’exemple) :
```ts
// permissions/can.ts
const permissionsStore = usePermissionsStore()
export function __can__(path: string[]) {
return permissionsStore.check(path.join('.'))
}
```
Le module génère automatiquement un proxy `can` typé :
```vue
Accès refusé
Accès refusé
``` ### Règles et erreurs surveillées - `v-cannot` doit suivre immédiatement un `v-can` (aucun autre composant entre les deux). - Un `v-can` ne peut pas cohabiter avec `v-else` / `v-else-if`. - `v-cannot` n’accepte ni expression, ni argument, ni `v-if`. - Un seul `v-cannot` par `v-can`. - Les expressions doivent suivre le pattern `can.x.y` (au moins deux niveaux après `can`). Toute violation produit une erreur compile-time lisible. ### Types générés À partir de la clé `permissions`, le module génère un fichier `.d.ts` qui expose : - `can` / `$can` sur `ComponentCustomProperties` - `__can__` sur les templates/scripts Nuxt - `NuxtApp.$can` et `NuxtApp.$__can__` La DX template + TypeScript reste donc impeccable sans configuration additionnelle. ## Contribution