@mostajs/rbac 2.0.8 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/api/categories-id.js +1 -1
  2. package/dist/api/categories.js +1 -1
  3. package/dist/api/matrix.js +1 -1
  4. package/dist/api/permissions-id.js +1 -1
  5. package/dist/api/permissions.js +1 -1
  6. package/dist/api/roles-id.js +1 -1
  7. package/dist/api/roles.js +1 -1
  8. package/dist/api/seed.js +1 -1
  9. package/dist/api/users-id.js +1 -1
  10. package/dist/api/users.js +1 -1
  11. package/dist/components/CategoriesManager.js +9 -9
  12. package/dist/components/PermissionMatrix.js +6 -6
  13. package/dist/components/PermissionsManager.js +10 -10
  14. package/dist/components/RBACManager.js +5 -5
  15. package/dist/components/RolesManager.js +9 -9
  16. package/dist/components/UsersManager.js +10 -10
  17. package/dist/helpers/permissions.d.ts +12 -0
  18. package/dist/helpers/permissions.d.ts.map +1 -0
  19. package/dist/helpers/permissions.js +29 -0
  20. package/dist/helpers/permissions.js.map +1 -0
  21. package/dist/index.d.ts +1 -0
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +17 -15
  24. package/dist/index.js.map +1 -1
  25. package/dist/lib/module-info.d.ts +1 -0
  26. package/dist/lib/module-info.d.ts.map +1 -1
  27. package/dist/lib/module-info.js +1 -0
  28. package/dist/lib/module-info.js.map +1 -1
  29. package/dist/lib/rbac-seed.js +1 -0
  30. package/dist/lib/rbac-seed.js.map +1 -1
  31. package/dist/register.js +1 -1
  32. package/dist/repositories/permission-category.repository.js +1 -1
  33. package/dist/repositories/permission.repository.js +1 -1
  34. package/dist/repositories/role.repository.js +1 -1
  35. package/dist/repositories/user.repository.js +1 -1
  36. package/dist/schemas/user.schema.d.ts.map +1 -1
  37. package/dist/schemas/user.schema.js +13 -0
  38. package/dist/schemas/user.schema.js.map +1 -1
  39. package/dist/server.d.ts +1 -0
  40. package/dist/server.d.ts.map +1 -1
  41. package/dist/server.js +20 -18
  42. package/dist/server.js.map +1 -1
  43. package/package.json +6 -1
@@ -1,7 +1,7 @@
1
1
  // Author: Dr Hamid MADANI drmdh@msn.com
2
2
  // RBAC API handler: PUT/DELETE /admin/categories/[id]
3
3
  import { NextResponse } from 'next/server';
4
- import { getRbacRepos } from '../lib/repos-factory.js';
4
+ import { getRbacRepos } from '../lib/repos-factory';
5
5
  import { z } from 'zod';
6
6
  const updateCategorySchema = z.object({
7
7
  label: z.string().min(1).optional(),
@@ -1,7 +1,7 @@
1
1
  // Author: Dr Hamid MADANI drmdh@msn.com
2
2
  // RBAC API handler: GET/POST /admin/categories
3
3
  import { NextResponse } from 'next/server';
4
- import { getRbacRepos } from '../lib/repos-factory.js';
4
+ import { getRbacRepos } from '../lib/repos-factory';
5
5
  import { z } from 'zod';
6
6
  const createCategorySchema = z.object({
7
7
  name: z.string().min(1).regex(/^[a-z][a-z0-9_]*$/, 'Format requis : minuscules, chiffres et underscores'),
@@ -1,7 +1,7 @@
1
1
  // Author: Dr Hamid MADANI drmdh@msn.com
2
2
  // RBAC API handler: GET/POST /admin/permissions/matrix
3
3
  import { NextResponse } from 'next/server';
4
- import { getRbacRepos } from '../lib/repos-factory.js';
4
+ import { getRbacRepos } from '../lib/repos-factory';
5
5
  import { z } from 'zod';
6
6
  export function createMatrixHandler(config) {
7
7
  const { checkPermission, adminPermission, categoryDefinitions = [] } = config;
@@ -1,7 +1,7 @@
1
1
  // Author: Dr Hamid MADANI drmdh@msn.com
2
2
  // RBAC API handler: PUT/DELETE /admin/permissions/[id]
3
3
  import { NextResponse } from 'next/server';
4
- import { getRbacRepos } from '../lib/repos-factory.js';
4
+ import { getRbacRepos } from '../lib/repos-factory';
5
5
  import { z } from 'zod';
6
6
  const updatePermissionSchema = z.object({
7
7
  description: z.string().optional(),
@@ -1,7 +1,7 @@
1
1
  // Author: Dr Hamid MADANI drmdh@msn.com
2
2
  // RBAC API handler: GET/POST /admin/permissions
3
3
  import { NextResponse } from 'next/server';
4
- import { getRbacRepos } from '../lib/repos-factory.js';
4
+ import { getRbacRepos } from '../lib/repos-factory';
5
5
  import { z } from 'zod';
6
6
  const createPermissionSchema = z.object({
7
7
  name: z.string().min(1).regex(/^[a-z_]+:[a-z_]+$/, 'Format requis : categorie:action'),
@@ -1,7 +1,7 @@
1
1
  // Author: Dr Hamid MADANI drmdh@msn.com
2
2
  // RBAC API handler: GET/PUT/DELETE /admin/roles/[id]
3
3
  import { NextResponse } from 'next/server';
4
- import { getRbacRepos } from '../lib/repos-factory.js';
4
+ import { getRbacRepos } from '../lib/repos-factory';
5
5
  import { z } from 'zod';
6
6
  const updateRoleSchema = z.object({
7
7
  name: z.string().min(1).regex(/^[a-z][a-z0-9_]*$/).optional(),
package/dist/api/roles.js CHANGED
@@ -1,7 +1,7 @@
1
1
  // Author: Dr Hamid MADANI drmdh@msn.com
2
2
  // RBAC API handler: GET/POST /admin/roles
3
3
  import { NextResponse } from 'next/server';
4
- import { getRbacRepos } from '../lib/repos-factory.js';
4
+ import { getRbacRepos } from '../lib/repos-factory';
5
5
  import { z } from 'zod';
6
6
  const createRoleSchema = z.object({
7
7
  name: z.string().min(1).regex(/^[a-z][a-z0-9_]*$/, 'Le nom doit être en minuscules (lettres, chiffres, underscores)'),
package/dist/api/seed.js CHANGED
@@ -1,7 +1,7 @@
1
1
  // Author: Dr Hamid MADANI drmdh@msn.com
2
2
  // RBAC API handler: POST /admin/permissions/seed
3
3
  import { NextResponse } from 'next/server';
4
- import { getRbacRepos } from '../lib/repos-factory.js';
4
+ import { getRbacRepos } from '../lib/repos-factory';
5
5
  export function createSeedHandler(config) {
6
6
  const { checkPermission, adminPermission, permissionDefinitions, defaultRoles, categoryDefinitions, } = config;
7
7
  async function POST() {
@@ -13,7 +13,7 @@ var __rest = (this && this.__rest) || function (s, e) {
13
13
  // RBAC API handler: GET/PUT/DELETE /users/[id]
14
14
  import { NextResponse } from 'next/server';
15
15
  import { hashPassword } from '@mostajs/auth/lib/password';
16
- import { getRbacRepos } from '../lib/repos-factory.js';
16
+ import { getRbacRepos } from '../lib/repos-factory';
17
17
  import { z } from 'zod';
18
18
  const updateUserSchema = z.object({
19
19
  email: z.string().email().optional(),
package/dist/api/users.js CHANGED
@@ -13,7 +13,7 @@ var __rest = (this && this.__rest) || function (s, e) {
13
13
  // RBAC API handler: GET/POST /users
14
14
  import { NextResponse } from 'next/server';
15
15
  import { hashPassword } from '@mostajs/auth/lib/password';
16
- import { getRbacRepos } from '../lib/repos-factory.js';
16
+ import { getRbacRepos } from '../lib/repos-factory';
17
17
  import { z } from 'zod';
18
18
  const createUserSchema = z.object({
19
19
  email: z.string().email(),
@@ -3,17 +3,17 @@
3
3
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
4
  import { useState } from 'react';
5
5
  import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
6
- import { Button } from './ui/button.js';
7
- import { Input } from './ui/input.js';
8
- import { Label } from './ui/label.js';
9
- import { Badge } from './ui/badge.js';
10
- import { Card, CardContent } from './ui/card.js';
11
- import { Dialog, DialogContent, DialogHeader, DialogTitle, } from './ui/dialog.js';
12
- import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from './ui/alert-dialog.js';
13
- import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from './ui/table.js';
6
+ import { Button } from './ui/button';
7
+ import { Input } from './ui/input';
8
+ import { Label } from './ui/label';
9
+ import { Badge } from './ui/badge';
10
+ import { Card, CardContent } from './ui/card';
11
+ import { Dialog, DialogContent, DialogHeader, DialogTitle, } from './ui/dialog';
12
+ import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from './ui/alert-dialog';
13
+ import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from './ui/table';
14
14
  import { Plus, Pencil, Trash2, Loader2 } from 'lucide-react';
15
15
  import { toast } from 'sonner';
16
- import { createCategoriesApi, createPermissionsApi } from '../lib/rbac-api.js';
16
+ import { createCategoriesApi, createPermissionsApi } from '../lib/rbac-api';
17
17
  const defaultT = (key) => key;
18
18
  export function CategoriesManager({ apiBasePath = '/api', t = defaultT, }) {
19
19
  const catApi = createCategoriesApi(apiBasePath);
@@ -3,14 +3,14 @@
3
3
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
4
  import { useState, useCallback, Fragment } from 'react';
5
5
  import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
6
- import { Button } from './ui/button.js';
7
- import { Badge } from './ui/badge.js';
8
- import { Card, CardContent } from './ui/card.js';
9
- import { Checkbox } from './ui/checkbox.js';
10
- import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from './ui/table.js';
6
+ import { Button } from './ui/button';
7
+ import { Badge } from './ui/badge';
8
+ import { Card, CardContent } from './ui/card';
9
+ import { Checkbox } from './ui/checkbox';
10
+ import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from './ui/table';
11
11
  import { Loader2, Save, Database } from 'lucide-react';
12
12
  import { toast } from 'sonner';
13
- import { createMatrixApi } from '../lib/rbac-api.js';
13
+ import { createMatrixApi } from '../lib/rbac-api';
14
14
  const defaultT = (key) => key;
15
15
  export function PermissionMatrix({ apiBasePath = '/api', t = defaultT, }) {
16
16
  const api = createMatrixApi(apiBasePath);
@@ -3,18 +3,18 @@
3
3
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
4
  import { useState } from 'react';
5
5
  import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
6
- import { Button } from './ui/button.js';
7
- import { Input } from './ui/input.js';
8
- import { Label } from './ui/label.js';
9
- import { Badge } from './ui/badge.js';
10
- import { Card, CardContent } from './ui/card.js';
11
- import { Dialog, DialogContent, DialogHeader, DialogTitle, } from './ui/dialog.js';
12
- import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from './ui/alert-dialog.js';
13
- import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from './ui/table.js';
14
- import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from './ui/select.js';
6
+ import { Button } from './ui/button';
7
+ import { Input } from './ui/input';
8
+ import { Label } from './ui/label';
9
+ import { Badge } from './ui/badge';
10
+ import { Card, CardContent } from './ui/card';
11
+ import { Dialog, DialogContent, DialogHeader, DialogTitle, } from './ui/dialog';
12
+ import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from './ui/alert-dialog';
13
+ import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from './ui/table';
14
+ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from './ui/select';
15
15
  import { Plus, Pencil, Trash2, Loader2 } from 'lucide-react';
16
16
  import { toast } from 'sonner';
17
- import { createPermissionsApi, createCategoriesApi } from '../lib/rbac-api.js';
17
+ import { createPermissionsApi, createCategoriesApi } from '../lib/rbac-api';
18
18
  const defaultT = (key) => key;
19
19
  export function PermissionsManager({ apiBasePath = '/api', t = defaultT, }) {
20
20
  const permApi = createPermissionsApi(apiBasePath);
@@ -2,12 +2,12 @@
2
2
  'use client';
3
3
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
4
  import { useState } from 'react';
5
- import { Tabs, TabsContent, TabsList, TabsTrigger } from './ui/tabs.js';
5
+ import { Tabs, TabsContent, TabsList, TabsTrigger } from './ui/tabs';
6
6
  import { Shield } from 'lucide-react';
7
- import { PermissionMatrix } from './PermissionMatrix.js';
8
- import { RolesManager } from './RolesManager.js';
9
- import { PermissionsManager } from './PermissionsManager.js';
10
- import { CategoriesManager } from './CategoriesManager.js';
7
+ import { PermissionMatrix } from './PermissionMatrix';
8
+ import { RolesManager } from './RolesManager';
9
+ import { PermissionsManager } from './PermissionsManager';
10
+ import { CategoriesManager } from './CategoriesManager';
11
11
  const defaultT = (key) => key;
12
12
  export function RBACManager({ apiBasePath = '/api', t = defaultT, systemRoles = [], roleColors, statusColors, }) {
13
13
  const [tab, setTab] = useState('matrix');
@@ -3,17 +3,17 @@
3
3
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
4
  import { useState } from 'react';
5
5
  import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
6
- import { Button } from './ui/button.js';
7
- import { Input } from './ui/input.js';
8
- import { Label } from './ui/label.js';
9
- import { Badge } from './ui/badge.js';
10
- import { Card, CardContent } from './ui/card.js';
11
- import { Dialog, DialogContent, DialogHeader, DialogTitle, } from './ui/dialog.js';
12
- import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from './ui/alert-dialog.js';
13
- import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from './ui/table.js';
6
+ import { Button } from './ui/button';
7
+ import { Input } from './ui/input';
8
+ import { Label } from './ui/label';
9
+ import { Badge } from './ui/badge';
10
+ import { Card, CardContent } from './ui/card';
11
+ import { Dialog, DialogContent, DialogHeader, DialogTitle, } from './ui/dialog';
12
+ import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from './ui/alert-dialog';
13
+ import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from './ui/table';
14
14
  import { Plus, Pencil, Trash2, Loader2 } from 'lucide-react';
15
15
  import { toast } from 'sonner';
16
- import { createRolesApi } from '../lib/rbac-api.js';
16
+ import { createRolesApi } from '../lib/rbac-api';
17
17
  const defaultT = (key) => key;
18
18
  export function RolesManager({ apiBasePath = '/api', t = defaultT, systemRoles = [], }) {
19
19
  const api = createRolesApi(apiBasePath);
@@ -3,18 +3,18 @@
3
3
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
4
  import { useState } from 'react';
5
5
  import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
6
- import { Button } from './ui/button.js';
7
- import { Input } from './ui/input.js';
8
- import { Label } from './ui/label.js';
9
- import { Badge } from './ui/badge.js';
10
- import { Card, CardContent } from './ui/card.js';
11
- import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger, } from './ui/dialog.js';
12
- import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from './ui/select.js';
13
- import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from './ui/table.js';
6
+ import { Button } from './ui/button';
7
+ import { Input } from './ui/input';
8
+ import { Label } from './ui/label';
9
+ import { Badge } from './ui/badge';
10
+ import { Card, CardContent } from './ui/card';
11
+ import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger, } from './ui/dialog';
12
+ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from './ui/select';
13
+ import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from './ui/table';
14
14
  import { Plus, Pencil, Trash2, Loader2 } from 'lucide-react';
15
- import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from './ui/alert-dialog.js';
15
+ import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from './ui/alert-dialog';
16
16
  import { toast } from 'sonner';
17
- import { createUsersApi } from '../lib/rbac-api.js';
17
+ import { createUsersApi } from '../lib/rbac-api';
18
18
  const defaultT = (key) => key;
19
19
  export function UsersManager({ apiBasePath = '/api', t = defaultT, roleColors = {}, statusColors = {}, fallbackRoles, }) {
20
20
  const api = createUsersApi(apiBasePath);
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Check if a user's permissions include the required permission.
3
+ * Supports exact match, full wildcard '*', and glob patterns like 'cloud.admin.*'.
4
+ */
5
+ export declare function hasPermission(userPermissions: string[], requiredPermission: string): boolean;
6
+ /**
7
+ * Check if a single user permission matches the required permission.
8
+ * @param required - The permission being checked (e.g. 'cloud.admin.users')
9
+ * @param userPerm - A permission the user holds (e.g. 'cloud.admin.*')
10
+ */
11
+ export declare function matchesPermission(required: string, userPerm: string): boolean;
12
+ //# sourceMappingURL=permissions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../helpers/permissions.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,aAAa,CAAC,eAAe,EAAE,MAAM,EAAE,EAAE,kBAAkB,EAAE,MAAM,GAAG,OAAO,CAG5F;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAS7E"}
@@ -0,0 +1,29 @@
1
+ // @mostajs/rbac — Permission matching helpers
2
+ // Author: Dr Hamid MADANI drmdh@msn.com
3
+ /**
4
+ * Check if a user's permissions include the required permission.
5
+ * Supports exact match, full wildcard '*', and glob patterns like 'cloud.admin.*'.
6
+ */
7
+ export function hasPermission(userPermissions, requiredPermission) {
8
+ if (!userPermissions || userPermissions.length === 0)
9
+ return false;
10
+ return userPermissions.some(perm => matchesPermission(requiredPermission, perm));
11
+ }
12
+ /**
13
+ * Check if a single user permission matches the required permission.
14
+ * @param required - The permission being checked (e.g. 'cloud.admin.users')
15
+ * @param userPerm - A permission the user holds (e.g. 'cloud.admin.*')
16
+ */
17
+ export function matchesPermission(required, userPerm) {
18
+ if (userPerm === '*')
19
+ return true;
20
+ if (userPerm === required)
21
+ return true;
22
+ // Wildcard pattern: 'cloud.admin.*' matches 'cloud.admin.users'
23
+ if (userPerm.endsWith('.*')) {
24
+ const prefix = userPerm.slice(0, -2);
25
+ return required.startsWith(prefix + '.');
26
+ }
27
+ return false;
28
+ }
29
+ //# sourceMappingURL=permissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../helpers/permissions.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,wCAAwC;AAExC;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,eAAyB,EAAE,kBAA0B;IACjF,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IAClE,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC,CAAA;AAClF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,QAAgB;IAClE,IAAI,QAAQ,KAAK,GAAG;QAAE,OAAO,IAAI,CAAA;IACjC,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAA;IACtC,gEAAgE;IAChE,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACpC,OAAO,QAAQ,CAAC,UAAU,CAAC,MAAM,GAAG,GAAG,CAAC,CAAA;IAC1C,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC"}
package/dist/index.d.ts CHANGED
@@ -12,6 +12,7 @@ export { RolesManager } from './components/RolesManager';
12
12
  export { PermissionsManager } from './components/PermissionsManager';
13
13
  export { CategoriesManager } from './components/CategoriesManager';
14
14
  export { PermissionMatrix } from './components/PermissionMatrix';
15
+ export { hasPermission, matchesPermission } from './helpers/permissions';
15
16
  export { createUsersApi, createRolesApi, createPermissionsApi, createMatrixApi, createCategoriesApi, } from './lib/rbac-api';
16
17
  export type { UserDTO, RoleDTO, PermissionDTO, PermissionCategoryDTO, User, RoleOption, RoleData, PermissionData, CategoryData, MatrixData, RBACConfig, PermissionDefinition, RoleDefinition, CategoryDefinition, } from './types';
17
18
  export type { UsersHandlerConfig } from './api/users';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAA;AAG/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAGjD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAGxD,OAAO,EAAE,CAAC,IAAI,KAAK,EAAE,MAAM,YAAY,CAAA;AAGvC,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAGhE,OAAO,EACL,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,mBAAmB,GACpB,MAAM,gBAAgB,CAAA;AAGvB,YAAY,EACV,OAAO,EACP,OAAO,EACP,aAAa,EACb,qBAAqB,EACrB,IAAI,EACJ,UAAU,EACV,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,UAAU,EACV,UAAU,EACV,oBAAoB,EACpB,cAAc,EACd,kBAAkB,GACnB,MAAM,SAAS,CAAA;AAGhB,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACrD,YAAY,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAC1D,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACrD,YAAY,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAC1D,YAAY,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAA;AACjE,YAAY,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAA;AACtE,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AACvD,YAAY,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAC/D,YAAY,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAA;AACpE,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAA;AAG/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAGjD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAGxD,OAAO,EAAE,CAAC,IAAI,KAAK,EAAE,MAAM,YAAY,CAAA;AAGvC,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAGhE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAGxE,OAAO,EACL,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,mBAAmB,GACpB,MAAM,gBAAgB,CAAA;AAGvB,YAAY,EACV,OAAO,EACP,OAAO,EACP,aAAa,EACb,qBAAqB,EACrB,IAAI,EACJ,UAAU,EACV,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,UAAU,EACV,UAAU,EACV,oBAAoB,EACpB,cAAc,EACd,kBAAkB,GACnB,MAAM,SAAS,CAAA;AAGhB,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACrD,YAAY,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAC1D,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACrD,YAAY,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAC1D,YAAY,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAA;AACjE,YAAY,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAA;AACtE,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AACvD,YAAY,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAC/D,YAAY,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAA;AACpE,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA"}
package/dist/index.js CHANGED
@@ -2,24 +2,26 @@
2
2
  // @mostajs/rbac — Client-safe barrel (NO ORM imports)
3
3
  // For server-side code (repos, seed, permissions-server), use '@mostajs/rbac/server'
4
4
  // Schemas (pure data definitions — no ORM dependency)
5
- export { UserSchema } from './schemas/user.schema.js';
6
- export { RoleSchema } from './schemas/role.schema.js';
7
- export { PermissionSchema } from './schemas/permission.schema.js';
8
- export { PermissionCategorySchema } from './schemas/permission-category.schema.js';
5
+ export { UserSchema } from './schemas/user.schema';
6
+ export { RoleSchema } from './schemas/role.schema';
7
+ export { PermissionSchema } from './schemas/permission.schema';
8
+ export { PermissionCategorySchema } from './schemas/permission-category.schema';
9
9
  // Menu contribution
10
- export { rbacMenuContribution } from './lib/menu.js';
10
+ export { rbacMenuContribution } from './lib/menu';
11
11
  // Pages (client-side, registered via PageRegistration)
12
- export { default as UsersPage } from './pages/UsersPage.js';
13
- export { default as RolesPage } from './pages/RolesPage.js';
12
+ export { default as UsersPage } from './pages/UsersPage';
13
+ export { default as RolesPage } from './pages/RolesPage';
14
14
  // i18n
15
- export { t as rbacT } from './lib/i18n.js';
15
+ export { t as rbacT } from './lib/i18n';
16
16
  // Components (client-side)
17
- export { UsersManager } from './components/UsersManager.js';
18
- export { RBACManager } from './components/RBACManager.js';
19
- export { RolesManager } from './components/RolesManager.js';
20
- export { PermissionsManager } from './components/PermissionsManager.js';
21
- export { CategoriesManager } from './components/CategoriesManager.js';
22
- export { PermissionMatrix } from './components/PermissionMatrix.js';
17
+ export { UsersManager } from './components/UsersManager';
18
+ export { RBACManager } from './components/RBACManager';
19
+ export { RolesManager } from './components/RolesManager';
20
+ export { PermissionsManager } from './components/PermissionsManager';
21
+ export { CategoriesManager } from './components/CategoriesManager';
22
+ export { PermissionMatrix } from './components/PermissionMatrix';
23
+ // Permission matching helpers
24
+ export { hasPermission, matchesPermission } from './helpers/permissions';
23
25
  // API helpers (client-side fetch wrappers — no server deps)
24
- export { createUsersApi, createRolesApi, createPermissionsApi, createMatrixApi, createCategoriesApi, } from './lib/rbac-api.js';
26
+ export { createUsersApi, createRolesApi, createPermissionsApi, createMatrixApi, createCategoriesApi, } from './lib/rbac-api';
25
27
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,sDAAsD;AACtD,qFAAqF;AAErF,sDAAsD;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAA;AAE/E,oBAAoB;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAEjD,uDAAuD;AACvD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAExD,OAAO;AACP,OAAO,EAAE,CAAC,IAAI,KAAK,EAAE,MAAM,YAAY,CAAA;AAEvC,2BAA2B;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAEhE,4DAA4D;AAC5D,OAAO,EACL,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,mBAAmB,GACpB,MAAM,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,sDAAsD;AACtD,qFAAqF;AAErF,sDAAsD;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAA;AAE/E,oBAAoB;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAEjD,uDAAuD;AACvD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAExD,OAAO;AACP,OAAO,EAAE,CAAC,IAAI,KAAK,EAAE,MAAM,YAAY,CAAA;AAEvC,2BAA2B;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAEhE,8BAA8B;AAC9B,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAExE,4DAA4D;AAC5D,OAAO,EACL,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,mBAAmB,GACpB,MAAM,gBAAgB,CAAA"}
@@ -3,6 +3,7 @@ export declare function getSchemas(): import("@mostajs/orm").EntitySchema[];
3
3
  /** Module metadata for setup discovery */
4
4
  export declare const moduleInfo: {
5
5
  name: string;
6
+ version: string;
6
7
  label: string;
7
8
  description: string;
8
9
  schemas: typeof getSchemas;
@@ -1 +1 @@
1
- {"version":3,"file":"module-info.d.ts","sourceRoot":"","sources":["../../lib/module-info.ts"],"names":[],"mappings":"AASA,8EAA8E;AAC9E,wBAAgB,UAAU,0CAEzB;AAED,0CAA0C;AAC1C,eAAO,MAAM,UAAU;;;;;IAKrB,gEAAgE;qBACzC,GAAG;;;;;IAQ1B,qDAAqD;2BACxB;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;CAItG,CAAA"}
1
+ {"version":3,"file":"module-info.d.ts","sourceRoot":"","sources":["../../lib/module-info.ts"],"names":[],"mappings":"AASA,8EAA8E;AAC9E,wBAAgB,UAAU,0CAEzB;AAED,0CAA0C;AAC1C,eAAO,MAAM,UAAU;;;;;;IAMrB,gEAAgE;qBACzC,GAAG;;;;;IAQ1B,qDAAqD;2BACxB;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;CAItG,CAAA"}
@@ -12,6 +12,7 @@ export function getSchemas() {
12
12
  /** Module metadata for setup discovery */
13
13
  export const moduleInfo = {
14
14
  name: 'rbac',
15
+ version: '2.1.0',
15
16
  label: 'Roles & Permissions',
16
17
  description: 'User, Role, Permission, PermissionCategory management',
17
18
  schemas: getSchemas,
@@ -1 +1 @@
1
- {"version":3,"file":"module-info.js","sourceRoot":"","sources":["../../lib/module-info.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,oEAAoE;AACpE,wCAAwC;AAExC,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAA;AAEnF,8EAA8E;AAC9E,MAAM,UAAU,UAAU;IACxB,OAAO,CAAC,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,wBAAwB,CAAC,CAAA;AAC7E,CAAC;AAED,0CAA0C;AAC1C,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,qBAAqB;IAC5B,WAAW,EAAE,uDAAuD;IACpE,OAAO,EAAE,UAAU;IACnB,gEAAgE;IAChE,IAAI,EAAE,KAAK,EAAE,OAAa,EAAE,EAAE;QAC5B,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAA;QACnD,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU,MAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,CAAA,KAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,CAAA,EAAE,CAAC;YAClE,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAA;QAC1B,CAAC;QACD,+BAA+B;QAC/B,OAAO,EAAE,aAAa,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAA;IAC/D,CAAC;IACD,qDAAqD;IACrD,WAAW,EAAE,KAAK,EAAE,OAAiF,EAAE,EAAE;QACvG,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAA;QACzD,OAAO,WAAW,CAAC,OAAO,CAAC,CAAA;IAC7B,CAAC;CACF,CAAA"}
1
+ {"version":3,"file":"module-info.js","sourceRoot":"","sources":["../../lib/module-info.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,oEAAoE;AACpE,wCAAwC;AAExC,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAA;AAEnF,8EAA8E;AAC9E,MAAM,UAAU,UAAU;IACxB,OAAO,CAAC,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,wBAAwB,CAAC,CAAA;AAC7E,CAAC;AAED,0CAA0C;AAC1C,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,OAAO;IAChB,KAAK,EAAE,qBAAqB;IAC5B,WAAW,EAAE,uDAAuD;IACpE,OAAO,EAAE,UAAU;IACnB,gEAAgE;IAChE,IAAI,EAAE,KAAK,EAAE,OAAa,EAAE,EAAE;QAC5B,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAA;QACnD,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU,MAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,CAAA,KAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,CAAA,EAAE,CAAC;YAClE,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAA;QAC1B,CAAC;QACD,+BAA+B;QAC/B,OAAO,EAAE,aAAa,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAA;IAC/D,CAAC;IACD,qDAAqD;IACrD,WAAW,EAAE,KAAK,EAAE,OAAiF,EAAE,EAAE;QACvG,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAA;QACzD,OAAO,WAAW,CAAC,OAAO,CAAC,CAAA;IAC7B,CAAC;CACF,CAAA"}
@@ -31,4 +31,5 @@ export async function seedRBAC(options) {
31
31
  roleCount: Object.keys(options.roles).length,
32
32
  };
33
33
  }
34
+ // seedCloudRBAC supprime — utiliser @mostajs/cloud-config bootstrapRBAC(seedRBAC) a la place
34
35
  //# sourceMappingURL=rbac-seed.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rbac-seed.js","sourceRoot":"","sources":["../../lib/rbac-seed.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,wCAAwC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AASjD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAwB;IAKrD,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,YAAY,EAAE,CAAA;IAE5F,uBAAuB;IACvB,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACrC,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAA;IAC/C,CAAC;IAED,4CAA4C;IAC5C,MAAM,aAAa,GAA2B,EAAE,CAAA;IAChD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAA;QAC1C,MAAM,IAAI,GAAG,MAAO,QAAgB,CAAC,MAAM,CACzC,EAAE,IAAI,EAAE,WAAW,EAAE,EACrB,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAC9E,CAAA;QACD,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAA;IACpC,CAAC;IAED,sCAAsC;IACtC,KAAK,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxD,MAAM,aAAa,GAAG,OAAO,CAAC,WAAW;aACtC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;aAClC,MAAM,CAAC,OAAO,CAAC,CAAA;QAElB,MAAO,QAAgB,CAAC,MAAM,CAC5B,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,EACtB,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,CACrF,CAAA;IACH,CAAC;IAED,OAAO;QACL,aAAa,EAAE,OAAO,CAAC,UAAU,CAAC,MAAM;QACxC,eAAe,EAAE,OAAO,CAAC,WAAW,CAAC,MAAM;QAC3C,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM;KAC7C,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"rbac-seed.js","sourceRoot":"","sources":["../../lib/rbac-seed.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,wCAAwC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AASjD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAwB;IAKrD,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,YAAY,EAAE,CAAA;IAE5F,uBAAuB;IACvB,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACrC,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAA;IAC/C,CAAC;IAED,4CAA4C;IAC5C,MAAM,aAAa,GAA2B,EAAE,CAAA;IAChD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAA;QAC1C,MAAM,IAAI,GAAG,MAAO,QAAgB,CAAC,MAAM,CACzC,EAAE,IAAI,EAAE,WAAW,EAAE,EACrB,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAC9E,CAAA;QACD,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAA;IACpC,CAAC;IAED,sCAAsC;IACtC,KAAK,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxD,MAAM,aAAa,GAAG,OAAO,CAAC,WAAW;aACtC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;aAClC,MAAM,CAAC,OAAO,CAAC,CAAA;QAElB,MAAO,QAAgB,CAAC,MAAM,CAC5B,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,EACtB,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,CACrF,CAAA;IACH,CAAC;IAED,OAAO;QACL,aAAa,EAAE,OAAO,CAAC,UAAU,CAAC,MAAM;QACxC,eAAe,EAAE,OAAO,CAAC,WAAW,CAAC,MAAM;QAC3C,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM;KAC7C,CAAA;AACH,CAAC;AAED,6FAA6F"}
package/dist/register.js CHANGED
@@ -18,7 +18,7 @@ export function register(registry) {
18
18
  manifest: {
19
19
  name: 'rbac',
20
20
  package: '@mostajs/rbac',
21
- version: '2.0.0',
21
+ version: '2.1.0',
22
22
  type: 'core',
23
23
  priority: 2,
24
24
  dependencies: ['orm'],
@@ -1,7 +1,7 @@
1
1
  // @mostajs/rbac — PermissionCategoryRepository
2
2
  // Author: Dr Hamid MADANI drmdh@msn.com
3
3
  import { BaseRepository } from '@mostajs/orm';
4
- import { PermissionCategorySchema } from '../schemas/permission-category.schema.js';
4
+ import { PermissionCategorySchema } from '../schemas/permission-category.schema';
5
5
  export class PermissionCategoryRepository extends BaseRepository {
6
6
  constructor(dialect) {
7
7
  super(PermissionCategorySchema, dialect);
@@ -1,7 +1,7 @@
1
1
  // @mostajs/rbac — PermissionRepository
2
2
  // Author: Dr Hamid MADANI drmdh@msn.com
3
3
  import { BaseRepository } from '@mostajs/orm';
4
- import { PermissionSchema } from '../schemas/permission.schema.js';
4
+ import { PermissionSchema } from '../schemas/permission.schema';
5
5
  export class PermissionRepository extends BaseRepository {
6
6
  constructor(dialect) {
7
7
  super(PermissionSchema, dialect);
@@ -1,7 +1,7 @@
1
1
  // @mostajs/rbac — RoleRepository
2
2
  // Author: Dr Hamid MADANI drmdh@msn.com
3
3
  import { BaseRepository } from '@mostajs/orm';
4
- import { RoleSchema } from '../schemas/role.schema.js';
4
+ import { RoleSchema } from '../schemas/role.schema';
5
5
  export class RoleRepository extends BaseRepository {
6
6
  constructor(dialect) {
7
7
  super(RoleSchema, dialect);
@@ -1,7 +1,7 @@
1
1
  // @mostajs/rbac — UserRepository
2
2
  // Author: Dr Hamid MADANI drmdh@msn.com
3
3
  import { BaseRepository } from '@mostajs/orm';
4
- import { UserSchema } from '../schemas/user.schema.js';
4
+ import { UserSchema } from '../schemas/user.schema';
5
5
  export class UserRepository extends BaseRepository {
6
6
  constructor(dialect) {
7
7
  super(UserSchema, dialect);
@@ -1 +1 @@
1
- {"version":3,"file":"user.schema.d.ts","sourceRoot":"","sources":["../../schemas/user.schema.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAEhD,eAAO,MAAM,UAAU,EAAE,YAsBxB,CAAA"}
1
+ {"version":3,"file":"user.schema.d.ts","sourceRoot":"","sources":["../../schemas/user.schema.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAEhD,eAAO,MAAM,UAAU,EAAE,YAuCxB,CAAA"}
@@ -3,13 +3,26 @@ export const UserSchema = {
3
3
  collection: 'users',
4
4
  timestamps: true,
5
5
  fields: {
6
+ // Identity
6
7
  email: { type: 'string', required: true, unique: true, lowercase: true, trim: true },
7
8
  password: { type: 'string', required: true },
8
9
  firstName: { type: 'string', required: true, trim: true },
9
10
  lastName: { type: 'string', required: true, trim: true },
10
11
  phone: { type: 'string', trim: true },
12
+ // Status & auth
11
13
  status: { type: 'string', enum: ['active', 'locked', 'disabled'], default: 'active' },
12
14
  lastLoginAt: { type: 'date' },
15
+ // Email verification
16
+ verified: { type: 'boolean', default: false },
17
+ verifyToken: { type: 'string' },
18
+ verifyTokenExpiresAt: { type: 'string' },
19
+ // Password reset
20
+ resetToken: { type: 'string' },
21
+ resetTokenExpiresAt: { type: 'string' },
22
+ // SaaS / Cloud
23
+ stripeCustomerId: { type: 'string' },
24
+ avatar: { type: 'string' },
25
+ locale: { type: 'string', default: 'fr' },
13
26
  },
14
27
  relations: {
15
28
  roles: { target: 'Role', type: 'many-to-many', through: 'user_roles' },
@@ -1 +1 @@
1
- {"version":3,"file":"user.schema.js","sourceRoot":"","sources":["../../schemas/user.schema.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,UAAU,GAAiB;IACtC,IAAI,EAAE,MAAM;IACZ,UAAU,EAAE,OAAO;IACnB,UAAU,EAAE,IAAI;IAEhB,MAAM,EAAE;QACN,KAAK,EAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;QAC1F,QAAQ,EAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC/C,SAAS,EAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;QAC3D,QAAQ,EAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;QAC3D,KAAK,EAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE;QAC3C,MAAM,EAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE;QAC1F,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;KAC9B;IAED,SAAS,EAAE;QACT,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY,EAAE;KACvE;IAED,OAAO,EAAE;QACP,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;KAC9B;CACF,CAAA"}
1
+ {"version":3,"file":"user.schema.js","sourceRoot":"","sources":["../../schemas/user.schema.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,UAAU,GAAiB;IACtC,IAAI,EAAE,MAAM;IACZ,UAAU,EAAE,OAAO;IACnB,UAAU,EAAE,IAAI;IAEhB,MAAM,EAAE;QACN,WAAW;QACX,KAAK,EAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;QAC1F,QAAQ,EAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC/C,SAAS,EAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;QAC3D,QAAQ,EAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;QAC3D,KAAK,EAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE;QAE3C,gBAAgB;QAChB,MAAM,EAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE;QAC1F,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;QAE7B,qBAAqB;QACrB,QAAQ,EAAe,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;QAC1D,WAAW,EAAY,EAAE,IAAI,EAAE,QAAQ,EAAE;QACzC,oBAAoB,EAAG,EAAE,IAAI,EAAE,QAAQ,EAAE;QAEzC,iBAAiB;QACjB,UAAU,EAAa,EAAE,IAAI,EAAE,QAAQ,EAAE;QACzC,mBAAmB,EAAI,EAAE,IAAI,EAAE,QAAQ,EAAE;QAEzC,eAAe;QACf,gBAAgB,EAAO,EAAE,IAAI,EAAE,QAAQ,EAAE;QACzC,MAAM,EAAiB,EAAE,IAAI,EAAE,QAAQ,EAAE;QACzC,MAAM,EAAiB,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE;KACzD;IAED,SAAS,EAAE;QACT,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY,EAAE;KACvE;IAED,OAAO,EAAE;QACP,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;KAC9B;CACF,CAAA"}
package/dist/server.d.ts CHANGED
@@ -4,6 +4,7 @@ export { PermissionRepository } from './repositories/permission.repository';
4
4
  export { PermissionCategoryRepository } from './repositories/permission-category.repository';
5
5
  export { seedRBAC } from './lib/rbac-seed';
6
6
  export type { SeedRBACOptions } from './lib/rbac-seed';
7
+ export { hasPermission, matchesPermission } from './helpers/permissions';
7
8
  export { createAdmin } from './lib/create-admin';
8
9
  export type { CreateAdminOptions, CreateAdminResult } from './lib/create-admin';
9
10
  export { getSchemas, moduleInfo } from './lib/module-info';
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../server.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAA;AAC3E,OAAO,EAAE,4BAA4B,EAAE,MAAM,+CAA+C,CAAA;AAG5F,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC1C,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAGtD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAG/E,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAG1D,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAA;AAGtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAA;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAA;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAC1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAG9C,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACrD,YAAY,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAC1D,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACrD,YAAY,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAC1D,YAAY,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAA;AACjE,YAAY,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAA;AACtE,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AACvD,YAAY,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAC/D,YAAY,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAA;AACpE,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../server.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAA;AAC3E,OAAO,EAAE,4BAA4B,EAAE,MAAM,+CAA+C,CAAA;AAG5F,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC1C,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAGtD,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAGxE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAG/E,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAG1D,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAA;AAGtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAA;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAA;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAC1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAG9C,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACrD,YAAY,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAC1D,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACrD,YAAY,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAC1D,YAAY,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAA;AACjE,YAAY,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAA;AACtE,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AACvD,YAAY,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAC/D,YAAY,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAA;AACpE,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA"}
package/dist/server.js CHANGED
@@ -2,27 +2,29 @@
2
2
  // @mostajs/rbac/server — Server-side exports (ORM-dependent)
3
3
  // Import from '@mostajs/rbac/server' in API routes and server code
4
4
  // Repositories (depend on @mostajs/orm)
5
- export { UserRepository } from './repositories/user.repository.js';
6
- export { RoleRepository } from './repositories/role.repository.js';
7
- export { PermissionRepository } from './repositories/permission.repository.js';
8
- export { PermissionCategoryRepository } from './repositories/permission-category.repository.js';
5
+ export { UserRepository } from './repositories/user.repository';
6
+ export { RoleRepository } from './repositories/role.repository';
7
+ export { PermissionRepository } from './repositories/permission.repository';
8
+ export { PermissionCategoryRepository } from './repositories/permission-category.repository';
9
9
  // RBAC seed (depends on repos → ORM)
10
- export { seedRBAC } from './lib/rbac-seed.js';
10
+ export { seedRBAC } from './lib/rbac-seed';
11
+ // Permission matching helpers
12
+ export { hasPermission, matchesPermission } from './helpers/permissions';
11
13
  // Create admin (depends on repos → ORM + bcrypt)
12
- export { createAdmin } from './lib/create-admin.js';
14
+ export { createAdmin } from './lib/create-admin';
13
15
  // Module info (schemas, seeds, metadata — for setup discovery)
14
- export { getSchemas, moduleInfo } from './lib/module-info.js';
16
+ export { getSchemas, moduleInfo } from './lib/module-info';
15
17
  // Server-side permission DB lookup (depends on repos → ORM)
16
- export { getPermissionsForRoleFromDB } from './lib/permissions-server.js';
18
+ export { getPermissionsForRoleFromDB } from './lib/permissions-server';
17
19
  // API handler factories
18
- export { createUsersHandler } from './api/users.js';
19
- export { createUsersIdHandler } from './api/users-id.js';
20
- export { createRolesHandler } from './api/roles.js';
21
- export { createRolesIdHandler } from './api/roles-id.js';
22
- export { createPermissionsHandler } from './api/permissions.js';
23
- export { createPermissionsIdHandler } from './api/permissions-id.js';
24
- export { createMatrixHandler } from './api/matrix.js';
25
- export { createCategoriesHandler } from './api/categories.js';
26
- export { createCategoriesIdHandler } from './api/categories-id.js';
27
- export { createSeedHandler } from './api/seed.js';
20
+ export { createUsersHandler } from './api/users';
21
+ export { createUsersIdHandler } from './api/users-id';
22
+ export { createRolesHandler } from './api/roles';
23
+ export { createRolesIdHandler } from './api/roles-id';
24
+ export { createPermissionsHandler } from './api/permissions';
25
+ export { createPermissionsIdHandler } from './api/permissions-id';
26
+ export { createMatrixHandler } from './api/matrix';
27
+ export { createCategoriesHandler } from './api/categories';
28
+ export { createCategoriesIdHandler } from './api/categories-id';
29
+ export { createSeedHandler } from './api/seed';
28
30
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../server.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,6DAA6D;AAC7D,mEAAmE;AAEnE,wCAAwC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAA;AAC3E,OAAO,EAAE,4BAA4B,EAAE,MAAM,+CAA+C,CAAA;AAE5F,qCAAqC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAG1C,iDAAiD;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAGhD,+DAA+D;AAC/D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAE1D,4DAA4D;AAC5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAA;AAEtE,wBAAwB;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAA;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAA;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAC1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../server.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,6DAA6D;AAC7D,mEAAmE;AAEnE,wCAAwC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAA;AAC3E,OAAO,EAAE,4BAA4B,EAAE,MAAM,+CAA+C,CAAA;AAE5F,qCAAqC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAG1C,8BAA8B;AAC9B,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAExE,iDAAiD;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAGhD,+DAA+D;AAC/D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAE1D,4DAA4D;AAC5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAA;AAEtE,wBAAwB;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAA;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAA;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAC1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mostajs/rbac",
3
- "version": "2.0.8",
3
+ "version": "2.2.0",
4
4
  "description": "RBAC — User/Role/Permission schemas, repos, management UI, API handlers",
5
5
  "author": "Dr Hamid MADANI <drmdh@msn.com>",
6
6
  "license": "MIT",
@@ -74,6 +74,11 @@
74
74
  "import": "./dist/lib/menu.js",
75
75
  "default": "./dist/lib/menu.js"
76
76
  },
77
+ "./helpers/permissions": {
78
+ "types": "./dist/helpers/permissions.d.ts",
79
+ "import": "./dist/helpers/permissions.js",
80
+ "default": "./dist/helpers/permissions.js"
81
+ },
77
82
  "./lib/rbac-seed": {
78
83
  "types": "./dist/lib/rbac-seed.d.ts",
79
84
  "import": "./dist/lib/rbac-seed.js",