@lightdash/common 0.1947.0 → 0.1949.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/cjs/authorization/projectMemberAbility.d.ts.map +1 -1
- package/dist/cjs/authorization/projectMemberAbility.js +0 -4
- package/dist/cjs/authorization/projectMemberAbility.js.map +1 -1
- package/dist/cjs/authorization/roleToScopeMapping.d.ts +4 -5
- package/dist/cjs/authorization/roleToScopeMapping.d.ts.map +1 -1
- package/dist/cjs/authorization/roleToScopeMapping.js +28 -34
- package/dist/cjs/authorization/roleToScopeMapping.js.map +1 -1
- package/dist/cjs/authorization/roleToScopeMapping.test.js +38 -24
- package/dist/cjs/authorization/roleToScopeMapping.test.js.map +1 -1
- package/dist/cjs/authorization/roleToScopeMapping.testUtils.js +3 -3
- package/dist/cjs/authorization/roleToScopeMapping.testUtils.js.map +1 -1
- package/dist/cjs/authorization/roleToScopeParity.test.d.ts +2 -0
- package/dist/cjs/authorization/roleToScopeParity.test.d.ts.map +1 -0
- package/dist/cjs/authorization/roleToScopeParity.test.js +195 -0
- package/dist/cjs/authorization/roleToScopeParity.test.js.map +1 -0
- package/dist/cjs/authorization/scopeAbilityBuilder.d.ts.map +1 -1
- package/dist/cjs/authorization/scopeAbilityBuilder.js +10 -7
- package/dist/cjs/authorization/scopeAbilityBuilder.js.map +1 -1
- package/dist/cjs/authorization/scopeAbilityBuilder.test.js +312 -89
- package/dist/cjs/authorization/scopeAbilityBuilder.test.js.map +1 -1
- package/dist/cjs/authorization/scopes.d.ts.map +1 -1
- package/dist/cjs/authorization/scopes.js +102 -90
- package/dist/cjs/authorization/scopes.js.map +1 -1
- package/dist/cjs/ee/AiAgent/schemas/sortField.js +1 -1
- package/dist/cjs/ee/AiAgent/schemas/sortField.js.map +1 -1
- package/dist/cjs/ee/AiAgent/schemas/tools/toolSearchFieldValuesArgs.d.ts +1 -1
- package/dist/cjs/ee/AiAgent/schemas/tools/toolSearchFieldValuesArgs.d.ts.map +1 -1
- package/dist/cjs/ee/AiAgent/schemas/tools/toolSearchFieldValuesArgs.js +4 -4
- package/dist/cjs/ee/AiAgent/schemas/tools/toolSearchFieldValuesArgs.js.map +1 -1
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types/roles.d.ts +6 -3
- package/dist/cjs/types/roles.d.ts.map +1 -1
- package/dist/cjs/types/scopes.d.ts +2 -2
- package/dist/cjs/types/scopes.d.ts.map +1 -1
- package/dist/esm/authorization/projectMemberAbility.d.ts.map +1 -1
- package/dist/esm/authorization/projectMemberAbility.js +0 -4
- package/dist/esm/authorization/projectMemberAbility.js.map +1 -1
- package/dist/esm/authorization/roleToScopeMapping.d.ts +4 -5
- package/dist/esm/authorization/roleToScopeMapping.d.ts.map +1 -1
- package/dist/esm/authorization/roleToScopeMapping.js +24 -31
- package/dist/esm/authorization/roleToScopeMapping.js.map +1 -1
- package/dist/esm/authorization/roleToScopeMapping.test.js +39 -25
- package/dist/esm/authorization/roleToScopeMapping.test.js.map +1 -1
- package/dist/esm/authorization/roleToScopeMapping.testUtils.js +4 -4
- package/dist/esm/authorization/roleToScopeMapping.testUtils.js.map +1 -1
- package/dist/esm/authorization/roleToScopeParity.test.d.ts +2 -0
- package/dist/esm/authorization/roleToScopeParity.test.d.ts.map +1 -0
- package/dist/esm/authorization/roleToScopeParity.test.js +193 -0
- package/dist/esm/authorization/roleToScopeParity.test.js.map +1 -0
- package/dist/esm/authorization/scopeAbilityBuilder.d.ts.map +1 -1
- package/dist/esm/authorization/scopeAbilityBuilder.js +10 -7
- package/dist/esm/authorization/scopeAbilityBuilder.js.map +1 -1
- package/dist/esm/authorization/scopeAbilityBuilder.test.js +312 -89
- package/dist/esm/authorization/scopeAbilityBuilder.test.js.map +1 -1
- package/dist/esm/authorization/scopes.d.ts.map +1 -1
- package/dist/esm/authorization/scopes.js +102 -90
- package/dist/esm/authorization/scopes.js.map +1 -1
- package/dist/esm/ee/AiAgent/schemas/sortField.js +1 -1
- package/dist/esm/ee/AiAgent/schemas/sortField.js.map +1 -1
- package/dist/esm/ee/AiAgent/schemas/tools/toolSearchFieldValuesArgs.d.ts +1 -1
- package/dist/esm/ee/AiAgent/schemas/tools/toolSearchFieldValuesArgs.d.ts.map +1 -1
- package/dist/esm/ee/AiAgent/schemas/tools/toolSearchFieldValuesArgs.js +4 -4
- package/dist/esm/ee/AiAgent/schemas/tools/toolSearchFieldValuesArgs.js.map +1 -1
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/roles.d.ts +6 -3
- package/dist/esm/types/roles.d.ts.map +1 -1
- package/dist/esm/types/scopes.d.ts +2 -2
- package/dist/esm/types/scopes.d.ts.map +1 -1
- package/dist/tsconfig.types.tsbuildinfo +1 -1
- package/dist/types/authorization/projectMemberAbility.d.ts.map +1 -1
- package/dist/types/authorization/roleToScopeMapping.d.ts +4 -5
- package/dist/types/authorization/roleToScopeMapping.d.ts.map +1 -1
- package/dist/types/authorization/roleToScopeParity.test.d.ts +2 -0
- package/dist/types/authorization/roleToScopeParity.test.d.ts.map +1 -0
- package/dist/types/authorization/scopeAbilityBuilder.d.ts.map +1 -1
- package/dist/types/authorization/scopes.d.ts.map +1 -1
- package/dist/types/ee/AiAgent/schemas/tools/toolSearchFieldValuesArgs.d.ts +1 -1
- package/dist/types/ee/AiAgent/schemas/tools/toolSearchFieldValuesArgs.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/types/roles.d.ts +6 -3
- package/dist/types/types/roles.d.ts.map +1 -1
- package/dist/types/types/scopes.d.ts +2 -2
- package/dist/types/types/scopes.d.ts.map +1 -1
- package/package.json +2 -1
@@ -0,0 +1,195 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
/* eslint-disable no-console */
|
4
|
+
const ability_1 = require("@casl/ability");
|
5
|
+
const lodash_1 = require("lodash");
|
6
|
+
const projectMemberRole_1 = require("../types/projectMemberRole");
|
7
|
+
const projectMemberAbility_1 = require("./projectMemberAbility");
|
8
|
+
const projectMemberAbility_mock_1 = require("./projectMemberAbility.mock");
|
9
|
+
const roleToScopeMapping_1 = require("./roleToScopeMapping");
|
10
|
+
const scopeAbilityBuilder_1 = require("./scopeAbilityBuilder");
|
11
|
+
/**
|
12
|
+
* Normalize a CASL rule for comparison by sorting object keys and handling undefined values
|
13
|
+
*/
|
14
|
+
const normalizeRule = (rule) => ({
|
15
|
+
action: rule.action,
|
16
|
+
subject: rule.subject,
|
17
|
+
});
|
18
|
+
/**
|
19
|
+
* Compare two sets of CASL rules for functional equivalence
|
20
|
+
*/
|
21
|
+
const compareRuleSets = (roleBasedRules, scopeBasedRules, roleName) => {
|
22
|
+
const normalizedRoleRules = roleBasedRules.map(normalizeRule);
|
23
|
+
const normalizedScopeRules = scopeBasedRules.map(normalizeRule);
|
24
|
+
const mismatches = [];
|
25
|
+
// Check if rule counts match
|
26
|
+
if (normalizedRoleRules.length !== normalizedScopeRules.length) {
|
27
|
+
mismatches.push(`Rule count mismatch: role-based has ${normalizedRoleRules.length} rules, scope-based has ${normalizedScopeRules.length} rules`);
|
28
|
+
}
|
29
|
+
// Group rules by action+subject for easier comparison
|
30
|
+
const roleRulesGrouped = (0, lodash_1.groupBy)(normalizedRoleRules, (rule) => `${rule.action}:${rule.subject}`);
|
31
|
+
const scopeRulesGrouped = (0, lodash_1.groupBy)(normalizedScopeRules, (rule) => `${rule.action}:${rule.subject}`);
|
32
|
+
// Check for missing or extra rule types
|
33
|
+
const roleKeys = new Set(Object.keys(roleRulesGrouped));
|
34
|
+
const scopeKeys = new Set(Object.keys(scopeRulesGrouped));
|
35
|
+
const missingInScope = [...roleKeys].filter((key) => !scopeKeys.has(key));
|
36
|
+
const extraInScope = [...scopeKeys].filter((key) => !roleKeys.has(key));
|
37
|
+
missingInScope.forEach((key) => {
|
38
|
+
mismatches.push(`Missing in scope-based: ${key}`);
|
39
|
+
});
|
40
|
+
extraInScope.forEach((key) => {
|
41
|
+
mismatches.push(`Extra in scope-based: ${key}`);
|
42
|
+
});
|
43
|
+
// Compare matching rule groups
|
44
|
+
const commonKeys = [...roleKeys].filter((key) => scopeKeys.has(key));
|
45
|
+
commonKeys.forEach((key) => {
|
46
|
+
const roleRulesForKey = roleRulesGrouped[key];
|
47
|
+
const scopeRulesForKey = scopeRulesGrouped[key];
|
48
|
+
// For rules with the same action+subject, we need to check if the conditions are equivalent
|
49
|
+
// This is more complex because multiple rules might combine to create the same effective permissions
|
50
|
+
if (roleRulesForKey.length !== scopeRulesForKey.length) {
|
51
|
+
// Different number of rules for same action+subject - this might be OK if conditions are equivalent
|
52
|
+
// For now, we'll flag this as a potential issue but continue checking
|
53
|
+
mismatches.push(`Different rule count for ${key}: role-based has ${roleRulesForKey.length}, scope-based has ${scopeRulesForKey.length}`);
|
54
|
+
}
|
55
|
+
// Check if rule sets contain equivalent conditions
|
56
|
+
const roleConditions = roleRulesForKey
|
57
|
+
.map((r) => r.conditions)
|
58
|
+
.filter(Boolean);
|
59
|
+
const scopeConditions = scopeRulesForKey
|
60
|
+
.map((r) => r.conditions)
|
61
|
+
.filter(Boolean);
|
62
|
+
if (!(0, lodash_1.isEqual)(roleConditions, scopeConditions)) {
|
63
|
+
mismatches.push(`Condition mismatch on ${roleName} for ${key}:\nRole-based: ${JSON.stringify(roleConditions, null, 2)}\nScope-based: ${JSON.stringify(scopeConditions, null, 2)}`);
|
64
|
+
}
|
65
|
+
});
|
66
|
+
return {
|
67
|
+
isEqual: mismatches.length === 0,
|
68
|
+
mismatches,
|
69
|
+
};
|
70
|
+
};
|
71
|
+
/**
|
72
|
+
* List of enterprise-only subject names that should be filtered in non-enterprise mode
|
73
|
+
*/
|
74
|
+
const ENTERPRISE_SUBJECTS = new Set([
|
75
|
+
'MetricsTree',
|
76
|
+
'SpotlightTableConfig',
|
77
|
+
'AiAgent',
|
78
|
+
'AiAgentThread',
|
79
|
+
'ContentAsCode',
|
80
|
+
]);
|
81
|
+
/**
|
82
|
+
* Filter enterprise rules from role-based abilities when testing in non-enterprise mode
|
83
|
+
*/
|
84
|
+
const filterEnterpriseRules = (rules, isEnterprise) => {
|
85
|
+
if (isEnterprise) {
|
86
|
+
return rules;
|
87
|
+
}
|
88
|
+
return rules.filter((rule) => !ENTERPRISE_SUBJECTS.has(rule.subject));
|
89
|
+
};
|
90
|
+
/**
|
91
|
+
* Test role-to-scope parity for a specific role
|
92
|
+
*/
|
93
|
+
const testRoleScopeParity = (role, isEnterprise = false) => {
|
94
|
+
// Get the appropriate mock member profile
|
95
|
+
const memberProfiles = {
|
96
|
+
[projectMemberRole_1.ProjectMemberRole.VIEWER]: projectMemberAbility_mock_1.PROJECT_VIEWER,
|
97
|
+
[projectMemberRole_1.ProjectMemberRole.INTERACTIVE_VIEWER]: projectMemberAbility_mock_1.PROJECT_INTERACTIVE_VIEWER,
|
98
|
+
[projectMemberRole_1.ProjectMemberRole.EDITOR]: projectMemberAbility_mock_1.PROJECT_EDITOR,
|
99
|
+
[projectMemberRole_1.ProjectMemberRole.DEVELOPER]: projectMemberAbility_mock_1.PROJECT_DEVELOPER,
|
100
|
+
[projectMemberRole_1.ProjectMemberRole.ADMIN]: projectMemberAbility_mock_1.PROJECT_ADMIN,
|
101
|
+
};
|
102
|
+
const member = memberProfiles[role];
|
103
|
+
// Build abilities using role-based approach
|
104
|
+
const roleBuilder = new ability_1.AbilityBuilder(ability_1.Ability);
|
105
|
+
projectMemberAbility_1.projectMemberAbilities[role](member, roleBuilder);
|
106
|
+
const roleAbility = roleBuilder.build();
|
107
|
+
// Filter enterprise rules from role-based abilities if not enterprise
|
108
|
+
const filteredRoleRules = filterEnterpriseRules(roleAbility.rules, isEnterprise);
|
109
|
+
// Build abilities using scope-based approach
|
110
|
+
const scopeBuilder = new ability_1.AbilityBuilder(ability_1.Ability);
|
111
|
+
const scopes = (0, roleToScopeMapping_1.getAllScopesForRole)(role);
|
112
|
+
(0, scopeAbilityBuilder_1.buildAbilityFromScopes)({
|
113
|
+
userUuid: member.userUuid,
|
114
|
+
projectUuid: member.projectUuid,
|
115
|
+
scopes,
|
116
|
+
isEnterprise,
|
117
|
+
}, scopeBuilder);
|
118
|
+
const scopeAbility = scopeBuilder.build();
|
119
|
+
// Compare the filtered rule sets
|
120
|
+
const result = compareRuleSets(filteredRoleRules, scopeAbility.rules, role);
|
121
|
+
return result;
|
122
|
+
};
|
123
|
+
describe('Role to Scope Parity', () => {
|
124
|
+
const systemProjectRoles = [
|
125
|
+
projectMemberRole_1.ProjectMemberRole.VIEWER,
|
126
|
+
projectMemberRole_1.ProjectMemberRole.INTERACTIVE_VIEWER,
|
127
|
+
projectMemberRole_1.ProjectMemberRole.EDITOR,
|
128
|
+
projectMemberRole_1.ProjectMemberRole.DEVELOPER,
|
129
|
+
projectMemberRole_1.ProjectMemberRole.ADMIN,
|
130
|
+
];
|
131
|
+
describe('Non-Enterprise Environment', () => {
|
132
|
+
it.each(systemProjectRoles)('should have equivalent permissions for %s role', (role) => {
|
133
|
+
const comparison = testRoleScopeParity(role, false);
|
134
|
+
if (!comparison.isEqual) {
|
135
|
+
console.error(`\n=== PARITY MISMATCH FOR ${role.toUpperCase()} ROLE ===`);
|
136
|
+
comparison.mismatches.forEach((mismatch) => {
|
137
|
+
console.error(`❌ ${mismatch}`);
|
138
|
+
});
|
139
|
+
console.error('=== END MISMATCH REPORT ===\n');
|
140
|
+
}
|
141
|
+
expect(comparison.isEqual).toBe(true);
|
142
|
+
});
|
143
|
+
});
|
144
|
+
describe('Enterprise Environment', () => {
|
145
|
+
it.each(systemProjectRoles)('should have equivalent permissions for %s role in enterprise', (role) => {
|
146
|
+
const comparison = testRoleScopeParity(role, true);
|
147
|
+
if (!comparison.isEqual) {
|
148
|
+
console.error(`\n=== ENTERPRISE PARITY MISMATCH FOR ${role.toUpperCase()} ROLE ===`);
|
149
|
+
comparison.mismatches.forEach((mismatch) => {
|
150
|
+
console.error(`❌ ${mismatch}`);
|
151
|
+
});
|
152
|
+
console.error('=== END MISMATCH REPORT ===\n');
|
153
|
+
}
|
154
|
+
expect(comparison.isEqual).toBe(true);
|
155
|
+
});
|
156
|
+
});
|
157
|
+
// This is helpful for debugging, but it's not a test
|
158
|
+
describe.skip('Rule Count Analysis', () => {
|
159
|
+
it('should report rule counts for documentation', () => {
|
160
|
+
console.log('\n=== ROLE PERMISSION RULE COUNTS ===');
|
161
|
+
systemProjectRoles.forEach((role) => {
|
162
|
+
const member = {
|
163
|
+
[projectMemberRole_1.ProjectMemberRole.VIEWER]: projectMemberAbility_mock_1.PROJECT_VIEWER,
|
164
|
+
[projectMemberRole_1.ProjectMemberRole.INTERACTIVE_VIEWER]: projectMemberAbility_mock_1.PROJECT_INTERACTIVE_VIEWER,
|
165
|
+
[projectMemberRole_1.ProjectMemberRole.EDITOR]: projectMemberAbility_mock_1.PROJECT_EDITOR,
|
166
|
+
[projectMemberRole_1.ProjectMemberRole.DEVELOPER]: projectMemberAbility_mock_1.PROJECT_DEVELOPER,
|
167
|
+
[projectMemberRole_1.ProjectMemberRole.ADMIN]: projectMemberAbility_mock_1.PROJECT_ADMIN,
|
168
|
+
}[role];
|
169
|
+
// Count role-based rules
|
170
|
+
const roleBuilder = new ability_1.AbilityBuilder(ability_1.Ability);
|
171
|
+
projectMemberAbility_1.projectMemberAbilities[role](member, roleBuilder);
|
172
|
+
const roleRuleCount = roleBuilder.build().rules.length;
|
173
|
+
// Count scope-based rules
|
174
|
+
const scopeBuilder = new ability_1.AbilityBuilder(ability_1.Ability);
|
175
|
+
const scopes = (0, roleToScopeMapping_1.getAllScopesForRole)(role);
|
176
|
+
(0, scopeAbilityBuilder_1.buildAbilityFromScopes)({
|
177
|
+
userUuid: member.userUuid,
|
178
|
+
projectUuid: member.projectUuid,
|
179
|
+
scopes,
|
180
|
+
isEnterprise: false,
|
181
|
+
}, scopeBuilder);
|
182
|
+
const scopeRuleCount = scopeBuilder.build().rules.length;
|
183
|
+
console.log(`${role.padEnd(20)}: Role-based: ${roleRuleCount
|
184
|
+
.toString()
|
185
|
+
.padStart(3)}, Scope-based: ${scopeRuleCount
|
186
|
+
.toString()
|
187
|
+
.padStart(3)}, Scopes: ${scopes.length
|
188
|
+
.toString()
|
189
|
+
.padStart(3)}`);
|
190
|
+
});
|
191
|
+
console.log('=== END RULE COUNT ANALYSIS ===\n');
|
192
|
+
});
|
193
|
+
});
|
194
|
+
});
|
195
|
+
//# sourceMappingURL=roleToScopeParity.test.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"roleToScopeParity.test.js","sourceRoot":"","sources":["../../../src/authorization/roleToScopeParity.test.ts"],"names":[],"mappings":";;AAAA,+BAA+B;AAC/B,2CAAwD;AACxD,mCAA0C;AAC1C,kEAA+D;AAC/D,iEAAgE;AAChE,2EAMqC;AACrC,6DAA2D;AAC3D,+DAA+D;AAW/D;;GAEG;AACH,MAAM,aAAa,GAAG,CAAC,IAAc,EAAY,EAAE,CAAC,CAAC;IACjD,MAAM,EAAE,IAAI,CAAC,MAAM;IACnB,OAAO,EAAE,IAAI,CAAC,OAAO;CACxB,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,eAAe,GAAG,CACpB,cAA0B,EAC1B,eAA2B,EAC3B,QAAgB,EAC0B,EAAE;IAC5C,MAAM,mBAAmB,GAAG,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC9D,MAAM,oBAAoB,GAAG,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAEhE,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,6BAA6B;IAC7B,IAAI,mBAAmB,CAAC,MAAM,KAAK,oBAAoB,CAAC,MAAM,EAAE,CAAC;QAC7D,UAAU,CAAC,IAAI,CACX,uCAAuC,mBAAmB,CAAC,MAAM,2BAA2B,oBAAoB,CAAC,MAAM,QAAQ,CAClI,CAAC;IACN,CAAC;IAED,sDAAsD;IACtD,MAAM,gBAAgB,GAAG,IAAA,gBAAO,EAC5B,mBAAmB,EACnB,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAC7C,CAAC;IACF,MAAM,iBAAiB,GAAG,IAAA,gBAAO,EAC7B,oBAAoB,EACpB,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAC7C,CAAC;IAEF,wCAAwC;IACxC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAE1D,MAAM,cAAc,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1E,MAAM,YAAY,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAExE,cAAc,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QAC3B,UAAU,CAAC,IAAI,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,YAAY,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACzB,UAAU,CAAC,IAAI,CAAC,yBAAyB,GAAG,EAAE,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,+BAA+B;IAC/B,MAAM,UAAU,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAErE,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACvB,MAAM,eAAe,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC9C,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAEhD,4FAA4F;QAC5F,qGAAqG;QACrG,IAAI,eAAe,CAAC,MAAM,KAAK,gBAAgB,CAAC,MAAM,EAAE,CAAC;YACrD,oGAAoG;YACpG,sEAAsE;YACtE,UAAU,CAAC,IAAI,CACX,4BAA4B,GAAG,oBAAoB,eAAe,CAAC,MAAM,qBAAqB,gBAAgB,CAAC,MAAM,EAAE,CAC1H,CAAC;QACN,CAAC;QAED,mDAAmD;QACnD,MAAM,cAAc,GAAG,eAAe;aACjC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;aACxB,MAAM,CAAC,OAAO,CAAC,CAAC;QACrB,MAAM,eAAe,GAAG,gBAAgB;aACnC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;aACxB,MAAM,CAAC,OAAO,CAAC,CAAC;QAErB,IAAI,CAAC,IAAA,gBAAO,EAAC,cAAc,EAAE,eAAe,CAAC,EAAE,CAAC;YAC5C,UAAU,CAAC,IAAI,CACX,yBAAyB,QAAQ,QAAQ,GAAG,kBAAkB,IAAI,CAAC,SAAS,CACxE,cAAc,EACd,IAAI,EACJ,CAAC,CACJ,kBAAkB,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAChE,CAAC;QACN,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO;QACH,OAAO,EAAE,UAAU,CAAC,MAAM,KAAK,CAAC;QAChC,UAAU;KACb,CAAC;AACN,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC;IAChC,aAAa;IACb,sBAAsB;IACtB,SAAS;IACT,eAAe;IACf,eAAe;CAClB,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,qBAAqB,GAAG,CAC1B,KAAiB,EACjB,YAAqB,EACX,EAAE;IACZ,IAAI,YAAY,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAC1E,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,mBAAmB,GAAG,CACxB,IAAuB,EACvB,eAAwB,KAAK,EACa,EAAE;IAC5C,0CAA0C;IAC1C,MAAM,cAAc,GAAG;QACnB,CAAC,qCAAiB,CAAC,MAAM,CAAC,EAAE,0CAAc;QAC1C,CAAC,qCAAiB,CAAC,kBAAkB,CAAC,EAAE,sDAA0B;QAClE,CAAC,qCAAiB,CAAC,MAAM,CAAC,EAAE,0CAAc;QAC1C,CAAC,qCAAiB,CAAC,SAAS,CAAC,EAAE,6CAAiB;QAChD,CAAC,qCAAiB,CAAC,KAAK,CAAC,EAAE,yCAAa;KAC3C,CAAC;IAEF,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAEpC,4CAA4C;IAC5C,MAAM,WAAW,GAAG,IAAI,wBAAc,CAAgB,iBAAO,CAAC,CAAC;IAC/D,6CAAsB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,EAAE,CAAC;IAExC,sEAAsE;IACtE,MAAM,iBAAiB,GAAG,qBAAqB,CAC3C,WAAW,CAAC,KAAmB,EAC/B,YAAY,CACf,CAAC;IAEF,6CAA6C;IAC7C,MAAM,YAAY,GAAG,IAAI,wBAAc,CAAgB,iBAAO,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,IAAA,wCAAmB,EAAC,IAAI,CAAC,CAAC;IAEzC,IAAA,4CAAsB,EAClB;QACI,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,MAAM;QACN,YAAY;KACf,EACD,YAAY,CACf,CAAC;IACF,MAAM,YAAY,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC;IAE1C,iCAAiC;IACjC,MAAM,MAAM,GAAG,eAAe,CAC1B,iBAAiB,EACjB,YAAY,CAAC,KAAmB,EAChC,IAAI,CACP,CAAC;IAEF,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEF,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IAClC,MAAM,kBAAkB,GAAG;QACvB,qCAAiB,CAAC,MAAM;QACxB,qCAAiB,CAAC,kBAAkB;QACpC,qCAAiB,CAAC,MAAM;QACxB,qCAAiB,CAAC,SAAS;QAC3B,qCAAiB,CAAC,KAAK;KAC1B,CAAC;IAEF,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACxC,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,CACvB,gDAAgD,EAChD,CAAC,IAAI,EAAE,EAAE;YACL,MAAM,UAAU,GAAG,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAEpD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;gBACtB,OAAO,CAAC,KAAK,CACT,6BAA6B,IAAI,CAAC,WAAW,EAAE,WAAW,CAC7D,CAAC;gBACF,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;oBACvC,OAAO,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC;gBACnC,CAAC,CAAC,CAAC;gBACH,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;YACnD,CAAC;YAED,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC,CACJ,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACpC,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,CACvB,8DAA8D,EAC9D,CAAC,IAAI,EAAE,EAAE;YACL,MAAM,UAAU,GAAG,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAEnD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;gBACtB,OAAO,CAAC,KAAK,CACT,wCAAwC,IAAI,CAAC,WAAW,EAAE,WAAW,CACxE,CAAC;gBACF,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;oBACvC,OAAO,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC;gBACnC,CAAC,CAAC,CAAC;gBACH,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;YACnD,CAAC;YAED,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC,CACJ,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,qDAAqD;IACrD,QAAQ,CAAC,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACtC,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACnD,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;YAErD,kBAAkB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBAChC,MAAM,MAAM,GAAG;oBACX,CAAC,qCAAiB,CAAC,MAAM,CAAC,EAAE,0CAAc;oBAC1C,CAAC,qCAAiB,CAAC,kBAAkB,CAAC,EAClC,sDAA0B;oBAC9B,CAAC,qCAAiB,CAAC,MAAM,CAAC,EAAE,0CAAc;oBAC1C,CAAC,qCAAiB,CAAC,SAAS,CAAC,EAAE,6CAAiB;oBAChD,CAAC,qCAAiB,CAAC,KAAK,CAAC,EAAE,yCAAa;iBAC3C,CAAC,IAAI,CAAC,CAAC;gBAER,yBAAyB;gBACzB,MAAM,WAAW,GAAG,IAAI,wBAAc,CAAgB,iBAAO,CAAC,CAAC;gBAC/D,6CAAsB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;gBAClD,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;gBAEvD,0BAA0B;gBAC1B,MAAM,YAAY,GAAG,IAAI,wBAAc,CAAgB,iBAAO,CAAC,CAAC;gBAChE,MAAM,MAAM,GAAG,IAAA,wCAAmB,EAAC,IAAI,CAAC,CAAC;gBACzC,IAAA,4CAAsB,EAClB;oBACI,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,MAAM;oBACN,YAAY,EAAE,KAAK;iBACtB,EACD,YAAY,CACf,CAAC;gBACF,MAAM,cAAc,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;gBAEzD,OAAO,CAAC,GAAG,CACP,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,iBAAiB,aAAa;qBAC3C,QAAQ,EAAE;qBACV,QAAQ,CAAC,CAAC,CAAC,kBAAkB,cAAc;qBAC3C,QAAQ,EAAE;qBACV,QAAQ,CAAC,CAAC,CAAC,aAAa,MAAM,CAAC,MAAM;qBACrC,QAAQ,EAAE;qBACV,QAAQ,CAAC,CAAC,CAAC,EAAE,CACrB,CAAC;YACN,CAAC,CAAC,CAAC;YAEH,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"scopeAbilityBuilder.d.ts","sourceRoot":"","sources":["../../../src/authorization/scopeAbilityBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAIpD,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,SAAS,CAAC;
|
1
|
+
{"version":3,"file":"scopeAbilityBuilder.d.ts","sourceRoot":"","sources":["../../../src/authorization/scopeAbilityBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAIpD,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,SAAS,CAAC;AAuD7C,KAAK,iBAAiB,GAChB;IACI,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,KAAK,CAAC;CACvB,GACD;IACI,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,KAAK,CAAC;CAC5B,CAAC;AAER,KAAK,cAAc,GAAG;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE;QAChB,GAAG,EAAE;YACD,OAAO,EAAE,OAAO,CAAC;YACjB,eAAe,EAAE,MAAM,EAAE,CAAC;SAC7B,CAAC;KACL,CAAC;CACL,GAAG,iBAAiB,CAAC;AAEtB;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,YACtB,cAAc,WACd,cAAc,CAAC,aAAa,CAAC,KACvC,IAaF,CAAC"}
|
@@ -26,13 +26,16 @@ const applyScopeAbilities = (context, builder) => {
|
|
26
26
|
if (!scope)
|
27
27
|
return;
|
28
28
|
const [action, subject] = (0, parseScopes_1.parseScope)(scopeName);
|
29
|
-
const conditionsList = scope.getConditions
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
29
|
+
const conditionsList = scope.getConditions(context);
|
30
|
+
// Apply each condition set if there are any
|
31
|
+
if (conditionsList.length === 0) {
|
32
|
+
builder.can(action, subject);
|
33
|
+
}
|
34
|
+
else {
|
35
|
+
conditionsList.forEach((conditions) => {
|
36
|
+
builder.can(action, subject, conditions);
|
37
|
+
});
|
38
|
+
}
|
36
39
|
});
|
37
40
|
handlePatConfigApplication(context, builder);
|
38
41
|
};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"scopeAbilityBuilder.js","sourceRoot":"","sources":["../../../src/authorization/scopeAbilityBuilder.ts"],"names":[],"mappings":";;;AAEA,+CAAwD;AACxD,qCAA0C;AAG1C,MAAM,0BAA0B,GAAG,CAC/B,OAAqB,EACrB,OAAsC,EACxC,EAAE;IACA,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,iBAAiB,IAAI,EAAE,CAAC;IACjD,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CACjC,CAAC,IAAI,EAAE,EAAE,CACL,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,qBAAqB,CACzE,CAAC;IAEF,IACI,CAAC,UAAU;QACX,GAAG,EAAE,OAAO;QACZ,OAAO,CAAC,gBAAgB;QACxB,GAAG,EAAE,eAAe,EAAE,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAC1D,CAAC;QACC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;IACjD,CAAC;AACL,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,mBAAmB,GAAG,CACxB,OAAqB,EACrB,OAAsC,EAClC,EAAE;IACN,MAAM,QAAQ,GAAG,IAAA,uBAAc,EAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAExE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;QACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QAElC,IAAI,CAAC,KAAK;YAAE,OAAO;QAEnB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAA,wBAAU,EAAC,SAAS,CAAC,CAAC;QAChD,MAAM,cAAc,GAAG,KAAK,CAAC,aAAa
|
1
|
+
{"version":3,"file":"scopeAbilityBuilder.js","sourceRoot":"","sources":["../../../src/authorization/scopeAbilityBuilder.ts"],"names":[],"mappings":";;;AAEA,+CAAwD;AACxD,qCAA0C;AAG1C,MAAM,0BAA0B,GAAG,CAC/B,OAAqB,EACrB,OAAsC,EACxC,EAAE;IACA,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,iBAAiB,IAAI,EAAE,CAAC;IACjD,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CACjC,CAAC,IAAI,EAAE,EAAE,CACL,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,qBAAqB,CACzE,CAAC;IAEF,IACI,CAAC,UAAU;QACX,GAAG,EAAE,OAAO;QACZ,OAAO,CAAC,gBAAgB;QACxB,GAAG,EAAE,eAAe,EAAE,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAC1D,CAAC;QACC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;IACjD,CAAC;AACL,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,mBAAmB,GAAG,CACxB,OAAqB,EACrB,OAAsC,EAClC,EAAE;IACN,MAAM,QAAQ,GAAG,IAAA,uBAAc,EAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAExE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;QACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QAElC,IAAI,CAAC,KAAK;YAAE,OAAO;QAEnB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAA,wBAAU,EAAC,SAAS,CAAC,CAAC;QAChD,MAAM,cAAc,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAEpD,4CAA4C;QAC5C,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACJ,cAAc,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;gBAClC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;YAC7C,CAAC,CAAC,CAAC;QACP,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,0BAA0B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC,CAAC;AAyBF;;;;GAIG;AACI,MAAM,sBAAsB,GAAG,CAClC,OAAuB,EACvB,OAAsC,EAClC,EAAE;IACN,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,KAAK,CAAC;IACnD,MAAM,MAAM,GAAG,IAAA,yBAAW,EAAC;QACvB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,YAAY;KACf,CAAC,CAAC;IACH,MAAM,aAAa,GAAG;QAClB,GAAG,OAAO;QACV,MAAM;QACN,YAAY;KACf,CAAC;IAEF,mBAAmB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC,CAAC;AAhBW,QAAA,sBAAsB,0BAgBjC"}
|