@nu-art/permissions-shared 0.401.9 → 0.500.6

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 (85) hide show
  1. package/_entity/access-group/db-def.d.ts +3 -0
  2. package/_entity/access-group/db-def.js +30 -0
  3. package/_entity/access-group/types.d.ts +26 -0
  4. package/_entity/access-group/types.js +1 -0
  5. package/_entity/permission-scope/brand.d.ts +23 -0
  6. package/_entity/permission-scope/brand.js +20 -0
  7. package/_entity/permission-scope/db-def.d.ts +3 -0
  8. package/_entity/{permission-project → permission-scope}/db-def.js +10 -11
  9. package/_entity/permission-scope/types.d.ts +18 -0
  10. package/_entity/permission-scope/types.js +1 -0
  11. package/_entity/user-permissions/api-def.d.ts +8 -0
  12. package/_entity/user-permissions/api-def.js +4 -0
  13. package/_entity/user-permissions/db-def.d.ts +3 -0
  14. package/_entity/user-permissions/db-def.js +22 -0
  15. package/_entity/user-permissions/types.d.ts +19 -0
  16. package/_entity/user-permissions/types.js +1 -0
  17. package/consts.d.ts +1 -80
  18. package/consts.js +1 -60
  19. package/document-access.d.ts +20 -0
  20. package/document-access.js +8 -0
  21. package/group-definition.d.ts +14 -0
  22. package/group-definition.js +18 -0
  23. package/index.d.ts +12 -10
  24. package/index.js +12 -10
  25. package/package.json +9 -8
  26. package/permissions-scopes.d.ts +8 -0
  27. package/permissions-scopes.js +3 -0
  28. package/session-data.d.ts +4 -0
  29. package/_entity/permission-access-level/api-def.d.ts +0 -5
  30. package/_entity/permission-access-level/api-def.js +0 -3
  31. package/_entity/permission-access-level/db-def.d.ts +0 -3
  32. package/_entity/permission-access-level/db-def.js +0 -31
  33. package/_entity/permission-access-level/index.d.ts +0 -3
  34. package/_entity/permission-access-level/index.js +0 -4
  35. package/_entity/permission-access-level/types.d.ts +0 -27
  36. package/_entity/permission-api/api-def.d.ts +0 -5
  37. package/_entity/permission-api/api-def.js +0 -3
  38. package/_entity/permission-api/db-def.d.ts +0 -3
  39. package/_entity/permission-api/db-def.js +0 -39
  40. package/_entity/permission-api/index.d.ts +0 -3
  41. package/_entity/permission-api/index.js +0 -4
  42. package/_entity/permission-api/types.d.ts +0 -29
  43. package/_entity/permission-api/types.js +0 -1
  44. package/_entity/permission-domain/api-def.d.ts +0 -5
  45. package/_entity/permission-domain/api-def.js +0 -3
  46. package/_entity/permission-domain/db-def.d.ts +0 -3
  47. package/_entity/permission-domain/db-def.js +0 -31
  48. package/_entity/permission-domain/index.d.ts +0 -3
  49. package/_entity/permission-domain/index.js +0 -4
  50. package/_entity/permission-domain/types.d.ts +0 -19
  51. package/_entity/permission-domain/types.js +0 -1
  52. package/_entity/permission-group/api-def.d.ts +0 -5
  53. package/_entity/permission-group/api-def.js +0 -3
  54. package/_entity/permission-group/db-def.d.ts +0 -3
  55. package/_entity/permission-group/db-def.js +0 -37
  56. package/_entity/permission-group/index.d.ts +0 -3
  57. package/_entity/permission-group/index.js +0 -4
  58. package/_entity/permission-group/types.d.ts +0 -31
  59. package/_entity/permission-group/types.js +0 -1
  60. package/_entity/permission-project/api-def.d.ts +0 -5
  61. package/_entity/permission-project/api-def.js +0 -3
  62. package/_entity/permission-project/db-def.d.ts +0 -3
  63. package/_entity/permission-project/index.d.ts +0 -3
  64. package/_entity/permission-project/index.js +0 -4
  65. package/_entity/permission-project/types.d.ts +0 -15
  66. package/_entity/permission-project/types.js +0 -1
  67. package/_entity/permission-user/api-def.d.ts +0 -12
  68. package/_entity/permission-user/api-def.js +0 -6
  69. package/_entity/permission-user/db-def.d.ts +0 -3
  70. package/_entity/permission-user/db-def.js +0 -31
  71. package/_entity/permission-user/index.d.ts +0 -3
  72. package/_entity/permission-user/index.js +0 -4
  73. package/_entity/permission-user/types.d.ts +0 -22
  74. package/_entity/permission-user/types.js +0 -1
  75. package/_entity.d.ts +0 -6
  76. package/_entity.js +0 -6
  77. package/apis.d.ts +0 -75
  78. package/apis.js +0 -42
  79. package/permission-keys.d.ts +0 -4
  80. package/permission-keys.js +0 -4
  81. package/types.d.ts +0 -48
  82. package/types.js +0 -1
  83. package/validators.d.ts +0 -6
  84. package/validators.js +0 -25
  85. /package/{_entity/permission-access-level/types.js → session-data.js} +0 -0
@@ -0,0 +1,3 @@
1
+ import { Database } from '@nu-art/db-api-shared';
2
+ import type { DatabaseDef_AccessGroup } from './types.js';
3
+ export declare const DBDef_AccessGroup: Database<DatabaseDef_AccessGroup>;
@@ -0,0 +1,30 @@
1
+ import { tsValidateString, tsValidateValue, tsValidate_optionalArrayOfUniqueIds, tsValidator_arrayOfUniqueIds } from '@nu-art/ts-common';
2
+ import { AccessGroup_DbKey } from './types.js';
3
+ import { PermissionDBGroup } from '../../consts.js';
4
+ import { PermissionScope_DbKey } from '../permission-scope/types.js';
5
+ const accessGroupTypes = ['user', 'service-account', 'entity', 'custom'];
6
+ const Validator_ModifiableProps = {
7
+ type: tsValidateValue(accessGroupTypes),
8
+ key: tsValidateString(),
9
+ label: tsValidateString(),
10
+ members: tsValidator_arrayOfUniqueIds,
11
+ scopeEntries: tsValidate_optionalArrayOfUniqueIds,
12
+ };
13
+ const Validator_GeneratedProps = {};
14
+ export const DBDef_AccessGroup = {
15
+ modifiablePropsValidator: Validator_ModifiableProps,
16
+ generatedPropsValidator: Validator_GeneratedProps,
17
+ versions: ['1.0.0'],
18
+ dbKey: AccessGroup_DbKey,
19
+ entityName: 'AccessGroup',
20
+ frontend: {
21
+ group: PermissionDBGroup,
22
+ name: 'access-group',
23
+ },
24
+ backend: {
25
+ name: `${PermissionDBGroup}--access-groups`,
26
+ },
27
+ dependencies: {
28
+ scopeEntries: { dbKey: PermissionScope_DbKey, fieldType: 'string[]' },
29
+ },
30
+ };
@@ -0,0 +1,26 @@
1
+ import type { UniqueId } from '@nu-art/ts-common';
2
+ import { DB_Object, DB_ProtoSeed, DB_Prototype, VersionsDeclaration } from '@nu-art/db-api-shared';
3
+ import type { DatabaseDef_PermissionScope } from '../permission-scope/types.js';
4
+ export type AccessGroupType = 'user' | 'service-account' | 'entity' | 'custom';
5
+ export declare const AccessGroup_DbKey = "permissions--access-groups";
6
+ type DBKey = typeof AccessGroup_DbKey;
7
+ type VersionTypes_AccessGroup = {
8
+ '1.0.0': DB_AccessGroup;
9
+ };
10
+ type Versions = VersionsDeclaration<['1.0.0'], VersionTypes_AccessGroup>;
11
+ type UniqueKeys = '_id';
12
+ type GeneratedProps = never;
13
+ type Dependencies = {
14
+ scopeEntries: DatabaseDef_PermissionScope;
15
+ };
16
+ type Proto = DB_ProtoSeed<DB_AccessGroup, DBKey, GeneratedProps, Versions, UniqueKeys, Dependencies>;
17
+ export type DatabaseDef_AccessGroup = DB_Prototype<Proto>;
18
+ export type UI_AccessGroup = DatabaseDef_AccessGroup['uiType'];
19
+ export type DB_AccessGroup = DB_Object<DBKey> & {
20
+ type: AccessGroupType;
21
+ key: string;
22
+ label: string;
23
+ members: UniqueId[];
24
+ scopeEntries?: DatabaseDef_PermissionScope['id'][];
25
+ };
26
+ export {};
@@ -0,0 +1 @@
1
+ export const AccessGroup_DbKey = 'permissions--access-groups';
@@ -0,0 +1,23 @@
1
+ /** Type-only brand for PermissionScope; use definePermissionScope() to create valid instances. */
2
+ declare const PermissionScopeBrand: unique symbol;
3
+ /**
4
+ * Branded permission scope for function-based permissions.
5
+ * Only instances created via definePermissionScope() are valid.
6
+ */
7
+ export type PermissionScope = {
8
+ readonly key: string;
9
+ readonly values: readonly string[];
10
+ readonly [PermissionScopeBrand]: true;
11
+ };
12
+ /**
13
+ * Creates a frozen, branded permission scope. Use this to define scopes
14
+ * for the @RequirePermission decorator (e.g. pathway: read, write, delete, admin).
15
+ */
16
+ export declare function definePermissionScope<K extends string, V extends readonly string[]>(key: K, values: V): PermissionScope & {
17
+ key: K;
18
+ values: V;
19
+ };
20
+ export declare function getPermissionScopeValues(key: string): readonly string[] | undefined;
21
+ export declare function getAllRegisteredScopes(): PermissionScope[];
22
+ export declare function permissionScopeId<Scope extends PermissionScope>(key: Scope['key'], value: Scope['values'][number]): import("@nu-art/db-api-shared").DB_UniqueId<"permissions--scope">;
23
+ export {};
@@ -0,0 +1,20 @@
1
+ import { hashToUniqueId } from '@nu-art/db-api-shared';
2
+ const scopeRegistry = new Map();
3
+ /**
4
+ * Creates a frozen, branded permission scope. Use this to define scopes
5
+ * for the @RequirePermission decorator (e.g. pathway: read, write, delete, admin).
6
+ */
7
+ export function definePermissionScope(key, values) {
8
+ const scope = Object.freeze({ key, values });
9
+ scopeRegistry.set(key, scope);
10
+ return scope;
11
+ }
12
+ export function getPermissionScopeValues(key) {
13
+ return scopeRegistry.get(key)?.values;
14
+ }
15
+ export function getAllRegisteredScopes() {
16
+ return [...scopeRegistry.values()];
17
+ }
18
+ export function permissionScopeId(key, value) {
19
+ return hashToUniqueId(`${key}:${value}`);
20
+ }
@@ -0,0 +1,3 @@
1
+ import { Database } from '@nu-art/db-api-shared';
2
+ import { DatabaseDef_PermissionScope } from './types.js';
3
+ export declare const DBDef_PermissionScope: Database<DatabaseDef_PermissionScope>;
@@ -1,23 +1,22 @@
1
1
  import { tsValidateString } from '@nu-art/ts-common';
2
+ import { PermissionScope_DbKey } from './types.js';
2
3
  import { PermissionDBGroup } from '../../consts.js';
3
- import { validateProjectName } from '../../validators.js';
4
4
  const Validator_ModifiableProps = {
5
- name: validateProjectName,
5
+ key: tsValidateString(),
6
+ value: tsValidateString(),
6
7
  };
7
- const Validator_GeneratedProps = {
8
- _auditorId: tsValidateString()
9
- };
10
- export const DBDef_PermissionProject = {
8
+ const Validator_GeneratedProps = {};
9
+ export const DBDef_PermissionScope = {
11
10
  modifiablePropsValidator: Validator_ModifiableProps,
12
11
  generatedPropsValidator: Validator_GeneratedProps,
13
12
  versions: ['1.0.0'],
14
- dbKey: 'permissions--project',
15
- entityName: 'PermissionsProject',
13
+ dbKey: PermissionScope_DbKey,
14
+ entityName: 'PermissionScope',
16
15
  frontend: {
17
16
  group: PermissionDBGroup,
18
- name: 'project',
17
+ name: 'scope',
19
18
  },
20
19
  backend: {
21
- name: 'permissions--project'
22
- }
20
+ name: `${PermissionDBGroup}--scopes`
21
+ },
23
22
  };
@@ -0,0 +1,18 @@
1
+ import { DB_Object, DB_ProtoSeed, DB_Prototype, VersionsDeclaration } from '@nu-art/db-api-shared';
2
+ export declare const PermissionScope_DbKey = "permissions--scope";
3
+ type DBKey = typeof PermissionScope_DbKey;
4
+ type VersionTypes_PermissionScope = {
5
+ '1.0.0': DB_PermissionScope;
6
+ };
7
+ type Versions = VersionsDeclaration<['1.0.0'], VersionTypes_PermissionScope>;
8
+ type UniqueKeys = '_id';
9
+ type GeneratedProps = never;
10
+ type Dependencies = {};
11
+ type Proto = DB_ProtoSeed<DB_PermissionScope, DBKey, GeneratedProps, Versions, UniqueKeys, Dependencies>;
12
+ export type DatabaseDef_PermissionScope = DB_Prototype<Proto>;
13
+ export type UI_PermissionScope = DatabaseDef_PermissionScope['uiType'];
14
+ export type DB_PermissionScope = DB_Object<DBKey> & {
15
+ key: string;
16
+ value: string;
17
+ };
18
+ export {};
@@ -0,0 +1 @@
1
+ export const PermissionScope_DbKey = 'permissions--scope';
@@ -0,0 +1,8 @@
1
+ import { ApiDefResolver, QueryApi } from '@nu-art/api-types';
2
+ export type Response_MyPermissions = {
3
+ scopeEntries: string[];
4
+ };
5
+ export type API_UserPermissions = {
6
+ getMyPermissions: QueryApi<Response_MyPermissions>;
7
+ };
8
+ export declare const ApiDef_UserPermissions: ApiDefResolver<API_UserPermissions>;
@@ -0,0 +1,4 @@
1
+ import { HttpMethod } from '@nu-art/api-types';
2
+ export const ApiDef_UserPermissions = {
3
+ getMyPermissions: { method: HttpMethod.GET, path: '/v1/permissions/my-permissions' },
4
+ };
@@ -0,0 +1,3 @@
1
+ import { Database } from '@nu-art/db-api-shared';
2
+ import { DatabaseDef_UserPermissions } from './types.js';
3
+ export declare const DBDef_UserPermissions: Database<DatabaseDef_UserPermissions>;
@@ -0,0 +1,22 @@
1
+ import { tsValidateArray, tsValidateDynamicObject, tsValidateString, tsValidator_arrayOfUniqueIds } from '@nu-art/ts-common';
2
+ import { UserPermissions_DbKey } from './types.js';
3
+ import { PermissionDBGroup } from '../../consts.js';
4
+ const Validator_ModifiableProps = {
5
+ scopeEntries: tsValidateArray(tsValidateString()),
6
+ accessIds: tsValidateDynamicObject(tsValidator_arrayOfUniqueIds, tsValidateString()),
7
+ };
8
+ const Validator_GeneratedProps = {};
9
+ export const DBDef_UserPermissions = {
10
+ modifiablePropsValidator: Validator_ModifiableProps,
11
+ generatedPropsValidator: Validator_GeneratedProps,
12
+ versions: ['1.0.0'],
13
+ dbKey: UserPermissions_DbKey,
14
+ entityName: 'UserPermissions',
15
+ frontend: {
16
+ group: PermissionDBGroup,
17
+ name: 'user-permissions',
18
+ },
19
+ backend: {
20
+ name: `${PermissionDBGroup}--user-permissions`,
21
+ },
22
+ };
@@ -0,0 +1,19 @@
1
+ import { DB_Object, DB_ProtoSeed, DB_Prototype, VersionsDeclaration } from '@nu-art/db-api-shared';
2
+ import type { ScopedAccessIds } from '../../document-access.js';
3
+ export declare const UserPermissions_DbKey = "permissions--user-permissions";
4
+ type DBKey = typeof UserPermissions_DbKey;
5
+ type VersionTypes_UserPermissions = {
6
+ '1.0.0': DB_UserPermissions;
7
+ };
8
+ type Versions = VersionsDeclaration<['1.0.0'], VersionTypes_UserPermissions>;
9
+ type UniqueKeys = '_id';
10
+ type GeneratedProps = never;
11
+ type Dependencies = {};
12
+ type Proto = DB_ProtoSeed<DB_UserPermissions, DBKey, GeneratedProps, Versions, UniqueKeys, Dependencies>;
13
+ export type DatabaseDef_UserPermissions = DB_Prototype<Proto>;
14
+ export type UI_UserPermissions = DatabaseDef_UserPermissions['uiType'];
15
+ export type DB_UserPermissions = DB_Object<DBKey> & {
16
+ scopeEntries: string[];
17
+ accessIds: ScopedAccessIds;
18
+ };
19
+ export {};
@@ -0,0 +1 @@
1
+ export const UserPermissions_DbKey = 'permissions--user-permissions';
package/consts.d.ts CHANGED
@@ -1,80 +1 @@
1
- import { PreDBAccessLevel } from './types.js';
2
- export declare const PermissionDBGroup = "permission";
3
- export declare const Prefix_PermissionKey = "permission-key--";
4
- export declare const DomainNamespace_PermissionAssignment = "Permissions Assignment";
5
- export declare const DomainNamespace_PermissionManagement = "Permissions Management";
6
- export declare const DefaultAccessLevel_NoAccess: Readonly<{
7
- name: "No-Access";
8
- value: 0;
9
- }>;
10
- export declare const DefaultAccessLevel_Read: Readonly<{
11
- name: "Read";
12
- value: 200;
13
- }>;
14
- export declare const DefaultAccessLevel_Write: Readonly<{
15
- name: "Write";
16
- value: 400;
17
- }>;
18
- export declare const DefaultAccessLevel_Delete: Readonly<{
19
- name: "Delete";
20
- value: 600;
21
- }>;
22
- export declare const DefaultAccessLevel_Admin: Readonly<{
23
- name: "Admin";
24
- value: 1000;
25
- }>;
26
- export declare const DefaultUIAccessLevel_NoAccess: Readonly<{
27
- name: "Ui-No-Access";
28
- value: 0;
29
- }>;
30
- export declare const DefaultUIAccessLevel_Beta: Readonly<{
31
- name: "Beta";
32
- value: 1;
33
- }>;
34
- export declare const DefaultUIAccessLevel_Release: Readonly<{
35
- name: "Release";
36
- value: 2;
37
- }>;
38
- export declare const defaultUIAccessLevels: (Readonly<{
39
- name: "Ui-No-Access";
40
- value: 0;
41
- }> | Readonly<{
42
- name: "Beta";
43
- value: 1;
44
- }> | Readonly<{
45
- name: "Release";
46
- value: 2;
47
- }>)[];
48
- export declare const defaultAccessLevels: (Readonly<{
49
- name: "No-Access";
50
- value: 0;
51
- }> | Readonly<{
52
- name: "Read";
53
- value: 200;
54
- }> | Readonly<{
55
- name: "Write";
56
- value: 400;
57
- }> | Readonly<{
58
- name: "Delete";
59
- value: 600;
60
- }> | Readonly<{
61
- name: "Admin";
62
- value: 1000;
63
- }>)[];
64
- export declare const DuplicateDefaultAccessLevels: (seed: string) => {
65
- _id: string;
66
- uiLabel: string;
67
- name: string;
68
- value: number;
69
- }[];
70
- export declare const CreateDefaultAccessLevels: (seed: string, accessLevels: PreDBAccessLevel[]) => {
71
- _id: string;
72
- uiLabel: string;
73
- name: string;
74
- value: number;
75
- }[];
76
- export declare const generateKeyNamesByAccessLevel: <AccessLevel extends PreDBAccessLevel>(namespace: string, accessLevels: AccessLevel[]) => { [key in AccessLevel["name"]]: string; };
77
- export declare const defaultPermissionKeySuffix = "permission-key";
78
- export declare const defaultLevelsRouteLookupWords: {
79
- [k: string]: string;
80
- };
1
+ export declare const PermissionDBGroup = "permissions";
package/consts.js CHANGED
@@ -1,60 +1 @@
1
- import { md5 } from '@nu-art/ts-common';
2
- export const PermissionDBGroup = 'permission';
3
- export const Prefix_PermissionKey = 'permission-key--';
4
- export const DomainNamespace_PermissionAssignment = 'Permissions Assignment';
5
- export const DomainNamespace_PermissionManagement = 'Permissions Management';
6
- export const DefaultAccessLevel_NoAccess = Object.freeze({ name: 'No-Access', value: 0 });
7
- export const DefaultAccessLevel_Read = Object.freeze({ name: 'Read', value: 200 });
8
- export const DefaultAccessLevel_Write = Object.freeze({ name: 'Write', value: 400 });
9
- export const DefaultAccessLevel_Delete = Object.freeze({ name: 'Delete', value: 600 });
10
- export const DefaultAccessLevel_Admin = Object.freeze({ name: 'Admin', value: 1000 });
11
- //UI access levels
12
- export const DefaultUIAccessLevel_NoAccess = Object.freeze({ name: 'Ui-No-Access', value: 0 });
13
- export const DefaultUIAccessLevel_Beta = Object.freeze({ name: 'Beta', value: 1 });
14
- export const DefaultUIAccessLevel_Release = Object.freeze({ name: 'Release', value: 2 });
15
- export const defaultUIAccessLevels = [
16
- DefaultUIAccessLevel_NoAccess,
17
- DefaultUIAccessLevel_Beta,
18
- DefaultUIAccessLevel_Release
19
- ];
20
- export const defaultAccessLevels = [
21
- DefaultAccessLevel_NoAccess,
22
- DefaultAccessLevel_Read,
23
- DefaultAccessLevel_Write,
24
- DefaultAccessLevel_Delete,
25
- DefaultAccessLevel_Admin,
26
- ];
27
- export const DuplicateDefaultAccessLevels = (seed) => {
28
- return CreateDefaultAccessLevels(seed, [
29
- { ...DefaultAccessLevel_NoAccess },
30
- { ...DefaultAccessLevel_Read },
31
- { ...DefaultAccessLevel_Write },
32
- { ...DefaultAccessLevel_Delete },
33
- { ...DefaultAccessLevel_Admin },
34
- ]);
35
- };
36
- const generateDefaultKeyName = (namespace, accessLevelName) => {
37
- return `${defaultPermissionKeySuffix}--${namespace}--${accessLevelName}`;
38
- };
39
- export const CreateDefaultAccessLevels = (seed, accessLevels) => {
40
- return accessLevels.map(level => ({ ...level, _id: md5(`${seed}${level.name}`), uiLabel: level.name }));
41
- };
42
- export const generateKeyNamesByAccessLevel = (namespace, accessLevels) => {
43
- return accessLevels.reduce((keyMapper, currentAccessLevel) => {
44
- const currentKey = currentAccessLevel.name;
45
- keyMapper[currentKey] = generateDefaultKeyName(namespace, currentAccessLevel.name);
46
- return keyMapper;
47
- }, {});
48
- };
49
- export const defaultPermissionKeySuffix = 'permission-key';
50
- export const defaultLevelsRouteLookupWords = {
51
- 'query': 'Read',
52
- 'query-unique': 'Read',
53
- 'sync': 'Read',
54
- 'patch': 'Write',
55
- 'upsert': 'Write',
56
- 'upsert-all': 'Write',
57
- 'delete': 'Delete',
58
- 'delete-all': 'Delete',
59
- 'delete-unique': 'Delete'
60
- };
1
+ export const PermissionDBGroup = 'permissions';
@@ -0,0 +1,20 @@
1
+ import type { UniqueId } from '@nu-art/ts-common';
2
+ export type ScopedAccessIds = Record<string, UniqueId[]>;
3
+ export declare const AccessScope_Self = "_self";
4
+ export type DocumentAccessInner = {
5
+ readers: UniqueId[];
6
+ writers: UniqueId[];
7
+ deleters: UniqueId[];
8
+ owners: UniqueId[];
9
+ };
10
+ export type DocumentAccessFields = {
11
+ __access: DocumentAccessInner;
12
+ };
13
+ export type DocumentAccessCapabilities = {
14
+ read?: boolean;
15
+ write?: boolean;
16
+ delete?: boolean;
17
+ own?: boolean;
18
+ };
19
+ export declare const AllDocumentAccessKeys: (keyof DocumentAccessInner)[];
20
+ export declare const CapabilityToAccessKey: Record<keyof DocumentAccessCapabilities, keyof DocumentAccessInner>;
@@ -0,0 +1,8 @@
1
+ export const AccessScope_Self = '_self';
2
+ export const AllDocumentAccessKeys = ['readers', 'writers', 'deleters', 'owners'];
3
+ export const CapabilityToAccessKey = {
4
+ read: 'readers',
5
+ write: 'writers',
6
+ delete: 'deleters',
7
+ own: 'owners',
8
+ };
@@ -0,0 +1,14 @@
1
+ import type { PermissionScope } from './_entity/permission-scope/brand.js';
2
+ export type GroupScopeEntry = {
3
+ readonly scope: PermissionScope;
4
+ readonly value: string;
5
+ };
6
+ export type AccessGroupDefinition = {
7
+ readonly key: string;
8
+ readonly label: string;
9
+ readonly scopes: readonly GroupScopeEntry[];
10
+ readonly memberKeys?: readonly string[];
11
+ readonly scopeKey?: string;
12
+ };
13
+ export declare function defineAccessGroup(def: AccessGroupDefinition): AccessGroupDefinition;
14
+ export declare function getRegisteredGroupDefinitions(): AccessGroupDefinition[];
@@ -0,0 +1,18 @@
1
+ import { BadImplementationException } from '@nu-art/ts-common';
2
+ const groupDefinitionRegistry = new Map();
3
+ export function defineAccessGroup(def) {
4
+ for (const { scope, value } of def.scopes) {
5
+ if (!scope.values.includes(value))
6
+ throw new BadImplementationException(`Invalid value '${value}' for scope '${scope.key}'. Valid values: [${scope.values.join(', ')}]`);
7
+ }
8
+ if (groupDefinitionRegistry.has(def.key))
9
+ throw new BadImplementationException(`Duplicate access group definition for key '${def.key}'`);
10
+ if (def.memberKeys?.includes(def.key))
11
+ throw new BadImplementationException(`Access group '${def.key}' cannot reference itself as a member`);
12
+ const frozen = Object.freeze(def);
13
+ groupDefinitionRegistry.set(def.key, frozen);
14
+ return frozen;
15
+ }
16
+ export function getRegisteredGroupDefinitions() {
17
+ return [...groupDefinitionRegistry.values()];
18
+ }
package/index.d.ts CHANGED
@@ -1,10 +1,12 @@
1
- export * from './_entity/permission-access-level/index.js';
2
- export * from './_entity/permission-api/index.js';
3
- export * from './_entity/permission-domain/index.js';
4
- export * from './_entity/permission-group/index.js';
5
- export * from './_entity/permission-project/index.js';
6
- export * from './_entity/permission-user/index.js';
7
- export * from './apis.js';
8
- export * from './consts.js';
9
- export * from './types.js';
10
- export * from './permission-keys.js';
1
+ export * from './_entity/permission-scope/types.js';
2
+ export * from './_entity/permission-scope/db-def.js';
3
+ export * from './_entity/permission-scope/brand.js';
4
+ export * from './_entity/user-permissions/types.js';
5
+ export * from './_entity/user-permissions/db-def.js';
6
+ export * from './_entity/user-permissions/api-def.js';
7
+ export * from './session-data.js';
8
+ export * from './permissions-scopes.js';
9
+ export * from './group-definition.js';
10
+ export * from './_entity/access-group/types.js';
11
+ export * from './_entity/access-group/db-def.js';
12
+ export * from './document-access.js';
package/index.js CHANGED
@@ -16,13 +16,15 @@
16
16
  * See the License for the specific language governing permissions and
17
17
  * limitations under the License.
18
18
  */
19
- export * from './_entity/permission-access-level/index.js';
20
- export * from './_entity/permission-api/index.js';
21
- export * from './_entity/permission-domain/index.js';
22
- export * from './_entity/permission-group/index.js';
23
- export * from './_entity/permission-project/index.js';
24
- export * from './_entity/permission-user/index.js';
25
- export * from './apis.js';
26
- export * from './consts.js';
27
- export * from './types.js';
28
- export * from './permission-keys.js';
19
+ export * from './_entity/permission-scope/types.js';
20
+ export * from './_entity/permission-scope/db-def.js';
21
+ export * from './_entity/permission-scope/brand.js';
22
+ export * from './_entity/user-permissions/types.js';
23
+ export * from './_entity/user-permissions/db-def.js';
24
+ export * from './_entity/user-permissions/api-def.js';
25
+ export * from './session-data.js';
26
+ export * from './permissions-scopes.js';
27
+ export * from './group-definition.js';
28
+ export * from './_entity/access-group/types.js';
29
+ export * from './_entity/access-group/db-def.js';
30
+ export * from './document-access.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nu-art/permissions-shared",
3
- "version": "0.401.9",
3
+ "version": "0.500.6",
4
4
  "description": "Permissions Shared",
5
5
  "keywords": [
6
6
  "TacB0sS",
@@ -11,7 +11,6 @@
11
11
  "nu-art",
12
12
  "permissions",
13
13
  "saml",
14
- "thunderstorm",
15
14
  "typescript",
16
15
  "user-account"
17
16
  ],
@@ -35,11 +34,10 @@
35
34
  "test": "ts-mocha -w -p src/test/tsconfig.json --timeout 0 --inspect=8107 --watch-files '**/*.ts' src/test/__all-tests.ts"
36
35
  },
37
36
  "dependencies": {
38
- "@nu-art/ts-common": "0.401.9",
39
- "@nu-art/firebase-shared": "0.401.9",
40
- "@nu-art/thunderstorm-shared": "0.401.9",
41
- "@nu-art/user-account-shared": "0.401.9",
42
- "@nu-art/ts-styles": "0.401.9",
37
+ "@nu-art/ts-common": "0.500.6",
38
+ "@nu-art/firebase-shared": "0.500.6",
39
+ "@nu-art/user-account-shared": "0.500.6",
40
+ "@nu-art/ts-styles": "0.500.6",
43
41
  "firebase": "^11.9.0",
44
42
  "firebase-admin": "13.4.0",
45
43
  "firebase-functions": "6.3.2",
@@ -48,7 +46,9 @@
48
46
  "react-router-dom": "^6.9.0",
49
47
  "moment": "^2.29.4",
50
48
  "saml2-js": "^4.0.1",
51
- "express": "^4.18.2"
49
+ "express": "^4.18.2",
50
+ "@nu-art/api-types": "0.500.6",
51
+ "@nu-art/db-api-shared": "0.500.6"
52
52
  },
53
53
  "devDependencies": {
54
54
  "@types/react": "^18.0.0",
@@ -59,6 +59,7 @@
59
59
  "@types/chai": "^4.3.4",
60
60
  "@types/mocha": "^10.0.1",
61
61
  "@types/history": "^4.7.2",
62
+ "@types/request": "^2.48.1",
62
63
  "@types/saml2-js": "^1.6.8"
63
64
  },
64
65
  "unitConfig": {
@@ -0,0 +1,8 @@
1
+ export declare const PermissionScope_PermissionsUI: import("./_entity/permission-scope/brand.js").PermissionScope & {
2
+ key: "permissions-ui";
3
+ values: readonly ["view"];
4
+ };
5
+ export declare const PermissionScope_AccessGroup: import("./_entity/permission-scope/brand.js").PermissionScope & {
6
+ key: "access-group";
7
+ values: readonly ["create"];
8
+ };
@@ -0,0 +1,3 @@
1
+ import { definePermissionScope } from './_entity/permission-scope/brand.js';
2
+ export const PermissionScope_PermissionsUI = definePermissionScope('permissions-ui', ['view']);
3
+ export const PermissionScope_AccessGroup = definePermissionScope('access-group', ['create']);
@@ -0,0 +1,4 @@
1
+ import { TypedKeyValue } from '@nu-art/ts-common';
2
+ export type SessionData_StrictMode = TypedKeyValue<'strictMode', {
3
+ isStrictMode: boolean;
4
+ }>;
@@ -1,5 +0,0 @@
1
- import { ApiDefResolver } from '@nu-art/thunderstorm-shared';
2
- export type ApiStruct_PermissionAccessLevel = {
3
- _v1: {};
4
- };
5
- export declare const ApiDef_PermissionAccessLevel: ApiDefResolver<ApiStruct_PermissionAccessLevel>;
@@ -1,3 +0,0 @@
1
- export const ApiDef_PermissionAccessLevel = {
2
- _v1: {}
3
- };
@@ -1,3 +0,0 @@
1
- import { DBDef_V3 } from '@nu-art/ts-common';
2
- import { DBProto_PermissionAccessLevel } from './types.js';
3
- export declare const DBDef_PermissionAccessLevel: DBDef_V3<DBProto_PermissionAccessLevel>;
@@ -1,31 +0,0 @@
1
- import { tsValidateIsInRange, tsValidateString, tsValidateStringWithDashes, tsValidateUniqueId } from '@nu-art/ts-common';
2
- import { PermissionDBGroup } from '../../consts.js';
3
- const Validator_ModifiableProps = {
4
- domainId: tsValidateUniqueId,
5
- name: tsValidateStringWithDashes,
6
- uiLabel: tsValidateString(),
7
- value: tsValidateIsInRange([[0, 1000]]),
8
- };
9
- const Validator_GeneratedProps = {
10
- _auditorId: tsValidateString()
11
- };
12
- export const DBDef_PermissionAccessLevel = {
13
- modifiablePropsValidator: Validator_ModifiableProps,
14
- generatedPropsValidator: Validator_GeneratedProps,
15
- versions: ['1.0.1', '1.0.0'],
16
- dbKey: 'permissions--level',
17
- entityName: 'PermissionAccessLevel',
18
- frontend: {
19
- group: PermissionDBGroup,
20
- name: 'level',
21
- },
22
- backend: {
23
- name: 'permissions--level',
24
- },
25
- dependencies: {
26
- domainId: {
27
- dbKey: 'permissions--domain',
28
- fieldType: 'string',
29
- }
30
- }
31
- };
@@ -1,3 +0,0 @@
1
- export * from './types.js';
2
- export * from './db-def.js';
3
- export * from './api-def.js';
@@ -1,4 +0,0 @@
1
- // Generated DB Item type: PermissionAccessLevel
2
- export * from './types.js';
3
- export * from './db-def.js';
4
- export * from './api-def.js';