mftsccs-node 0.2.15 → 0.2.17
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/bundle.js +1 -1
- package/dist/types/DataStructures/AccessControl/AccessControlModels.d.ts +144 -0
- package/dist/types/Services/AccessControl/APIClientService.d.ts +87 -0
- package/dist/types/Services/AccessControl/AccessControlCacheService.d.ts +73 -18
- package/dist/types/Services/AccessControl/AccessControlService.d.ts +104 -232
- package/dist/types/Services/AccessControl/PermissionSet.d.ts +18 -3
- package/dist/types/Services/AccessControl/index.d.ts +15 -0
- package/package.json +1 -1
- package/dist/bundle.js.map +0 -1
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data models for V1 Access Control Service
|
|
3
|
+
* These models mirror the C# FreeSchema.Models.AccessControl types
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Permission set enum (bitwise flags)
|
|
7
|
+
* Mirrors C# PermissionSet enum
|
|
8
|
+
*/
|
|
9
|
+
export declare enum PermissionSet {
|
|
10
|
+
None = 0,
|
|
11
|
+
Read = 1,// 1
|
|
12
|
+
Write = 2,// 2
|
|
13
|
+
Execute = 4,// 4
|
|
14
|
+
Delete = 8
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Request model for single access operations (check, assign, revoke)
|
|
18
|
+
*/
|
|
19
|
+
export interface AccessRequest {
|
|
20
|
+
accessId?: number | null;
|
|
21
|
+
permission: string;
|
|
22
|
+
entityId?: number | null;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Result model for access operations
|
|
26
|
+
*/
|
|
27
|
+
export interface AccessResult {
|
|
28
|
+
accessId: number;
|
|
29
|
+
permission: string;
|
|
30
|
+
entityId?: number | null;
|
|
31
|
+
hasAccess: boolean;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Target for bulk access operations
|
|
35
|
+
*/
|
|
36
|
+
export interface BulkAccessTarget {
|
|
37
|
+
entityId?: number | null;
|
|
38
|
+
permissions: string[];
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Request model for bulk access operations
|
|
42
|
+
*/
|
|
43
|
+
export interface BulkAccessRequest {
|
|
44
|
+
accessId?: number | null;
|
|
45
|
+
targets: BulkAccessTarget[];
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Request model for bulk check access operations
|
|
49
|
+
*/
|
|
50
|
+
export interface BulkCheckAccessRequest {
|
|
51
|
+
accessId: number;
|
|
52
|
+
targets: BulkAccessTarget[];
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Request model for access inheritance operations
|
|
56
|
+
*/
|
|
57
|
+
export interface AccessInheritanceRequest {
|
|
58
|
+
accessId?: number | null;
|
|
59
|
+
connectionTypeId?: number;
|
|
60
|
+
enable?: boolean;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Request model for super admin operations
|
|
64
|
+
*/
|
|
65
|
+
export interface SuperAdminRequest {
|
|
66
|
+
accessId?: number | null;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Standard API response wrapper for access control endpoints
|
|
70
|
+
*/
|
|
71
|
+
export interface AccessControlAPIResponse<T = unknown> {
|
|
72
|
+
status: boolean;
|
|
73
|
+
message?: string;
|
|
74
|
+
data?: T;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Valid permissions for validation
|
|
78
|
+
*/
|
|
79
|
+
export declare const VALID_PERMISSIONS: Set<string>;
|
|
80
|
+
/**
|
|
81
|
+
* Check if a permission string is valid
|
|
82
|
+
*/
|
|
83
|
+
export declare function isValidPermission(permission: string): boolean;
|
|
84
|
+
/**
|
|
85
|
+
* Request model for adding access by entity
|
|
86
|
+
* Mirrors C# AddAccessByEntityRequest
|
|
87
|
+
*/
|
|
88
|
+
export interface AddAccessByEntityRequest {
|
|
89
|
+
conceptId: number;
|
|
90
|
+
access: string;
|
|
91
|
+
entityId: number;
|
|
92
|
+
makePublic: boolean;
|
|
93
|
+
nestedAccessLevel: number;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Request model for adding public access to concept
|
|
97
|
+
* Mirrors C# AddPublicAccessToConcept
|
|
98
|
+
*/
|
|
99
|
+
export interface AddPublicAccessToConcept {
|
|
100
|
+
conceptId: number;
|
|
101
|
+
conceptIdList: number[];
|
|
102
|
+
accessList: string[];
|
|
103
|
+
nestedAccessLevel: number;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Request model for bulk adding access by entity
|
|
107
|
+
* Mirrors C# AddAccessByEntityBulkRequest
|
|
108
|
+
*/
|
|
109
|
+
export interface AddAccessByEntityBulkRequest {
|
|
110
|
+
conceptId: number;
|
|
111
|
+
conceptIdList: number[];
|
|
112
|
+
entityIdList: number[];
|
|
113
|
+
accessList: string[];
|
|
114
|
+
nestedAccessLevel: number;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Request model for adding access by user
|
|
118
|
+
* Mirrors C# AddAccessByUserRequest
|
|
119
|
+
*/
|
|
120
|
+
export interface AddAccessByUserRequest {
|
|
121
|
+
conceptId: number;
|
|
122
|
+
access: string;
|
|
123
|
+
userId: number;
|
|
124
|
+
makePublic: boolean;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Request model for checking bulk access
|
|
128
|
+
* Mirrors C# CheckAccessBulk
|
|
129
|
+
*/
|
|
130
|
+
export interface CheckAccessBulk {
|
|
131
|
+
userId: number;
|
|
132
|
+
access: string;
|
|
133
|
+
conceptIdList: number[];
|
|
134
|
+
connectionIdList: number[];
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Alternative API response format
|
|
138
|
+
* Mirrors C# AccessControlApiResponse
|
|
139
|
+
*/
|
|
140
|
+
export interface AccessControlApiResponse {
|
|
141
|
+
success?: boolean | null;
|
|
142
|
+
data?: unknown;
|
|
143
|
+
message?: string | null;
|
|
144
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* APIClientService
|
|
3
|
+
*
|
|
4
|
+
* API client service for Access Control endpoints.
|
|
5
|
+
* Provides typed HTTP methods for all access control API operations.
|
|
6
|
+
*
|
|
7
|
+
* This is the TypeScript equivalent of the C# APIClientService class.
|
|
8
|
+
*/
|
|
9
|
+
import { AccessRequest, AccessResult, AccessControlAPIResponse, BulkAccessRequest, BulkCheckAccessRequest, AccessInheritanceRequest, SuperAdminRequest } from '../../DataStructures/AccessControl/AccessControlModels';
|
|
10
|
+
export interface IAPIClientService {
|
|
11
|
+
assignAccessAsync(request: AccessRequest): Promise<AccessControlAPIResponse<AccessResult>>;
|
|
12
|
+
checkAccessAsync(request: AccessRequest): Promise<AccessControlAPIResponse<AccessResult>>;
|
|
13
|
+
revokeAccessAsync(request: AccessRequest): Promise<AccessControlAPIResponse<AccessResult>>;
|
|
14
|
+
assignAccessBulkAsync(request: BulkAccessRequest): Promise<AccessControlAPIResponse<AccessResult[]>>;
|
|
15
|
+
revokeAccessBulkAsync(request: BulkAccessRequest): Promise<AccessControlAPIResponse<AccessResult[]>>;
|
|
16
|
+
checkAccessBulkAsync(request: BulkCheckAccessRequest): Promise<AccessControlAPIResponse<AccessResult[]>>;
|
|
17
|
+
getAccessByIdAsync(accessId: number): Promise<AccessControlAPIResponse<AccessResult[]>>;
|
|
18
|
+
setAccessInheritanceAsync(request: AccessInheritanceRequest): Promise<AccessControlAPIResponse>;
|
|
19
|
+
getAccessInheritanceStatusAsync(accessId: number, connectionTypeId?: number): Promise<AccessControlAPIResponse>;
|
|
20
|
+
assignSuperAdminAccessAsync(request: SuperAdminRequest): Promise<AccessControlAPIResponse>;
|
|
21
|
+
revokeSuperAdminAccessAsync(request: SuperAdminRequest): Promise<AccessControlAPIResponse>;
|
|
22
|
+
checkSuperAdminStatusAsync(accessId: number): Promise<AccessControlAPIResponse>;
|
|
23
|
+
}
|
|
24
|
+
export declare class APIClientService implements IAPIClientService {
|
|
25
|
+
private readonly baseUrl;
|
|
26
|
+
constructor(baseUrl?: string);
|
|
27
|
+
/**
|
|
28
|
+
* Perform a GET request and return typed response
|
|
29
|
+
*/
|
|
30
|
+
private getAsync;
|
|
31
|
+
/**
|
|
32
|
+
* Perform a POST request with JSON body and return typed response
|
|
33
|
+
*/
|
|
34
|
+
private postAsync;
|
|
35
|
+
/**
|
|
36
|
+
* Perform a DELETE request with optional JSON body and return typed response
|
|
37
|
+
*/
|
|
38
|
+
private deleteAsync;
|
|
39
|
+
/**
|
|
40
|
+
* Assign access to an entity
|
|
41
|
+
*/
|
|
42
|
+
assignAccessAsync(request: AccessRequest): Promise<AccessControlAPIResponse<AccessResult>>;
|
|
43
|
+
/**
|
|
44
|
+
* Check if an entity has access
|
|
45
|
+
*/
|
|
46
|
+
checkAccessAsync(request: AccessRequest): Promise<AccessControlAPIResponse<AccessResult>>;
|
|
47
|
+
/**
|
|
48
|
+
* Revoke access from an entity
|
|
49
|
+
*/
|
|
50
|
+
revokeAccessAsync(request: AccessRequest): Promise<AccessControlAPIResponse<AccessResult>>;
|
|
51
|
+
/**
|
|
52
|
+
* Assign access to multiple targets in bulk
|
|
53
|
+
*/
|
|
54
|
+
assignAccessBulkAsync(request: BulkAccessRequest): Promise<AccessControlAPIResponse<AccessResult[]>>;
|
|
55
|
+
/**
|
|
56
|
+
* Revoke access from multiple targets in bulk
|
|
57
|
+
*/
|
|
58
|
+
revokeAccessBulkAsync(request: BulkAccessRequest): Promise<AccessControlAPIResponse<AccessResult[]>>;
|
|
59
|
+
/**
|
|
60
|
+
* Check access for multiple targets in bulk
|
|
61
|
+
*/
|
|
62
|
+
checkAccessBulkAsync(request: BulkCheckAccessRequest): Promise<AccessControlAPIResponse<AccessResult[]>>;
|
|
63
|
+
/**
|
|
64
|
+
* Get all access entries for a specific accessId
|
|
65
|
+
*/
|
|
66
|
+
getAccessByIdAsync(accessId: number): Promise<AccessControlAPIResponse<AccessResult[]>>;
|
|
67
|
+
/**
|
|
68
|
+
* Set access inheritance for an access ID
|
|
69
|
+
*/
|
|
70
|
+
setAccessInheritanceAsync(request: AccessInheritanceRequest): Promise<AccessControlAPIResponse>;
|
|
71
|
+
/**
|
|
72
|
+
* Get access inheritance status
|
|
73
|
+
*/
|
|
74
|
+
getAccessInheritanceStatusAsync(accessId: number, connectionTypeId?: number): Promise<AccessControlAPIResponse>;
|
|
75
|
+
/**
|
|
76
|
+
* Assign super admin access
|
|
77
|
+
*/
|
|
78
|
+
assignSuperAdminAccessAsync(request: SuperAdminRequest): Promise<AccessControlAPIResponse>;
|
|
79
|
+
/**
|
|
80
|
+
* Revoke super admin access
|
|
81
|
+
*/
|
|
82
|
+
revokeSuperAdminAccessAsync(request: SuperAdminRequest): Promise<AccessControlAPIResponse>;
|
|
83
|
+
/**
|
|
84
|
+
* Check super admin status
|
|
85
|
+
*/
|
|
86
|
+
checkSuperAdminStatusAsync(accessId: number): Promise<AccessControlAPIResponse>;
|
|
87
|
+
}
|
|
@@ -1,19 +1,74 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
1
|
+
/**
|
|
2
|
+
* CacheService
|
|
3
|
+
*
|
|
4
|
+
* Thread-safe in-memory cache for access checks.
|
|
5
|
+
* Supports single and bulk queries with secondary indexes.
|
|
6
|
+
* Key format: "{accessId}:{permission}:{entityId}"
|
|
7
|
+
* Value: boolean (HasAccess)
|
|
8
|
+
*
|
|
9
|
+
* This is the TypeScript equivalent of the C# CacheService class.
|
|
10
|
+
*/
|
|
11
|
+
export interface ICacheService {
|
|
12
|
+
get(accessId: number, permission: string, entityId?: number | null): boolean | null;
|
|
13
|
+
set(accessId: number, permission: string, entityId: number | null | undefined, hasAccess: boolean): void;
|
|
14
|
+
remove(accessId: number, permission: string, entityId?: number | null): void;
|
|
15
|
+
clear(): void;
|
|
16
|
+
getPermissionsByAccessAndEntity(accessId: number, entityId?: number | null): Map<string, boolean>;
|
|
17
|
+
getPermissionsByAccess(accessId: number): Map<string, boolean>;
|
|
18
|
+
getPermissionsByEntity(entityId: number): Map<string, boolean>;
|
|
19
|
+
getSuperAdmin(entityId: number): boolean | null;
|
|
20
|
+
setSuperAdmin(entityId: number, isSuperAdmin: boolean): void;
|
|
21
|
+
clearSuperAdminCache(): void;
|
|
22
|
+
}
|
|
23
|
+
export declare class CacheService implements ICacheService {
|
|
24
|
+
private readonly accessCache;
|
|
25
|
+
private readonly accessIndex;
|
|
26
|
+
private readonly entityIndex;
|
|
27
|
+
private static readonly superAdminCache;
|
|
28
|
+
/**
|
|
29
|
+
* Generate a cache key from accessId, permission, and entityId
|
|
30
|
+
*/
|
|
31
|
+
private generateKey;
|
|
32
|
+
/**
|
|
33
|
+
* Get cached access. Returns true/false if present, null if not cached.
|
|
34
|
+
*/
|
|
35
|
+
get(accessId: number, permission: string, entityId?: number | null): boolean | null;
|
|
36
|
+
/**
|
|
37
|
+
* Set or update cached access
|
|
38
|
+
*/
|
|
39
|
+
set(accessId: number, permission: string, entityId: number | null | undefined, hasAccess: boolean): void;
|
|
40
|
+
/**
|
|
41
|
+
* Remove a cached entry (e.g., after revoke)
|
|
42
|
+
*/
|
|
43
|
+
remove(accessId: number, permission: string, entityId?: number | null): void;
|
|
44
|
+
/**
|
|
45
|
+
* Clear all cached access entries
|
|
46
|
+
*/
|
|
47
|
+
clear(): void;
|
|
48
|
+
/**
|
|
49
|
+
* Get all permissions for a specific accessId + entityId
|
|
50
|
+
*/
|
|
51
|
+
getPermissionsByAccessAndEntity(accessId: number, entityId?: number | null): Map<string, boolean>;
|
|
52
|
+
/**
|
|
53
|
+
* Get all permissions for a specific accessId across all entities
|
|
54
|
+
* Returns a Map with key tuple (entityId, permission) and value hasAccess
|
|
55
|
+
*/
|
|
56
|
+
getPermissionsByAccess(accessId: number): Map<string, boolean>;
|
|
57
|
+
/**
|
|
58
|
+
* Get all permissions for a specific entity across all accessIds
|
|
59
|
+
* Returns a Map with key tuple (accessId, permission) and value hasAccess
|
|
60
|
+
*/
|
|
61
|
+
getPermissionsByEntity(entityId: number): Map<string, boolean>;
|
|
62
|
+
/**
|
|
63
|
+
* Get cached super admin status for an entity
|
|
64
|
+
*/
|
|
65
|
+
getSuperAdmin(entityId: number): boolean | null;
|
|
66
|
+
/**
|
|
67
|
+
* Set super admin status for an entity
|
|
68
|
+
*/
|
|
69
|
+
setSuperAdmin(entityId: number, isSuperAdmin: boolean): void;
|
|
70
|
+
/**
|
|
71
|
+
* Clear the super admin cache
|
|
72
|
+
*/
|
|
73
|
+
clearSuperAdminCache(): void;
|
|
19
74
|
}
|