@archbase/security 4.0.47 → 4.1.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.
- package/dist/archbase-security-4.1.0.tgz +0 -0
- package/dist/index.js +427 -381
- package/dist/src/ArchbaseSecurityDiagnosticsService.d.ts +33 -0
- package/dist/src/SecurityDiagnosticsDomain.d.ts +122 -0
- package/dist/src/index.d.ts +2 -0
- package/package.json +5 -5
- package/dist/archbase-security-4.0.47.tgz +0 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { ArchbaseRemoteApiClient } from '@archbase/data';
|
|
2
|
+
import { ArchbaseAccessDecision, ArchbaseAccessOverview, ArchbaseEffectiveAccessReport, ArchbaseSimulationRequest } from './SecurityDiagnosticsDomain';
|
|
3
|
+
/**
|
|
4
|
+
* Leitura do diagnóstico de acesso — `/api/v1/security/diagnostics/*`.
|
|
5
|
+
*
|
|
6
|
+
* <p><b>Por que não estende `ArchbaseRemoteApiService`.</b> A classe base modela um CRUD de
|
|
7
|
+
* entidade: exige `getId`, `isNewRecord` e `transform`. Aqui não há entidade — há três
|
|
8
|
+
* perguntas (o retrato do tenant, o que uma pessoa pode, e se ela pode uma coisa). Implementar
|
|
9
|
+
* aqueles métodos com retorno inventado só para herdar seria mentir sobre o que este serviço é.
|
|
10
|
+
* O que importava da base — o cliente HTTP injetado e os cabeçalhos de tenant — está preservado.
|
|
11
|
+
*
|
|
12
|
+
* <p>Todos os endpoints são <b>somente leitura</b> e exigem, no servidor,
|
|
13
|
+
* `archbase.security.diagnostics.enabled=true` e usuário administrador.
|
|
14
|
+
*/
|
|
15
|
+
export declare class ArchbaseSecurityDiagnosticsService {
|
|
16
|
+
protected client: ArchbaseRemoteApiClient;
|
|
17
|
+
constructor(client: ArchbaseRemoteApiClient);
|
|
18
|
+
protected configureHeaders(): Record<string, string>;
|
|
19
|
+
protected getEndpoint(): string;
|
|
20
|
+
/** Retrato do tenant: contagens do catálogo e o estado das proteções configuráveis. */
|
|
21
|
+
getOverview(): Promise<ArchbaseAccessOverview>;
|
|
22
|
+
/** O que a pessoa pode, com a origem de cada concessão. */
|
|
23
|
+
getEffectiveAccessByUserId(userId: string): Promise<ArchbaseEffectiveAccessReport>;
|
|
24
|
+
/** Idem, buscando a pessoa pelo e-mail. */
|
|
25
|
+
getEffectiveAccessByEmail(email: string): Promise<ArchbaseEffectiveAccessReport>;
|
|
26
|
+
/**
|
|
27
|
+
* "Esta pessoa consegue fazer isto?"
|
|
28
|
+
*
|
|
29
|
+
* <p>A resposta traz a cadeia dos portões avaliados — é ela, e não o booleano, que diz o
|
|
30
|
+
* que precisa mudar para o acesso passar a existir.
|
|
31
|
+
*/
|
|
32
|
+
simulate(request: ArchbaseSimulationRequest): Promise<ArchbaseAccessDecision>;
|
|
33
|
+
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tipos dos endpoints de diagnóstico de acesso — `/api/v1/security/diagnostics/*`.
|
|
3
|
+
*
|
|
4
|
+
* <p>Espelham os records do `archbase-security` 3.1.0 campo a campo. Onde o nome aqui
|
|
5
|
+
* diverge do backend, é bug: a tela existe para responder "por que esta pessoa não passou?",
|
|
6
|
+
* e ela só responde isso se o que chega for exatamente o que o avaliador decidiu.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Os cinco portões do core de autorização, na ordem em que são avaliados.
|
|
10
|
+
*
|
|
11
|
+
* <p>A regra que organiza o modelo: <b>IDENTITY a LEVEL só sabem NEGAR; só GRANT CONCEDE.</b>
|
|
12
|
+
* É por isso que a tela de simulação mostra a cadeia inteira em vez de um sim/não — saber
|
|
13
|
+
* em qual portão parou é o que diz o que precisa ser mudado.
|
|
14
|
+
*/
|
|
15
|
+
export type ArchbaseAccessGate = 'IDENTITY' | 'SCOPE' | 'RESTRICTION' | 'LEVEL' | 'GRANT';
|
|
16
|
+
/** Escala de nível de acesso. `NONE` é sentinela de anotação, não valor de perfil. */
|
|
17
|
+
export type ArchbaseAccessLevel = 'NONE' | 'READER' | 'OPERATOR' | 'SUPERVISOR' | 'TENANT_ADMIN';
|
|
18
|
+
/**
|
|
19
|
+
* Situação de uma capacidade concedida.
|
|
20
|
+
*
|
|
21
|
+
* - `EFFECTIVE` — concedida e valendo.
|
|
22
|
+
* - `INERT` — concedida, mas a ação ou o recurso está inativo. É o acesso que o operador
|
|
23
|
+
* acredita ter dado e que não decide nada.
|
|
24
|
+
* - `DENIED` — bloqueada por negação explícita ou por nível insuficiente.
|
|
25
|
+
*/
|
|
26
|
+
export type ArchbaseCapabilitySituation = 'EFFECTIVE' | 'INERT' | 'DENIED';
|
|
27
|
+
/** Quem recebeu a permissão. */
|
|
28
|
+
export type ArchbaseSecurityTypeName = 'USER' | 'GROUP' | 'PROFILE';
|
|
29
|
+
/**
|
|
30
|
+
* Estado das proteções configuráveis.
|
|
31
|
+
*
|
|
32
|
+
* <p>Vem antes dos números na tela de propósito: contagem alta de permissões não significa
|
|
33
|
+
* nada se o portão correspondente está inerte.
|
|
34
|
+
*/
|
|
35
|
+
export interface ArchbaseAccessFlags {
|
|
36
|
+
/** `false` = permissão apontando para ação inativa ainda decide. */
|
|
37
|
+
requireActive: boolean;
|
|
38
|
+
/** `false` = o catálogo não se alimenta do código; nada de `@HasPermission` foi varrido. */
|
|
39
|
+
scanConfigured: boolean;
|
|
40
|
+
/** `permit` = qualquer autenticado administra segurança. */
|
|
41
|
+
adminEndpointsPolicy: string;
|
|
42
|
+
requireRoleNoResolverPolicy: string;
|
|
43
|
+
/** `false` = `@RequireRole` não restringe nada. */
|
|
44
|
+
roleResolverRegistered: boolean;
|
|
45
|
+
}
|
|
46
|
+
/** Retrato do tenant — `GET /diagnostics/overview`. */
|
|
47
|
+
export interface ArchbaseAccessOverview {
|
|
48
|
+
users: number;
|
|
49
|
+
administrators: number;
|
|
50
|
+
groups: number;
|
|
51
|
+
profiles: number;
|
|
52
|
+
resources: number;
|
|
53
|
+
apiResources: number;
|
|
54
|
+
apiResourcesInactive: number;
|
|
55
|
+
resourcesWithoutAction: number;
|
|
56
|
+
actions: number;
|
|
57
|
+
actionsInactive: number;
|
|
58
|
+
actionsWithoutPermission: number;
|
|
59
|
+
permissions: number;
|
|
60
|
+
permissionsPointingToInactive: number;
|
|
61
|
+
permissionsBySecurityType: Record<string, number>;
|
|
62
|
+
flags: ArchbaseAccessFlags;
|
|
63
|
+
}
|
|
64
|
+
/** Uma capacidade que a pessoa recebeu, com a origem da concessão. */
|
|
65
|
+
export interface ArchbaseEffectiveCapability {
|
|
66
|
+
resource: string;
|
|
67
|
+
action: string;
|
|
68
|
+
grantedBy: string;
|
|
69
|
+
grantedByName: string;
|
|
70
|
+
grantedByType: ArchbaseSecurityTypeName;
|
|
71
|
+
actionActive: boolean;
|
|
72
|
+
resourceActive: boolean;
|
|
73
|
+
situation: ArchbaseCapabilitySituation;
|
|
74
|
+
}
|
|
75
|
+
/** O que a pessoa pode — `GET /diagnostics/users/{id}/effective`. */
|
|
76
|
+
export interface ArchbaseEffectiveAccessReport {
|
|
77
|
+
userId: string;
|
|
78
|
+
userLabel: string;
|
|
79
|
+
profileName: string;
|
|
80
|
+
groupNames: string[];
|
|
81
|
+
administrator: boolean;
|
|
82
|
+
enabled: boolean;
|
|
83
|
+
granted: number;
|
|
84
|
+
effective: number;
|
|
85
|
+
inert: number;
|
|
86
|
+
denied: number;
|
|
87
|
+
capabilities: ArchbaseEffectiveCapability[];
|
|
88
|
+
}
|
|
89
|
+
/** O que aconteceu em um portão. */
|
|
90
|
+
export interface ArchbaseGateOutcome {
|
|
91
|
+
gate: ArchbaseAccessGate;
|
|
92
|
+
passed: boolean;
|
|
93
|
+
reasonCode: string;
|
|
94
|
+
detail: string;
|
|
95
|
+
}
|
|
96
|
+
/** Resultado de `POST /diagnostics/simulate`. */
|
|
97
|
+
export interface ArchbaseAccessDecision {
|
|
98
|
+
allowed: boolean;
|
|
99
|
+
/** Portão onde parou, ou `null` quando concedeu. */
|
|
100
|
+
deniedAt: ArchbaseAccessGate | null;
|
|
101
|
+
reasonCode: string;
|
|
102
|
+
message: string;
|
|
103
|
+
grantedBy: string | null;
|
|
104
|
+
grantedByName: string | null;
|
|
105
|
+
chain: ArchbaseGateOutcome[];
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Pergunta da simulação.
|
|
109
|
+
*
|
|
110
|
+
* <p>Identifica a pessoa por `userId` <b>ou</b> `email`. O escopo aceito é o que o avaliador
|
|
111
|
+
* conhece — tenant, empresa e projeto. Dimensão de negócio (departamento, filial) só chega
|
|
112
|
+
* aqui se a aplicação a mapear para um destes.
|
|
113
|
+
*/
|
|
114
|
+
export interface ArchbaseSimulationRequest {
|
|
115
|
+
userId?: string;
|
|
116
|
+
email?: string;
|
|
117
|
+
resource: string;
|
|
118
|
+
action: string;
|
|
119
|
+
tenantId?: string;
|
|
120
|
+
companyId?: string;
|
|
121
|
+
projectId?: string;
|
|
122
|
+
}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -13,11 +13,13 @@ export * from './ArchbaseProfileService';
|
|
|
13
13
|
export * from './ArchbaseApiTokenService';
|
|
14
14
|
export * from './ArchbaseAccessTokenService';
|
|
15
15
|
export * from './ArchbaseResourceService';
|
|
16
|
+
export * from './ArchbaseSecurityDiagnosticsService';
|
|
16
17
|
export * from './ArchbaseLogin';
|
|
17
18
|
export * from './ArchbaseMfaSetup';
|
|
18
19
|
export * from './ArchbaseResetPassword';
|
|
19
20
|
export * from './SecurityType';
|
|
20
21
|
export * from './SecurityDomain';
|
|
22
|
+
export * from './SecurityDiagnosticsDomain';
|
|
21
23
|
export * from './hooks';
|
|
22
24
|
export { ArchbaseSecurityProvider, ArchbaseViewSecurityProvider, DefaultSecurityLoading } from './ArchbaseSecurityContext';
|
|
23
25
|
export { useArchbaseSecurity, useArchbaseViewSecurity, useArchbaseSecureForm, useArchbasePermissionCheck } from './ArchbaseSecurityHooks';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@archbase/security",
|
|
3
|
-
"version": "4.0
|
|
3
|
+
"version": "4.1.0",
|
|
4
4
|
"description": "Security and authentication components for Archbase React",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -37,10 +37,10 @@
|
|
|
37
37
|
"reflect-metadata": "^0.1.13",
|
|
38
38
|
"rxjs": "^7.8.2",
|
|
39
39
|
"uuid": "^9.0.1",
|
|
40
|
-
"@archbase/components": "4.0
|
|
41
|
-
"@archbase/core": "4.0
|
|
42
|
-
"@archbase/data": "4.0
|
|
43
|
-
"@archbase/layout": "4.0
|
|
40
|
+
"@archbase/components": "4.1.0",
|
|
41
|
+
"@archbase/core": "4.1.0",
|
|
42
|
+
"@archbase/data": "4.1.0",
|
|
43
|
+
"@archbase/layout": "4.1.0"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@types/crypto-js": "^4.1.1",
|
|
Binary file
|