forlogic-core 1.16.0 → 1.16.1

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.
@@ -1,5 +1,6 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { QueryClient } from '@tanstack/react-query';
3
+ import { ModuleAccessGuardProps } from '../components/modules';
3
4
  /**
4
5
  * Props for CoreProviders component
5
6
  */
@@ -13,6 +14,21 @@ export interface CoreProvidersProps {
13
14
  * If not provided, a default QueryClient will be created
14
15
  */
15
16
  queryClient?: QueryClient;
17
+ /**
18
+ * Alias do módulo do projeto consumidor.
19
+ * Usado pelo hook useModuleAccess para verificar automaticamente
20
+ * se o usuário tem acesso ao módulo deste projeto.
21
+ * Quando configurado, o ModuleAccessGuard bloqueia automaticamente
22
+ * o acesso caso o usuário não tenha permissão.
23
+ *
24
+ * @example "performance" | "suppliers" | "occurrences" | "audit"
25
+ */
26
+ moduleAlias?: string;
27
+ /**
28
+ * Props opcionais para o ModuleAccessGuard.
29
+ * Permite configurar módulos contratados, callbacks e URLs.
30
+ */
31
+ moduleAccessGuardProps?: Omit<ModuleAccessGuardProps, 'children'>;
16
32
  }
17
33
  /**
18
34
  * CoreProviders - Encapsulates all essential providers for forlogic-core applications
@@ -23,7 +39,7 @@ export interface CoreProvidersProps {
23
39
  * - QueryClientProvider (data fetching)
24
40
  * - AuthProvider (authentication)
25
41
  * - LocaleProvider (locale management)
26
- * - TranslationLoader (removed - translations now loaded from local JSON)
42
+ * - ModuleProvider (module access configuration)
27
43
  *
28
44
  * @example
29
45
  * ```tsx
@@ -32,7 +48,7 @@ export interface CoreProvidersProps {
32
48
  *
33
49
  * function App() {
34
50
  * return (
35
- * <CoreProviders>
51
+ * <CoreProviders moduleAlias="performance">
36
52
  * <BrowserRouter>
37
53
  * <Routes>
38
54
  * {/* Your routes here *\/}
@@ -56,11 +72,11 @@ export interface CoreProvidersProps {
56
72
  *
57
73
  * function App() {
58
74
  * return (
59
- * <CoreProviders queryClient={queryClient}>
75
+ * <CoreProviders queryClient={queryClient} moduleAlias="suppliers">
60
76
  * {/* Your app *\/}
61
77
  * </CoreProviders>
62
78
  * );
63
79
  * }
64
80
  * ```
65
81
  */
66
- export declare function CoreProviders({ children, queryClient }: CoreProvidersProps): import("react/jsx-runtime").JSX.Element;
82
+ export declare function CoreProviders({ children, queryClient, moduleAlias, moduleAccessGuardProps }: CoreProvidersProps): import("react/jsx-runtime").JSX.Element;
@@ -1,4 +1,4 @@
1
- import { QualiexUser } from '../../types';
1
+ import { QualiexUser, Software, UserAssociation } from '../../types';
2
2
  declare class QualiexApiService {
3
3
  private get baseUrl();
4
4
  /**
@@ -17,6 +17,23 @@ declare class QualiexApiService {
17
17
  fetchUserById(userId: string, alias: string, companyId: string): Promise<QualiexUser | null>;
18
18
  fetchActiveUsersMap(alias: string, companyId: string): Promise<Map<string, QualiexUser>>;
19
19
  getUsers(alias: string): Promise<QualiexUser[]>;
20
+ /**
21
+ * Busca a lista de todos os módulos/softwares disponíveis na plataforma.
22
+ * GET /api/common/v1/softwares
23
+ *
24
+ * @param alias - Alias da unidade (usado no header un-alias)
25
+ * @returns Array de Software com id, alias, cores e nomes traduzidos
26
+ */
27
+ fetchSoftwares(alias: string): Promise<Software[]>;
28
+ /**
29
+ * Busca as associações do usuário (empresas, roles, módulos com acesso).
30
+ * GET /api/common/v1/Users/{userId}/associations
31
+ *
32
+ * @param userId - ID do usuário no Qualiex (subNewId / user.id)
33
+ * @param alias - Alias da unidade (usado no header un-alias)
34
+ * @returns Array de UserAssociation com softwares[], roleId, roleName, etc.
35
+ */
36
+ fetchUserAssociations(userId: string, alias: string): Promise<UserAssociation[]>;
20
37
  }
21
38
  export declare const qualiexApi: QualiexApiService;
22
39
  export {};
package/dist/setup.d.ts CHANGED
@@ -6,6 +6,8 @@ interface QualiexCoreConfig {
6
6
  };
7
7
  theme?: 'light' | 'dark' | 'system';
8
8
  queryClient?: QueryClient;
9
+ /** Alias do módulo do projeto consumidor (ex: 'performance', 'suppliers', 'occurrences') */
10
+ moduleAlias?: string;
9
11
  }
10
12
  export declare function setupQualiexCore(config: QualiexCoreConfig): {
11
13
  queryClient: QueryClient;
package/dist/types.d.ts CHANGED
@@ -471,6 +471,64 @@ export interface QualiexEnrichmentConfig {
471
471
  /** Sufixo padrão para campos de username (default: "_username") */
472
472
  userUsernameFieldSuffix?: string;
473
473
  }
474
+ /**
475
+ * Representa um módulo/software disponível na plataforma Qualiex.
476
+ * Retornado pela API GET /api/common/v1/softwares
477
+ */
478
+ export interface Software {
479
+ id: number;
480
+ alias: string;
481
+ color: string;
482
+ colorLight: string;
483
+ namePtBr: string;
484
+ nameUs: string;
485
+ nameEs: string;
486
+ }
487
+ /**
488
+ * Representa uma associação do usuário com uma empresa/unidade.
489
+ * Retornado pela API GET /api/common/v1/Users/{userId}/associations
490
+ *
491
+ * O array `softwares` contém os IDs dos módulos aos quais o usuário tem acesso.
492
+ * O `roleId` e `roleName` representam o papel do usuário naquela associação.
493
+ */
494
+ export interface UserAssociation {
495
+ associationId: string;
496
+ userId: string;
497
+ userName: string;
498
+ companyId: string;
499
+ companyName: string;
500
+ companyAlias: string;
501
+ companyPhotoDate?: string;
502
+ language?: string;
503
+ roleId: string;
504
+ roleName: string;
505
+ placeId?: string;
506
+ placeName?: string;
507
+ softwares: number[];
508
+ functionalities: string[];
509
+ isQualitfy?: boolean;
510
+ isMetroex?: boolean;
511
+ }
512
+ /**
513
+ * Resultado do hook useModuleAccess
514
+ */
515
+ export interface ModuleAccessResult {
516
+ /** Se o usuário tem acesso ao módulo configurado/especificado */
517
+ hasAccess: boolean;
518
+ /** Se os dados ainda estão carregando */
519
+ isLoading: boolean;
520
+ /** Role do usuário na associação atual */
521
+ role: {
522
+ id: string;
523
+ name: string;
524
+ } | null;
525
+ /** Associação completa do usuário para a unidade atual */
526
+ association: UserAssociation | null;
527
+ /** Função para verificar acesso a outro(s) módulo(s) */
528
+ hasAccessTo: (alias: string | string[]) => boolean;
529
+ /** Lista completa de softwares/módulos disponíveis na plataforma */
530
+ softwares: Software[];
531
+ }
474
532
  export interface ApiResponse<T = unknown> {
475
533
  data: T;
476
534
  success: boolean;
@@ -131,6 +131,7 @@ function App() {
131
131
  - [ErrorBoundary](#errorboundary) - Componente de classe React que captura erros de renderização em componentes filhos, evitando que a aplicação inteira quebre.
132
132
  - [Hooks](#hooks) - Hooks utilitários da biblioteca forlogic-core para otimização, dados, formatação e UI. Todos os hooks seguem padrões React e são compatíveis com React Query quando aplicável.
133
133
  - [Internacionalização (i18n)](#i18n) - Sistema de internacionalização usando react-i18next com traduções carregadas de um arquivo JSON estático local (lib/i18n/translations.json). Suporta pt-BR, en-US e es-ES com gerenciamento de preferências do usuário.
134
+ - [Controle de Acesso a Módulos](#moduleaccess) - Sistema para verificar e bloquear automaticamente o acesso do usuário a módulos da plataforma Qualiex. Inclui proteção automática de rotas via CoreProviders e hook para verificações programáticas.
134
135
  - [Segurança (Vite Config)](#security) - Plugin de segurança para Vite que aplica headers OWASP, CSP configurável, CORS seguro e proteções contra ataques comuns. Configuração centralizada para todos os projetos Forlogic.
135
136
  - [Services](#services) - Serviços utilitários da biblioteca forlogic-core para operações CRUD, envio de emails, tratamento de erros e gerenciamento de traduções. Todos os serviços são singletons prontos para uso.
136
137
  - [Utilities](#utilities) - Funções utilitárias essenciais exportadas pela biblioteca para manipulação de classes CSS, formatação de datas e valores monetários.
@@ -11558,6 +11559,27 @@ console.log(format?.description); // "Padrão Brasileiro"
11558
11559
 
11559
11560
  ---
11560
11561
 
11562
+ ### Controle de Acesso a Módulos
11563
+
11564
+ Sistema para verificar e bloquear automaticamente o acesso do usuário a módulos da plataforma Qualiex. Inclui proteção automática de rotas via CoreProviders e hook para verificações programáticas.
11565
+
11566
+ **Uso:**
11567
+ ```tsx
11568
+ present
11569
+ ```
11570
+
11571
+ **Exemplos:**
11572
+
11573
+ **Exemplo Interativo:**
11574
+ ```tsx
11575
+ // Ver seção de exemplos no arquivo
11576
+ ```
11577
+
11578
+ **Acessibilidade:**
11579
+ - Documentação de acessibilidade presente em HTML estruturado
11580
+
11581
+ ---
11582
+
11561
11583
  ### Segurança (Vite Config)
11562
11584
 
11563
11585
  Plugin de segurança para Vite que aplica headers OWASP, CSP configurável, CORS seguro e proteções contra ataques comuns. Configuração centralizada para todos os projetos Forlogic.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "forlogic-core",
3
- "version": "1.16.0",
3
+ "version": "1.16.1",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.esm.js",
@@ -75,7 +75,7 @@
75
75
  "@radix-ui/react-toggle": "^1.1.9",
76
76
  "@radix-ui/react-toggle-group": "^1.1.10",
77
77
  "@radix-ui/react-tooltip": "^1.2.7",
78
- "@supabase/supabase-js": "^2.98.0",
78
+ "@supabase/supabase-js": "^2.99.0",
79
79
  "@tanstack/react-query": "^5.83.0",
80
80
  "@tiptap/extension-color": "^3.14.0",
81
81
  "@tiptap/extension-highlight": "^3.14.0",