# @mostajs/access-model

**Auteur** : Dr Hamid MADANI <drmdh@msn.com> · **Licence** : AGPL-3.0-or-later
**Niveau** : N0 · **15 tests** · Le vocabulaire partagé de l'identité et de l'autorisation.

Les entités neutres du contrôle d'accès — **Utilisateur, Rôle, Permission, Catégorie, Compte** —
sous forme de **schémas** (ORM) et de **types** (DTO + définitions). Rien d'UI, rien de logique :
des formes de données, partagées par tout le continuum d'accès.

## Pourquoi ce module existe

Ce vocabulaire vivait dans **`@mostajs/rbac`** (N2, l'autorisation). Conséquence : **`@mostajs/auth`**
(l'authentification — IBAC) importait les schémas `User`/`Role`/`Permission` **depuis rbac**. C'est
l'ordre naturel du continuum **renversé** : on sait *qui* AVANT de savoir *ce qu'il a le droit de faire*.

```
   Continuum d'accès :   IBAC → RBAC → ABAC → PBAC → ReBAC
                         (auth) (rbac)  (abac) (pbac) (rebac)
                            └──────┴───────┴──────┴──────┘
                          tous partagent le même modèle → @mostajs/access-model (N0)
```

En descendant le modèle en N0, sous tout le monde :
- `auth` s'en sert **sans dépendre de `rbac`** — l'inversion de sens disparaît ;
- `rbac` le **ré-exporte** (aucune rupture) et le possède fonctionnellement ;
- le continuum entier (abac/pbac/rebac) partage enfin un vocabulaire **déclaré**, au lieu de le
  redéfinir chacun dans son coin.

## Contenu

**Schémas** (ORM) : `UserSchema`, `RoleSchema`, `PermissionSchema`, `PermissionCategorySchema`,
`AccountSchema`.

**Types** : `UserDTO`, `RoleDTO`, `PermissionDTO`, `PermissionCategoryDTO`, `AccountDTO`,
`PermissionDefinition`, `RoleDefinition`, `CategoryDefinition`.

## Ce qui n'est PAS ici

Les formes de **présentation** (`RoleData`, `MatrixData`, `RBACConfig`, `CategoryData`…) restent
dans `@mostajs/rbac` : elles sont propres à son IHM. Le modèle et l'écran ne se mélangent pas.

## Usage

```ts
import { UserSchema, RoleSchema } from '@mostajs/access-model'
import type { PermissionDefinition } from '@mostajs/access-model'
```

## Tests

```bash
npm test   # 15 tests — les 5 schémas bien formés (collections distinctes), tous les types exportés
```
