@drodil/backstage-plugin-qeta-node 3.26.0 → 3.28.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/defaultPermissionPolicy.cjs.js +15 -3
- package/dist/defaultPermissionPolicy.cjs.js.map +1 -1
- package/dist/index.cjs.js +8 -0
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +112 -20
- package/dist/permissionRules.cjs.js +101 -4
- package/dist/permissionRules.cjs.js.map +1 -1
- package/package.json +9 -9
|
@@ -22,19 +22,26 @@ class DefaultQetaPermissionPolicy {
|
|
|
22
22
|
if (request.permission.attributes.action === "update" || request.permission.attributes.action === "delete") {
|
|
23
23
|
if (pluginPermissionCommon.isResourcePermission(request.permission, backstagePluginQetaCommon.POST_RESOURCE_TYPE)) {
|
|
24
24
|
return backstagePluginQetaNode.createPostConditionalDecision(request.permission, {
|
|
25
|
-
|
|
25
|
+
anyOf: [
|
|
26
26
|
// Can edit and delete own questions
|
|
27
27
|
backstagePluginQetaNode.postAuthorConditionFactory({
|
|
28
28
|
userRef: user.identity.userEntityRef
|
|
29
|
+
}),
|
|
30
|
+
// Can edit and delete if tag expert
|
|
31
|
+
backstagePluginQetaNode.postTagExpertConditionFactory({
|
|
32
|
+
userRef: user.identity.userEntityRef
|
|
29
33
|
})
|
|
30
34
|
]
|
|
31
35
|
});
|
|
32
36
|
}
|
|
33
37
|
if (pluginPermissionCommon.isResourcePermission(request.permission, backstagePluginQetaCommon.ANSWER_RESOURCE_TYPE)) {
|
|
34
38
|
return backstagePluginQetaNode.createAnswerConditionalDecision(request.permission, {
|
|
35
|
-
|
|
39
|
+
anyOf: [
|
|
36
40
|
backstagePluginQetaNode.answerAuthorConditionFactory({
|
|
37
41
|
userRef: user.identity.userEntityRef
|
|
42
|
+
}),
|
|
43
|
+
backstagePluginQetaNode.answerTagExpertConditionFactory({
|
|
44
|
+
userRef: user.identity.userEntityRef
|
|
38
45
|
})
|
|
39
46
|
]
|
|
40
47
|
});
|
|
@@ -50,9 +57,14 @@ class DefaultQetaPermissionPolicy {
|
|
|
50
57
|
}
|
|
51
58
|
if (pluginPermissionCommon.isResourcePermission(request.permission, backstagePluginQetaCommon.COLLECTION_RESOUCE_TYPE)) {
|
|
52
59
|
return backstagePluginQetaNode.createCollectionConditionalDecision(request.permission, {
|
|
53
|
-
|
|
60
|
+
anyOf: [
|
|
61
|
+
// Allow deleting and updating only own collections
|
|
54
62
|
backstagePluginQetaNode.collectionOwnerConditionFactory({
|
|
55
63
|
userRef: user.identity.userEntityRef
|
|
64
|
+
}),
|
|
65
|
+
// Allow deleting and updating if tag expert
|
|
66
|
+
backstagePluginQetaNode.collectionTagExpertConditionFactory({
|
|
67
|
+
userRef: user.identity.userEntityRef
|
|
56
68
|
})
|
|
57
69
|
]
|
|
58
70
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaultPermissionPolicy.cjs.js","sources":["../src/defaultPermissionPolicy.ts"],"sourcesContent":["/*\n * SPDX-FileCopyrightText: Copyright 2024 OP Financial Group (https://op.fi). All Rights Reserved.\n * SPDX-License-Identifier: LicenseRef-OpAllRightsReserved\n */\nimport { BackstageIdentityResponse } from '@backstage/plugin-auth-node';\nimport {\n AuthorizeResult,\n isPermission,\n isResourcePermission,\n isUpdatePermission,\n PolicyDecision,\n} from '@backstage/plugin-permission-common';\nimport {\n PermissionPolicy,\n PolicyQuery,\n} from '@backstage/plugin-permission-node';\nimport {\n ANSWER_RESOURCE_TYPE,\n COLLECTION_RESOUCE_TYPE,\n COMMENT_RESOURCE_TYPE,\n POST_RESOURCE_TYPE,\n qetaModeratePermission,\n TAG_RESOURCE_TYPE,\n} from '@drodil/backstage-plugin-qeta-common';\nimport {\n answerAuthorConditionFactory,\n collectionOwnerConditionFactory,\n commentAuthorConditionFactory,\n createAnswerConditionalDecision,\n createCollectionConditionalDecision,\n createCommentConditionalDecision,\n createPostConditionalDecision,\n postAuthorConditionFactory,\n} from '@drodil/backstage-plugin-qeta-node';\nimport { Config } from '@backstage/config';\n\nexport class DefaultQetaPermissionPolicy implements PermissionPolicy {\n constructor(private readonly config?: Config) {}\n\n async handle(\n request: PolicyQuery,\n user?: BackstageIdentityResponse,\n ): Promise<PolicyDecision> {\n // We cannot do anything without a user\n if (!user) {\n return { result: AuthorizeResult.DENY };\n }\n\n // Moderators can modify anything\n const moderators =\n this.config?.getOptionalStringArray('qeta.moderators') ?? [];\n if (\n isPermission(request.permission, qetaModeratePermission) &&\n (moderators.includes(user.identity.userEntityRef) ||\n user.identity.ownershipEntityRefs.some(ref => moderators.includes(ref)))\n ) {\n return { result: AuthorizeResult.ALLOW };\n }\n\n if (\n request.permission.attributes.action === 'create' ||\n request.permission.attributes.action === 'read'\n ) {\n return { result: AuthorizeResult.ALLOW };\n }\n\n
|
|
1
|
+
{"version":3,"file":"defaultPermissionPolicy.cjs.js","sources":["../src/defaultPermissionPolicy.ts"],"sourcesContent":["/*\n * SPDX-FileCopyrightText: Copyright 2024 OP Financial Group (https://op.fi). All Rights Reserved.\n * SPDX-License-Identifier: LicenseRef-OpAllRightsReserved\n */\nimport { BackstageIdentityResponse } from '@backstage/plugin-auth-node';\nimport {\n AuthorizeResult,\n isPermission,\n isResourcePermission,\n isUpdatePermission,\n PolicyDecision,\n} from '@backstage/plugin-permission-common';\nimport {\n PermissionPolicy,\n PolicyQuery,\n} from '@backstage/plugin-permission-node';\nimport {\n ANSWER_RESOURCE_TYPE,\n COLLECTION_RESOUCE_TYPE,\n COMMENT_RESOURCE_TYPE,\n POST_RESOURCE_TYPE,\n qetaModeratePermission,\n TAG_RESOURCE_TYPE,\n} from '@drodil/backstage-plugin-qeta-common';\nimport {\n answerAuthorConditionFactory,\n answerTagExpertConditionFactory,\n collectionOwnerConditionFactory,\n collectionTagExpertConditionFactory,\n commentAuthorConditionFactory,\n createAnswerConditionalDecision,\n createCollectionConditionalDecision,\n createCommentConditionalDecision,\n createPostConditionalDecision,\n postAuthorConditionFactory,\n postTagExpertConditionFactory,\n} from '@drodil/backstage-plugin-qeta-node';\nimport { Config } from '@backstage/config';\n\nexport class DefaultQetaPermissionPolicy implements PermissionPolicy {\n constructor(private readonly config?: Config) {}\n\n async handle(\n request: PolicyQuery,\n user?: BackstageIdentityResponse,\n ): Promise<PolicyDecision> {\n // We cannot do anything without a user\n if (!user) {\n return { result: AuthorizeResult.DENY };\n }\n\n // Moderators can modify anything\n const moderators =\n this.config?.getOptionalStringArray('qeta.moderators') ?? [];\n if (\n isPermission(request.permission, qetaModeratePermission) &&\n (moderators.includes(user.identity.userEntityRef) ||\n user.identity.ownershipEntityRefs.some(ref => moderators.includes(ref)))\n ) {\n return { result: AuthorizeResult.ALLOW };\n }\n\n if (\n request.permission.attributes.action === 'create' ||\n request.permission.attributes.action === 'read'\n ) {\n return { result: AuthorizeResult.ALLOW };\n }\n\n if (\n request.permission.attributes.action === 'update' ||\n request.permission.attributes.action === 'delete'\n ) {\n if (isResourcePermission(request.permission, POST_RESOURCE_TYPE)) {\n return createPostConditionalDecision(request.permission, {\n anyOf: [\n // Can edit and delete own questions\n postAuthorConditionFactory({\n userRef: user.identity.userEntityRef,\n }),\n // Can edit and delete if tag expert\n postTagExpertConditionFactory({\n userRef: user.identity.userEntityRef,\n }),\n ],\n });\n }\n\n if (isResourcePermission(request.permission, ANSWER_RESOURCE_TYPE)) {\n return createAnswerConditionalDecision(request.permission, {\n anyOf: [\n answerAuthorConditionFactory({\n userRef: user.identity.userEntityRef,\n }),\n answerTagExpertConditionFactory({\n userRef: user.identity.userEntityRef,\n }),\n ],\n });\n }\n\n // Allow deleting and updating only own comments\n if (isResourcePermission(request.permission, COMMENT_RESOURCE_TYPE)) {\n return createCommentConditionalDecision(request.permission, {\n allOf: [\n commentAuthorConditionFactory({\n userRef: user.identity.userEntityRef,\n }),\n ],\n });\n }\n\n if (isResourcePermission(request.permission, COLLECTION_RESOUCE_TYPE)) {\n return createCollectionConditionalDecision(request.permission, {\n anyOf: [\n // Allow deleting and updating only own collections\n collectionOwnerConditionFactory({\n userRef: user.identity.userEntityRef,\n }),\n // Allow deleting and updating if tag expert\n collectionTagExpertConditionFactory({\n userRef: user.identity.userEntityRef,\n }),\n ],\n });\n }\n\n // Allow updating any tag by anyone\n if (\n isResourcePermission(request.permission, TAG_RESOURCE_TYPE) &&\n isUpdatePermission(request.permission)\n ) {\n return { result: AuthorizeResult.ALLOW };\n }\n }\n\n return { result: AuthorizeResult.DENY };\n }\n}\n"],"names":["AuthorizeResult","isPermission","qetaModeratePermission","isResourcePermission","POST_RESOURCE_TYPE","createPostConditionalDecision","postAuthorConditionFactory","postTagExpertConditionFactory","ANSWER_RESOURCE_TYPE","createAnswerConditionalDecision","answerAuthorConditionFactory","answerTagExpertConditionFactory","COMMENT_RESOURCE_TYPE","createCommentConditionalDecision","commentAuthorConditionFactory","COLLECTION_RESOUCE_TYPE","createCollectionConditionalDecision","collectionOwnerConditionFactory","collectionTagExpertConditionFactory","TAG_RESOURCE_TYPE","isUpdatePermission"],"mappings":"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"}
|
package/dist/index.cjs.js
CHANGED
|
@@ -16,19 +16,25 @@ exports.answerQuestionHasEntityRefs = permissionRules.answerQuestionHasEntityRef
|
|
|
16
16
|
exports.answerQuestionHasTags = permissionRules.answerQuestionHasTags;
|
|
17
17
|
exports.answerQuestionTagsConditionFactory = permissionRules.answerQuestionTagsConditionFactory;
|
|
18
18
|
exports.answerRules = permissionRules.answerRules;
|
|
19
|
+
exports.answerTagExpertConditionFactory = permissionRules.answerTagExpertConditionFactory;
|
|
19
20
|
exports.collectionHasEntities = permissionRules.collectionHasEntities;
|
|
20
21
|
exports.collectionHasEntitiesConditionFactory = permissionRules.collectionHasEntitiesConditionFactory;
|
|
21
22
|
exports.collectionHasTags = permissionRules.collectionHasTags;
|
|
22
23
|
exports.collectionHasTagsConditionFactory = permissionRules.collectionHasTagsConditionFactory;
|
|
23
24
|
exports.collectionOwnerConditionFactory = permissionRules.collectionOwnerConditionFactory;
|
|
24
25
|
exports.collectionRules = permissionRules.collectionRules;
|
|
26
|
+
exports.collectionTagExpertConditionFactory = permissionRules.collectionTagExpertConditionFactory;
|
|
25
27
|
exports.commentAuthorConditionFactory = permissionRules.commentAuthorConditionFactory;
|
|
26
28
|
exports.commentRules = permissionRules.commentRules;
|
|
27
29
|
exports.isAnswerAuthor = permissionRules.isAnswerAuthor;
|
|
30
|
+
exports.isAnswerTagExpert = permissionRules.isAnswerTagExpert;
|
|
28
31
|
exports.isCollectionOwner = permissionRules.isCollectionOwner;
|
|
32
|
+
exports.isCollectionTagExpert = permissionRules.isCollectionTagExpert;
|
|
29
33
|
exports.isCommentAuthor = permissionRules.isCommentAuthor;
|
|
30
34
|
exports.isPostAuthor = permissionRules.isPostAuthor;
|
|
35
|
+
exports.isPostTagExpert = permissionRules.isPostTagExpert;
|
|
31
36
|
exports.isTag = permissionRules.isTag;
|
|
37
|
+
exports.isTagExpert = permissionRules.isTagExpert;
|
|
32
38
|
exports.postAuthorConditionFactory = permissionRules.postAuthorConditionFactory;
|
|
33
39
|
exports.postHasEntities = permissionRules.postHasEntities;
|
|
34
40
|
exports.postHasEntitiesConditionFactory = permissionRules.postHasEntitiesConditionFactory;
|
|
@@ -37,8 +43,10 @@ exports.postHasTagsConditionFactory = permissionRules.postHasTagsConditionFactor
|
|
|
37
43
|
exports.postHasType = permissionRules.postHasType;
|
|
38
44
|
exports.postHasTypeConditionFactory = permissionRules.postHasTypeConditionFactory;
|
|
39
45
|
exports.postRules = permissionRules.postRules;
|
|
46
|
+
exports.postTagExpertConditionFactory = permissionRules.postTagExpertConditionFactory;
|
|
40
47
|
exports.rules = permissionRules.rules;
|
|
41
48
|
exports.tagConditionFactory = permissionRules.tagConditionFactory;
|
|
49
|
+
exports.tagExpertConditionFactory = permissionRules.tagExpertConditionFactory;
|
|
42
50
|
exports.tagRules = permissionRules.tagRules;
|
|
43
51
|
exports.answerConditions = conditionExports.answerConditions;
|
|
44
52
|
exports.collectionConditions = conditionExports.collectionConditions;
|
package/dist/index.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,11 +2,11 @@ import * as _backstage_backend_plugin_api from '@backstage/backend-plugin-api';
|
|
|
2
2
|
import { BackstageCredentials, BackstageUserPrincipal } from '@backstage/backend-plugin-api';
|
|
3
3
|
import * as _drodil_backstage_plugin_qeta_common from '@drodil/backstage-plugin-qeta-common';
|
|
4
4
|
import { Question, AIResponse, Article, Post, PostFilter, Answer, AnswerFilter, Comment, CommentFilter, TagResponse, TagFilter, Collection, CollectionFilter } from '@drodil/backstage-plugin-qeta-common';
|
|
5
|
-
import * as
|
|
5
|
+
import * as _backstage_plugin_permission_common from '@backstage/plugin-permission-common';
|
|
6
|
+
import { PolicyDecision } from '@backstage/plugin-permission-common';
|
|
6
7
|
import * as _backstage_plugin_permission_node from '@backstage/plugin-permission-node';
|
|
7
8
|
import { PermissionPolicy, PolicyQuery } from '@backstage/plugin-permission-node';
|
|
8
9
|
import { BackstageIdentityResponse } from '@backstage/plugin-auth-node';
|
|
9
|
-
import { PolicyDecision } from '@backstage/plugin-permission-common';
|
|
10
10
|
import { Config } from '@backstage/config';
|
|
11
11
|
|
|
12
12
|
interface AIHandler {
|
|
@@ -73,7 +73,7 @@ declare const isPostAuthor: _backstage_plugin_permission_node.PermissionRule<Pos
|
|
|
73
73
|
declare const postAuthorConditionFactory: (params: {
|
|
74
74
|
userRef?: string | undefined;
|
|
75
75
|
claims?: string[] | undefined;
|
|
76
|
-
}) =>
|
|
76
|
+
}) => _backstage_plugin_permission_common.PermissionCondition<"post", {
|
|
77
77
|
userRef?: string | undefined;
|
|
78
78
|
claims?: string[] | undefined;
|
|
79
79
|
}>;
|
|
@@ -82,7 +82,7 @@ declare const postHasTags: _backstage_plugin_permission_node.PermissionRule<Post
|
|
|
82
82
|
}>;
|
|
83
83
|
declare const postHasTagsConditionFactory: (params: {
|
|
84
84
|
tags: string[];
|
|
85
|
-
}) =>
|
|
85
|
+
}) => _backstage_plugin_permission_common.PermissionCondition<"post", {
|
|
86
86
|
tags: string[];
|
|
87
87
|
}>;
|
|
88
88
|
declare const postHasEntities: _backstage_plugin_permission_node.PermissionRule<Post, PostFilter, "post", {
|
|
@@ -90,7 +90,7 @@ declare const postHasEntities: _backstage_plugin_permission_node.PermissionRule<
|
|
|
90
90
|
}>;
|
|
91
91
|
declare const postHasEntitiesConditionFactory: (params: {
|
|
92
92
|
entityRefs: string[];
|
|
93
|
-
}) =>
|
|
93
|
+
}) => _backstage_plugin_permission_common.PermissionCondition<"post", {
|
|
94
94
|
entityRefs: string[];
|
|
95
95
|
}>;
|
|
96
96
|
declare const postHasType: _backstage_plugin_permission_node.PermissionRule<Post, PostFilter, "post", {
|
|
@@ -98,9 +98,20 @@ declare const postHasType: _backstage_plugin_permission_node.PermissionRule<Post
|
|
|
98
98
|
}>;
|
|
99
99
|
declare const postHasTypeConditionFactory: (params: {
|
|
100
100
|
type: string;
|
|
101
|
-
}) =>
|
|
101
|
+
}) => _backstage_plugin_permission_common.PermissionCondition<"post", {
|
|
102
102
|
type: string;
|
|
103
103
|
}>;
|
|
104
|
+
declare const isPostTagExpert: _backstage_plugin_permission_node.PermissionRule<Post, PostFilter, "post", {
|
|
105
|
+
userRef?: string | undefined;
|
|
106
|
+
claims?: string[] | undefined;
|
|
107
|
+
}>;
|
|
108
|
+
declare const postTagExpertConditionFactory: (params: {
|
|
109
|
+
userRef?: string | undefined;
|
|
110
|
+
claims?: string[] | undefined;
|
|
111
|
+
}) => _backstage_plugin_permission_common.PermissionCondition<"post", {
|
|
112
|
+
userRef?: string | undefined;
|
|
113
|
+
claims?: string[] | undefined;
|
|
114
|
+
}>;
|
|
104
115
|
declare const postRules: {
|
|
105
116
|
isPostAuthor: _backstage_plugin_permission_node.PermissionRule<Post, PostFilter, "post", {
|
|
106
117
|
userRef?: string | undefined;
|
|
@@ -115,6 +126,10 @@ declare const postRules: {
|
|
|
115
126
|
postHasType: _backstage_plugin_permission_node.PermissionRule<Post, PostFilter, "post", {
|
|
116
127
|
type: string;
|
|
117
128
|
}>;
|
|
129
|
+
isPostTagExpert: _backstage_plugin_permission_node.PermissionRule<Post, PostFilter, "post", {
|
|
130
|
+
userRef?: string | undefined;
|
|
131
|
+
claims?: string[] | undefined;
|
|
132
|
+
}>;
|
|
118
133
|
};
|
|
119
134
|
declare const isAnswerAuthor: _backstage_plugin_permission_node.PermissionRule<Answer, AnswerFilter, "answer", {
|
|
120
135
|
userRef?: string | undefined;
|
|
@@ -123,7 +138,7 @@ declare const isAnswerAuthor: _backstage_plugin_permission_node.PermissionRule<A
|
|
|
123
138
|
declare const answerAuthorConditionFactory: (params: {
|
|
124
139
|
userRef?: string | undefined;
|
|
125
140
|
claims?: string[] | undefined;
|
|
126
|
-
}) =>
|
|
141
|
+
}) => _backstage_plugin_permission_common.PermissionCondition<"answer", {
|
|
127
142
|
userRef?: string | undefined;
|
|
128
143
|
claims?: string[] | undefined;
|
|
129
144
|
}>;
|
|
@@ -132,7 +147,7 @@ declare const answerQuestionHasTags: _backstage_plugin_permission_node.Permissio
|
|
|
132
147
|
}>;
|
|
133
148
|
declare const answerQuestionTagsConditionFactory: (params: {
|
|
134
149
|
tags: string[];
|
|
135
|
-
}) =>
|
|
150
|
+
}) => _backstage_plugin_permission_common.PermissionCondition<"answer", {
|
|
136
151
|
tags: string[];
|
|
137
152
|
}>;
|
|
138
153
|
declare const answerQuestionHasEntityRefs: _backstage_plugin_permission_node.PermissionRule<Answer, AnswerFilter, "answer", {
|
|
@@ -140,9 +155,20 @@ declare const answerQuestionHasEntityRefs: _backstage_plugin_permission_node.Per
|
|
|
140
155
|
}>;
|
|
141
156
|
declare const answerQuestionEntitiesConditionFactory: (params: {
|
|
142
157
|
entityRefs: string[];
|
|
143
|
-
}) =>
|
|
158
|
+
}) => _backstage_plugin_permission_common.PermissionCondition<"answer", {
|
|
144
159
|
entityRefs: string[];
|
|
145
160
|
}>;
|
|
161
|
+
declare const isAnswerTagExpert: _backstage_plugin_permission_node.PermissionRule<Answer, AnswerFilter, "answer", {
|
|
162
|
+
userRef?: string | undefined;
|
|
163
|
+
claims?: string[] | undefined;
|
|
164
|
+
}>;
|
|
165
|
+
declare const answerTagExpertConditionFactory: (params: {
|
|
166
|
+
userRef?: string | undefined;
|
|
167
|
+
claims?: string[] | undefined;
|
|
168
|
+
}) => _backstage_plugin_permission_common.PermissionCondition<"answer", {
|
|
169
|
+
userRef?: string | undefined;
|
|
170
|
+
claims?: string[] | undefined;
|
|
171
|
+
}>;
|
|
146
172
|
declare const answerRules: {
|
|
147
173
|
isAnswerAuthor: _backstage_plugin_permission_node.PermissionRule<Answer, AnswerFilter, "answer", {
|
|
148
174
|
userRef?: string | undefined;
|
|
@@ -154,6 +180,10 @@ declare const answerRules: {
|
|
|
154
180
|
answerQuestionHasEntityRefs: _backstage_plugin_permission_node.PermissionRule<Answer, AnswerFilter, "answer", {
|
|
155
181
|
entityRefs: string[];
|
|
156
182
|
}>;
|
|
183
|
+
isAnswerTagExpert: _backstage_plugin_permission_node.PermissionRule<Answer, AnswerFilter, "answer", {
|
|
184
|
+
userRef?: string | undefined;
|
|
185
|
+
claims?: string[] | undefined;
|
|
186
|
+
}>;
|
|
157
187
|
};
|
|
158
188
|
declare const isCommentAuthor: _backstage_plugin_permission_node.PermissionRule<Comment, CommentFilter, "comment", {
|
|
159
189
|
userRef?: string | undefined;
|
|
@@ -162,7 +192,7 @@ declare const isCommentAuthor: _backstage_plugin_permission_node.PermissionRule<
|
|
|
162
192
|
declare const commentAuthorConditionFactory: (params: {
|
|
163
193
|
userRef?: string | undefined;
|
|
164
194
|
claims?: string[] | undefined;
|
|
165
|
-
}) =>
|
|
195
|
+
}) => _backstage_plugin_permission_common.PermissionCondition<"comment", {
|
|
166
196
|
userRef?: string | undefined;
|
|
167
197
|
claims?: string[] | undefined;
|
|
168
198
|
}>;
|
|
@@ -177,13 +207,28 @@ declare const isTag: _backstage_plugin_permission_node.PermissionRule<TagRespons
|
|
|
177
207
|
}>;
|
|
178
208
|
declare const tagConditionFactory: (params: {
|
|
179
209
|
tag: string;
|
|
180
|
-
}) =>
|
|
210
|
+
}) => _backstage_plugin_permission_common.PermissionCondition<"tag", {
|
|
181
211
|
tag: string;
|
|
182
212
|
}>;
|
|
213
|
+
declare const isTagExpert: _backstage_plugin_permission_node.PermissionRule<TagResponse, TagFilter, "tag", {
|
|
214
|
+
userRef?: string | undefined;
|
|
215
|
+
claims?: string[] | undefined;
|
|
216
|
+
}>;
|
|
217
|
+
declare const tagExpertConditionFactory: (params: {
|
|
218
|
+
userRef?: string | undefined;
|
|
219
|
+
claims?: string[] | undefined;
|
|
220
|
+
}) => _backstage_plugin_permission_common.PermissionCondition<"tag", {
|
|
221
|
+
userRef?: string | undefined;
|
|
222
|
+
claims?: string[] | undefined;
|
|
223
|
+
}>;
|
|
183
224
|
declare const tagRules: {
|
|
184
225
|
isTag: _backstage_plugin_permission_node.PermissionRule<TagResponse, TagFilter, "tag", {
|
|
185
226
|
tag: string;
|
|
186
227
|
}>;
|
|
228
|
+
isTagExpert: _backstage_plugin_permission_node.PermissionRule<TagResponse, TagFilter, "tag", {
|
|
229
|
+
userRef?: string | undefined;
|
|
230
|
+
claims?: string[] | undefined;
|
|
231
|
+
}>;
|
|
187
232
|
};
|
|
188
233
|
declare const isCollectionOwner: _backstage_plugin_permission_node.PermissionRule<Collection, CollectionFilter, "collection", {
|
|
189
234
|
userRef?: string | undefined;
|
|
@@ -192,7 +237,7 @@ declare const isCollectionOwner: _backstage_plugin_permission_node.PermissionRul
|
|
|
192
237
|
declare const collectionOwnerConditionFactory: (params: {
|
|
193
238
|
userRef?: string | undefined;
|
|
194
239
|
claims?: string[] | undefined;
|
|
195
|
-
}) =>
|
|
240
|
+
}) => _backstage_plugin_permission_common.PermissionCondition<"collection", {
|
|
196
241
|
userRef?: string | undefined;
|
|
197
242
|
claims?: string[] | undefined;
|
|
198
243
|
}>;
|
|
@@ -201,7 +246,7 @@ declare const collectionHasTags: _backstage_plugin_permission_node.PermissionRul
|
|
|
201
246
|
}>;
|
|
202
247
|
declare const collectionHasTagsConditionFactory: (params: {
|
|
203
248
|
tags: string[];
|
|
204
|
-
}) =>
|
|
249
|
+
}) => _backstage_plugin_permission_common.PermissionCondition<"collection", {
|
|
205
250
|
tags: string[];
|
|
206
251
|
}>;
|
|
207
252
|
declare const collectionHasEntities: _backstage_plugin_permission_node.PermissionRule<Collection, CollectionFilter, "collection", {
|
|
@@ -209,9 +254,20 @@ declare const collectionHasEntities: _backstage_plugin_permission_node.Permissio
|
|
|
209
254
|
}>;
|
|
210
255
|
declare const collectionHasEntitiesConditionFactory: (params: {
|
|
211
256
|
entityRefs: string[];
|
|
212
|
-
}) =>
|
|
257
|
+
}) => _backstage_plugin_permission_common.PermissionCondition<"collection", {
|
|
213
258
|
entityRefs: string[];
|
|
214
259
|
}>;
|
|
260
|
+
declare const isCollectionTagExpert: _backstage_plugin_permission_node.PermissionRule<Collection, CollectionFilter, "collection", {
|
|
261
|
+
userRef?: string | undefined;
|
|
262
|
+
claims?: string[] | undefined;
|
|
263
|
+
}>;
|
|
264
|
+
declare const collectionTagExpertConditionFactory: (params: {
|
|
265
|
+
userRef?: string | undefined;
|
|
266
|
+
claims?: string[] | undefined;
|
|
267
|
+
}) => _backstage_plugin_permission_common.PermissionCondition<"collection", {
|
|
268
|
+
userRef?: string | undefined;
|
|
269
|
+
claims?: string[] | undefined;
|
|
270
|
+
}>;
|
|
215
271
|
declare const collectionRules: {
|
|
216
272
|
isCollectionOwner: _backstage_plugin_permission_node.PermissionRule<Collection, CollectionFilter, "collection", {
|
|
217
273
|
userRef?: string | undefined;
|
|
@@ -223,6 +279,10 @@ declare const collectionRules: {
|
|
|
223
279
|
collectionHasEntities: _backstage_plugin_permission_node.PermissionRule<Collection, CollectionFilter, "collection", {
|
|
224
280
|
entityRefs: string[];
|
|
225
281
|
}>;
|
|
282
|
+
isCollectionTagExpert: _backstage_plugin_permission_node.PermissionRule<Collection, CollectionFilter, "collection", {
|
|
283
|
+
userRef?: string | undefined;
|
|
284
|
+
claims?: string[] | undefined;
|
|
285
|
+
}>;
|
|
226
286
|
};
|
|
227
287
|
declare const rules: {
|
|
228
288
|
isCollectionOwner: _backstage_plugin_permission_node.PermissionRule<Collection, CollectionFilter, "collection", {
|
|
@@ -235,9 +295,17 @@ declare const rules: {
|
|
|
235
295
|
collectionHasEntities: _backstage_plugin_permission_node.PermissionRule<Collection, CollectionFilter, "collection", {
|
|
236
296
|
entityRefs: string[];
|
|
237
297
|
}>;
|
|
298
|
+
isCollectionTagExpert: _backstage_plugin_permission_node.PermissionRule<Collection, CollectionFilter, "collection", {
|
|
299
|
+
userRef?: string | undefined;
|
|
300
|
+
claims?: string[] | undefined;
|
|
301
|
+
}>;
|
|
238
302
|
isTag: _backstage_plugin_permission_node.PermissionRule<TagResponse, TagFilter, "tag", {
|
|
239
303
|
tag: string;
|
|
240
304
|
}>;
|
|
305
|
+
isTagExpert: _backstage_plugin_permission_node.PermissionRule<TagResponse, TagFilter, "tag", {
|
|
306
|
+
userRef?: string | undefined;
|
|
307
|
+
claims?: string[] | undefined;
|
|
308
|
+
}>;
|
|
241
309
|
isPostAuthor: _backstage_plugin_permission_node.PermissionRule<Post, PostFilter, "post", {
|
|
242
310
|
userRef?: string | undefined;
|
|
243
311
|
claims?: string[] | undefined;
|
|
@@ -251,6 +319,10 @@ declare const rules: {
|
|
|
251
319
|
postHasType: _backstage_plugin_permission_node.PermissionRule<Post, PostFilter, "post", {
|
|
252
320
|
type: string;
|
|
253
321
|
}>;
|
|
322
|
+
isPostTagExpert: _backstage_plugin_permission_node.PermissionRule<Post, PostFilter, "post", {
|
|
323
|
+
userRef?: string | undefined;
|
|
324
|
+
claims?: string[] | undefined;
|
|
325
|
+
}>;
|
|
254
326
|
isAnswerAuthor: _backstage_plugin_permission_node.PermissionRule<Answer, AnswerFilter, "answer", {
|
|
255
327
|
userRef?: string | undefined;
|
|
256
328
|
claims?: string[] | undefined;
|
|
@@ -261,6 +333,10 @@ declare const rules: {
|
|
|
261
333
|
answerQuestionHasEntityRefs: _backstage_plugin_permission_node.PermissionRule<Answer, AnswerFilter, "answer", {
|
|
262
334
|
entityRefs: string[];
|
|
263
335
|
}>;
|
|
336
|
+
isAnswerTagExpert: _backstage_plugin_permission_node.PermissionRule<Answer, AnswerFilter, "answer", {
|
|
337
|
+
userRef?: string | undefined;
|
|
338
|
+
claims?: string[] | undefined;
|
|
339
|
+
}>;
|
|
264
340
|
isCommentAuthor: _backstage_plugin_permission_node.PermissionRule<Comment, CommentFilter, "comment", {
|
|
265
341
|
userRef?: string | undefined;
|
|
266
342
|
claims?: string[] | undefined;
|
|
@@ -281,8 +357,12 @@ declare const questionConditions: _backstage_plugin_permission_node.Conditions<{
|
|
|
281
357
|
postHasType: _backstage_plugin_permission_node.PermissionRule<_drodil_backstage_plugin_qeta_common.Post, _drodil_backstage_plugin_qeta_common.PostFilter, "post", {
|
|
282
358
|
type: string;
|
|
283
359
|
}>;
|
|
360
|
+
isPostTagExpert: _backstage_plugin_permission_node.PermissionRule<_drodil_backstage_plugin_qeta_common.Post, _drodil_backstage_plugin_qeta_common.PostFilter, "post", {
|
|
361
|
+
userRef?: string | undefined;
|
|
362
|
+
claims?: string[] | undefined;
|
|
363
|
+
}>;
|
|
284
364
|
}>;
|
|
285
|
-
declare const createPostConditionalDecision: (permission:
|
|
365
|
+
declare const createPostConditionalDecision: (permission: _backstage_plugin_permission_common.ResourcePermission<"post">, conditions: _backstage_plugin_permission_common.PermissionCriteria<_backstage_plugin_permission_common.PermissionCondition<"post">>) => _backstage_plugin_permission_common.ConditionalPolicyDecision;
|
|
286
366
|
declare const answerConditions: _backstage_plugin_permission_node.Conditions<{
|
|
287
367
|
isAnswerAuthor: _backstage_plugin_permission_node.PermissionRule<_drodil_backstage_plugin_qeta_common.Answer, _drodil_backstage_plugin_qeta_common.AnswerFilter, "answer", {
|
|
288
368
|
userRef?: string | undefined;
|
|
@@ -294,21 +374,29 @@ declare const answerConditions: _backstage_plugin_permission_node.Conditions<{
|
|
|
294
374
|
answerQuestionHasEntityRefs: _backstage_plugin_permission_node.PermissionRule<_drodil_backstage_plugin_qeta_common.Answer, _drodil_backstage_plugin_qeta_common.AnswerFilter, "answer", {
|
|
295
375
|
entityRefs: string[];
|
|
296
376
|
}>;
|
|
377
|
+
isAnswerTagExpert: _backstage_plugin_permission_node.PermissionRule<_drodil_backstage_plugin_qeta_common.Answer, _drodil_backstage_plugin_qeta_common.AnswerFilter, "answer", {
|
|
378
|
+
userRef?: string | undefined;
|
|
379
|
+
claims?: string[] | undefined;
|
|
380
|
+
}>;
|
|
297
381
|
}>;
|
|
298
|
-
declare const createAnswerConditionalDecision: (permission:
|
|
382
|
+
declare const createAnswerConditionalDecision: (permission: _backstage_plugin_permission_common.ResourcePermission<"answer">, conditions: _backstage_plugin_permission_common.PermissionCriteria<_backstage_plugin_permission_common.PermissionCondition<"answer">>) => _backstage_plugin_permission_common.ConditionalPolicyDecision;
|
|
299
383
|
declare const commentConditions: _backstage_plugin_permission_node.Conditions<{
|
|
300
384
|
isCommentAuthor: _backstage_plugin_permission_node.PermissionRule<_drodil_backstage_plugin_qeta_common.Comment, _drodil_backstage_plugin_qeta_common.CommentFilter, "comment", {
|
|
301
385
|
userRef?: string | undefined;
|
|
302
386
|
claims?: string[] | undefined;
|
|
303
387
|
}>;
|
|
304
388
|
}>;
|
|
305
|
-
declare const createCommentConditionalDecision: (permission:
|
|
389
|
+
declare const createCommentConditionalDecision: (permission: _backstage_plugin_permission_common.ResourcePermission<"comment">, conditions: _backstage_plugin_permission_common.PermissionCriteria<_backstage_plugin_permission_common.PermissionCondition<"comment">>) => _backstage_plugin_permission_common.ConditionalPolicyDecision;
|
|
306
390
|
declare const tagConditions: _backstage_plugin_permission_node.Conditions<{
|
|
307
391
|
isTag: _backstage_plugin_permission_node.PermissionRule<_drodil_backstage_plugin_qeta_common.TagResponse, _drodil_backstage_plugin_qeta_common.TagFilter, "tag", {
|
|
308
392
|
tag: string;
|
|
309
393
|
}>;
|
|
394
|
+
isTagExpert: _backstage_plugin_permission_node.PermissionRule<_drodil_backstage_plugin_qeta_common.TagResponse, _drodil_backstage_plugin_qeta_common.TagFilter, "tag", {
|
|
395
|
+
userRef?: string | undefined;
|
|
396
|
+
claims?: string[] | undefined;
|
|
397
|
+
}>;
|
|
310
398
|
}>;
|
|
311
|
-
declare const createTagConditionalDecision: (permission:
|
|
399
|
+
declare const createTagConditionalDecision: (permission: _backstage_plugin_permission_common.ResourcePermission<"tag">, conditions: _backstage_plugin_permission_common.PermissionCriteria<_backstage_plugin_permission_common.PermissionCondition<"tag">>) => _backstage_plugin_permission_common.ConditionalPolicyDecision;
|
|
312
400
|
declare const collectionConditions: _backstage_plugin_permission_node.Conditions<{
|
|
313
401
|
isCollectionOwner: _backstage_plugin_permission_node.PermissionRule<_drodil_backstage_plugin_qeta_common.Collection, _drodil_backstage_plugin_qeta_common.CollectionFilter, "collection", {
|
|
314
402
|
userRef?: string | undefined;
|
|
@@ -320,8 +408,12 @@ declare const collectionConditions: _backstage_plugin_permission_node.Conditions
|
|
|
320
408
|
collectionHasEntities: _backstage_plugin_permission_node.PermissionRule<_drodil_backstage_plugin_qeta_common.Collection, _drodil_backstage_plugin_qeta_common.CollectionFilter, "collection", {
|
|
321
409
|
entityRefs: string[];
|
|
322
410
|
}>;
|
|
411
|
+
isCollectionTagExpert: _backstage_plugin_permission_node.PermissionRule<_drodil_backstage_plugin_qeta_common.Collection, _drodil_backstage_plugin_qeta_common.CollectionFilter, "collection", {
|
|
412
|
+
userRef?: string | undefined;
|
|
413
|
+
claims?: string[] | undefined;
|
|
414
|
+
}>;
|
|
323
415
|
}>;
|
|
324
|
-
declare const createCollectionConditionalDecision: (permission:
|
|
416
|
+
declare const createCollectionConditionalDecision: (permission: _backstage_plugin_permission_common.ResourcePermission<"collection">, conditions: _backstage_plugin_permission_common.PermissionCriteria<_backstage_plugin_permission_common.PermissionCondition<"collection">>) => _backstage_plugin_permission_common.ConditionalPolicyDecision;
|
|
325
417
|
|
|
326
418
|
declare const postPermissionResourceRef: _backstage_plugin_permission_node.PermissionResourceRef<Post, PostFilter, "post", "qeta">;
|
|
327
419
|
declare const answerPermissionResourceRef: _backstage_plugin_permission_node.PermissionResourceRef<Answer, AnswerFilter, "answer", "qeta">;
|
|
@@ -335,4 +427,4 @@ declare class DefaultQetaPermissionPolicy implements PermissionPolicy {
|
|
|
335
427
|
handle(request: PolicyQuery, user?: BackstageIdentityResponse): Promise<PolicyDecision>;
|
|
336
428
|
}
|
|
337
429
|
|
|
338
|
-
export { type AIHandler, DefaultQetaPermissionPolicy, type QetaAIExtensionPoint, type QetaTagDatabaseExtensionPoint, type TagDatabase, answerAuthorConditionFactory, answerConditions, answerPermissionResourceRef, answerQuestionEntitiesConditionFactory, answerQuestionHasEntityRefs, answerQuestionHasTags, answerQuestionTagsConditionFactory, answerRules, collectionConditions, collectionHasEntities, collectionHasEntitiesConditionFactory, collectionHasTags, collectionHasTagsConditionFactory, collectionOwnerConditionFactory, collectionPermissionResourceRef, collectionRules, commentAuthorConditionFactory, commentConditions, commentPermissionResourceRef, commentRules, createAnswerConditionalDecision, createCollectionConditionalDecision, createCommentConditionalDecision, createPostConditionalDecision, createTagConditionalDecision, isAnswerAuthor, isCollectionOwner, isCommentAuthor, isPostAuthor, isTag, postAuthorConditionFactory, postHasEntities, postHasEntitiesConditionFactory, postHasTags, postHasTagsConditionFactory, postHasType, postHasTypeConditionFactory, postPermissionResourceRef, postRules, qetaAIExtensionPoint, qetaTagDatabaseExtensionPoint, questionConditions, rules, tagConditionFactory, tagConditions, tagPermissionResourceRef, tagRules };
|
|
430
|
+
export { type AIHandler, DefaultQetaPermissionPolicy, type QetaAIExtensionPoint, type QetaTagDatabaseExtensionPoint, type TagDatabase, answerAuthorConditionFactory, answerConditions, answerPermissionResourceRef, answerQuestionEntitiesConditionFactory, answerQuestionHasEntityRefs, answerQuestionHasTags, answerQuestionTagsConditionFactory, answerRules, answerTagExpertConditionFactory, collectionConditions, collectionHasEntities, collectionHasEntitiesConditionFactory, collectionHasTags, collectionHasTagsConditionFactory, collectionOwnerConditionFactory, collectionPermissionResourceRef, collectionRules, collectionTagExpertConditionFactory, commentAuthorConditionFactory, commentConditions, commentPermissionResourceRef, commentRules, createAnswerConditionalDecision, createCollectionConditionalDecision, createCommentConditionalDecision, createPostConditionalDecision, createTagConditionalDecision, isAnswerAuthor, isAnswerTagExpert, isCollectionOwner, isCollectionTagExpert, isCommentAuthor, isPostAuthor, isPostTagExpert, isTag, isTagExpert, postAuthorConditionFactory, postHasEntities, postHasEntitiesConditionFactory, postHasTags, postHasTagsConditionFactory, postHasType, postHasTypeConditionFactory, postPermissionResourceRef, postRules, postTagExpertConditionFactory, qetaAIExtensionPoint, qetaTagDatabaseExtensionPoint, questionConditions, rules, tagConditionFactory, tagConditions, tagExpertConditionFactory, tagPermissionResourceRef, tagRules };
|
|
@@ -77,11 +77,33 @@ const postHasType = pluginPermissionNode.createPermissionRule({
|
|
|
77
77
|
}
|
|
78
78
|
});
|
|
79
79
|
const postHasTypeConditionFactory = pluginPermissionNode.createConditionFactory(postHasType);
|
|
80
|
+
const isPostTagExpert = pluginPermissionNode.createPermissionRule({
|
|
81
|
+
name: "IS_POST_TAG_EXPERT",
|
|
82
|
+
description: "Allows if post has tags the user is expert of",
|
|
83
|
+
resourceRef: permissionResources.postPermissionResourceRef,
|
|
84
|
+
paramsSchema: zod.z.object({
|
|
85
|
+
userRef: zod.z.string().describe("User ID to match on the tag expert").optional(),
|
|
86
|
+
claims: zod.z.array(zod.z.string()).optional().describe("List of claims to match at least one on within tag expert")
|
|
87
|
+
}),
|
|
88
|
+
apply: (resource, { userRef, claims }) => {
|
|
89
|
+
return Boolean(
|
|
90
|
+
resource?.experts?.some((e) => e === userRef || claims?.includes(e))
|
|
91
|
+
);
|
|
92
|
+
},
|
|
93
|
+
toQuery: ({ claims = [], userRef }) => {
|
|
94
|
+
return {
|
|
95
|
+
property: "tag.experts",
|
|
96
|
+
values: [userRef, ...claims].filter(Boolean)
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
const postTagExpertConditionFactory = pluginPermissionNode.createConditionFactory(isPostTagExpert);
|
|
80
101
|
const postRules = {
|
|
81
102
|
isPostAuthor,
|
|
82
103
|
postHasTags,
|
|
83
104
|
postHasEntities,
|
|
84
|
-
postHasType
|
|
105
|
+
postHasType,
|
|
106
|
+
isPostTagExpert
|
|
85
107
|
};
|
|
86
108
|
const isAnswerAuthor = pluginPermissionNode.createPermissionRule({
|
|
87
109
|
name: "IS_AUTHOR",
|
|
@@ -142,10 +164,32 @@ const answerQuestionHasEntityRefs = pluginPermissionNode.createPermissionRule({
|
|
|
142
164
|
const answerQuestionEntitiesConditionFactory = pluginPermissionNode.createConditionFactory(
|
|
143
165
|
answerQuestionHasEntityRefs
|
|
144
166
|
);
|
|
167
|
+
const isAnswerTagExpert = pluginPermissionNode.createPermissionRule({
|
|
168
|
+
name: "IS_ANSWER_TAG_EXPERT",
|
|
169
|
+
description: "Allows if answers post has tags the user is expert of",
|
|
170
|
+
resourceRef: permissionResources.answerPermissionResourceRef,
|
|
171
|
+
paramsSchema: zod.z.object({
|
|
172
|
+
userRef: zod.z.string().describe("User ID to match on the tag expert").optional(),
|
|
173
|
+
claims: zod.z.array(zod.z.string()).optional().describe("List of claims to match at least one on within tag expert")
|
|
174
|
+
}),
|
|
175
|
+
apply: (resource, { userRef, claims }) => {
|
|
176
|
+
return Boolean(
|
|
177
|
+
resource?.experts?.some((e) => e === userRef || claims?.includes(e))
|
|
178
|
+
);
|
|
179
|
+
},
|
|
180
|
+
toQuery: ({ claims = [], userRef }) => {
|
|
181
|
+
return {
|
|
182
|
+
property: "tag.experts",
|
|
183
|
+
values: [userRef, ...claims].filter(Boolean)
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
const answerTagExpertConditionFactory = pluginPermissionNode.createConditionFactory(isAnswerTagExpert);
|
|
145
188
|
const answerRules = {
|
|
146
189
|
isAnswerAuthor,
|
|
147
190
|
answerQuestionHasTags,
|
|
148
|
-
answerQuestionHasEntityRefs
|
|
191
|
+
answerQuestionHasEntityRefs,
|
|
192
|
+
isAnswerTagExpert
|
|
149
193
|
};
|
|
150
194
|
const isCommentAuthor = pluginPermissionNode.createPermissionRule({
|
|
151
195
|
name: "IS_AUTHOR",
|
|
@@ -185,7 +229,28 @@ const isTag = pluginPermissionNode.createPermissionRule({
|
|
|
185
229
|
}
|
|
186
230
|
});
|
|
187
231
|
const tagConditionFactory = pluginPermissionNode.createConditionFactory(isTag);
|
|
188
|
-
const
|
|
232
|
+
const isTagExpert = pluginPermissionNode.createPermissionRule({
|
|
233
|
+
name: "IS_TAG_EXPERT",
|
|
234
|
+
description: "Allows only if user is tag expert",
|
|
235
|
+
resourceRef: permissionResources.tagPermissionResourceRef,
|
|
236
|
+
paramsSchema: zod.z.object({
|
|
237
|
+
userRef: zod.z.string().describe("User ID to match on the tag expert").optional(),
|
|
238
|
+
claims: zod.z.array(zod.z.string()).optional().describe("List of claims to match at least one on within tag expert")
|
|
239
|
+
}),
|
|
240
|
+
apply: (resource, { userRef, claims }) => {
|
|
241
|
+
return Boolean(
|
|
242
|
+
resource?.experts?.some((e) => e === userRef || claims?.includes(e))
|
|
243
|
+
);
|
|
244
|
+
},
|
|
245
|
+
toQuery: ({ claims = [], userRef }) => {
|
|
246
|
+
return {
|
|
247
|
+
property: "tag.experts",
|
|
248
|
+
values: [userRef, ...claims].filter(Boolean)
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
});
|
|
252
|
+
const tagExpertConditionFactory = pluginPermissionNode.createConditionFactory(isTagExpert);
|
|
253
|
+
const tagRules = { isTag, isTagExpert };
|
|
189
254
|
const isCollectionOwner = pluginPermissionNode.createPermissionRule({
|
|
190
255
|
name: "IS_OWNER",
|
|
191
256
|
description: "Should allow only if the collection is owned by the user",
|
|
@@ -243,10 +308,34 @@ const collectionHasEntities = pluginPermissionNode.createPermissionRule({
|
|
|
243
308
|
const collectionHasEntitiesConditionFactory = pluginPermissionNode.createConditionFactory(
|
|
244
309
|
collectionHasEntities
|
|
245
310
|
);
|
|
311
|
+
const isCollectionTagExpert = pluginPermissionNode.createPermissionRule({
|
|
312
|
+
name: "IS_COLLECTION_TAG_EXPERT",
|
|
313
|
+
description: "Allows if collection has tags the user is expert of",
|
|
314
|
+
resourceRef: permissionResources.collectionPermissionResourceRef,
|
|
315
|
+
paramsSchema: zod.z.object({
|
|
316
|
+
userRef: zod.z.string().describe("User ID to match on the tag expert").optional(),
|
|
317
|
+
claims: zod.z.array(zod.z.string()).optional().describe("List of claims to match at least one on within tag expert")
|
|
318
|
+
}),
|
|
319
|
+
apply: (resource, { userRef, claims }) => {
|
|
320
|
+
return Boolean(
|
|
321
|
+
resource?.experts?.some((e) => e === userRef || claims?.includes(e))
|
|
322
|
+
);
|
|
323
|
+
},
|
|
324
|
+
toQuery: ({ claims = [], userRef }) => {
|
|
325
|
+
return {
|
|
326
|
+
property: "tag.experts",
|
|
327
|
+
values: [userRef, ...claims].filter(Boolean)
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
});
|
|
331
|
+
const collectionTagExpertConditionFactory = pluginPermissionNode.createConditionFactory(
|
|
332
|
+
isCollectionTagExpert
|
|
333
|
+
);
|
|
246
334
|
const collectionRules = {
|
|
247
335
|
isCollectionOwner,
|
|
248
336
|
collectionHasTags,
|
|
249
|
-
collectionHasEntities
|
|
337
|
+
collectionHasEntities,
|
|
338
|
+
isCollectionTagExpert
|
|
250
339
|
};
|
|
251
340
|
const rules = {
|
|
252
341
|
...commentRules,
|
|
@@ -262,19 +351,25 @@ exports.answerQuestionHasEntityRefs = answerQuestionHasEntityRefs;
|
|
|
262
351
|
exports.answerQuestionHasTags = answerQuestionHasTags;
|
|
263
352
|
exports.answerQuestionTagsConditionFactory = answerQuestionTagsConditionFactory;
|
|
264
353
|
exports.answerRules = answerRules;
|
|
354
|
+
exports.answerTagExpertConditionFactory = answerTagExpertConditionFactory;
|
|
265
355
|
exports.collectionHasEntities = collectionHasEntities;
|
|
266
356
|
exports.collectionHasEntitiesConditionFactory = collectionHasEntitiesConditionFactory;
|
|
267
357
|
exports.collectionHasTags = collectionHasTags;
|
|
268
358
|
exports.collectionHasTagsConditionFactory = collectionHasTagsConditionFactory;
|
|
269
359
|
exports.collectionOwnerConditionFactory = collectionOwnerConditionFactory;
|
|
270
360
|
exports.collectionRules = collectionRules;
|
|
361
|
+
exports.collectionTagExpertConditionFactory = collectionTagExpertConditionFactory;
|
|
271
362
|
exports.commentAuthorConditionFactory = commentAuthorConditionFactory;
|
|
272
363
|
exports.commentRules = commentRules;
|
|
273
364
|
exports.isAnswerAuthor = isAnswerAuthor;
|
|
365
|
+
exports.isAnswerTagExpert = isAnswerTagExpert;
|
|
274
366
|
exports.isCollectionOwner = isCollectionOwner;
|
|
367
|
+
exports.isCollectionTagExpert = isCollectionTagExpert;
|
|
275
368
|
exports.isCommentAuthor = isCommentAuthor;
|
|
276
369
|
exports.isPostAuthor = isPostAuthor;
|
|
370
|
+
exports.isPostTagExpert = isPostTagExpert;
|
|
277
371
|
exports.isTag = isTag;
|
|
372
|
+
exports.isTagExpert = isTagExpert;
|
|
278
373
|
exports.postAuthorConditionFactory = postAuthorConditionFactory;
|
|
279
374
|
exports.postHasEntities = postHasEntities;
|
|
280
375
|
exports.postHasEntitiesConditionFactory = postHasEntitiesConditionFactory;
|
|
@@ -283,7 +378,9 @@ exports.postHasTagsConditionFactory = postHasTagsConditionFactory;
|
|
|
283
378
|
exports.postHasType = postHasType;
|
|
284
379
|
exports.postHasTypeConditionFactory = postHasTypeConditionFactory;
|
|
285
380
|
exports.postRules = postRules;
|
|
381
|
+
exports.postTagExpertConditionFactory = postTagExpertConditionFactory;
|
|
286
382
|
exports.rules = rules;
|
|
287
383
|
exports.tagConditionFactory = tagConditionFactory;
|
|
384
|
+
exports.tagExpertConditionFactory = tagExpertConditionFactory;
|
|
288
385
|
exports.tagRules = tagRules;
|
|
289
386
|
//# sourceMappingURL=permissionRules.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permissionRules.cjs.js","sources":["../src/permissionRules.ts"],"sourcesContent":["import {\n createConditionFactory,\n createPermissionRule,\n} from '@backstage/plugin-permission-node';\nimport { z } from 'zod';\nimport {\n Answer,\n AnswerFilter,\n Collection,\n CollectionFilter,\n Comment,\n CommentFilter,\n Post,\n PostFilter,\n TagFilter,\n TagResponse,\n} from '@drodil/backstage-plugin-qeta-common';\nimport {\n answerPermissionResourceRef,\n collectionPermissionResourceRef,\n commentPermissionResourceRef,\n postPermissionResourceRef,\n tagPermissionResourceRef,\n} from './permissionResources';\n\nexport const isPostAuthor = createPermissionRule({\n name: 'IS_AUTHOR',\n description: 'Should allow only if the post is created by the user',\n resourceRef: postPermissionResourceRef,\n paramsSchema: z.object({\n userRef: z.string().describe('User ID to match on the author').optional(),\n claims: z\n .array(z.string())\n .optional()\n .describe('List of claims to match at least one on within author'),\n }),\n apply: (resource: Post, { userRef, claims = [] }) => {\n return resource?.author === userRef || claims.includes(resource?.author);\n },\n toQuery: ({ userRef, claims = [] }) => {\n return {\n property: 'posts.author' as PostFilter['property'],\n values: [userRef, ...claims].filter(Boolean),\n };\n },\n});\n\nexport const postAuthorConditionFactory = createConditionFactory(isPostAuthor);\n\nexport const postHasTags = createPermissionRule({\n name: 'HAS_TAGS',\n description: 'Should allow only if the post has all the specific tags',\n resourceRef: postPermissionResourceRef,\n paramsSchema: z.object({\n tags: z.array(z.string()).describe('Tag to match the post'),\n }),\n apply: (resource: Post, { tags }) => {\n return tags.every(t => resource?.tags?.includes(t));\n },\n toQuery: ({ tags }) => {\n return {\n property: 'tags' as PostFilter['property'],\n values: tags,\n };\n },\n});\n\nexport const postHasTagsConditionFactory = createConditionFactory(postHasTags);\n\nexport const postHasEntities = createPermissionRule({\n name: 'HAS_ENTITIES',\n description: 'Should allow only if the post has all the specific entities',\n resourceRef: postPermissionResourceRef,\n paramsSchema: z.object({\n entityRefs: z.array(z.string()).describe('Entity refs to match the post'),\n }),\n apply: (resource: Post, { entityRefs }) => {\n return entityRefs.every(t => resource?.entities?.includes(t));\n },\n toQuery: ({ entityRefs }) => {\n return {\n property: 'entityRefs' as PostFilter['property'],\n values: entityRefs,\n };\n },\n});\n\nexport const postHasEntitiesConditionFactory =\n createConditionFactory(postHasEntities);\n\nexport const postHasType = createPermissionRule({\n name: 'HAS_TYPE',\n description: 'Should allow only if the post has the specific type',\n resourceRef: postPermissionResourceRef,\n paramsSchema: z.object({\n type: z.string().describe('Type to match the post'),\n }),\n apply: (resource: Post, { type }) => {\n return resource?.type === type;\n },\n toQuery: ({ type }) => {\n return {\n property: 'posts.type' as PostFilter['property'],\n values: [type],\n };\n },\n});\n\nexport const postHasTypeConditionFactory = createConditionFactory(postHasType);\n\nexport const postRules = {\n isPostAuthor,\n postHasTags,\n postHasEntities,\n postHasType,\n};\n\nexport const isAnswerAuthor = createPermissionRule({\n name: 'IS_AUTHOR',\n description: 'Should allow only if the answer is created by the user',\n resourceRef: answerPermissionResourceRef,\n paramsSchema: z.object({\n userRef: z.string().describe('User ID to match on the author').optional(),\n claims: z\n .array(z.string())\n .optional()\n .describe('List of claims to match at least one on within author'),\n }),\n apply: (resource: Answer, { userRef, claims = [] }) => {\n return resource?.author === userRef || claims.includes(resource?.author);\n },\n toQuery: ({ userRef, claims = [] }) => {\n return {\n property: 'answers.author' as AnswerFilter['property'],\n values: [userRef, ...claims].filter(Boolean),\n };\n },\n});\n\nexport const answerAuthorConditionFactory =\n createConditionFactory(isAnswerAuthor);\n\nexport const answerQuestionHasTags = createPermissionRule({\n name: 'HAS_TAGS',\n description:\n 'Should allow only if the answers question has all the specific tags',\n resourceRef: answerPermissionResourceRef,\n paramsSchema: z.object({\n tags: z.array(z.string()).describe('Tag to match the question'),\n }),\n apply: (resource: Answer, { tags }) => {\n return tags.every(t => resource?.post?.tags?.includes(t));\n },\n toQuery: ({ tags }) => {\n return {\n property: 'tags' as AnswerFilter['property'],\n values: tags,\n };\n },\n});\n\nexport const answerQuestionTagsConditionFactory = createConditionFactory(\n answerQuestionHasTags,\n);\n\nexport const answerQuestionHasEntityRefs = createPermissionRule({\n name: 'HAS_ENTITIES',\n description:\n 'Should allow only if the answers question has all the specific entities',\n resourceRef: answerPermissionResourceRef,\n paramsSchema: z.object({\n entityRefs: z.array(z.string()).describe('Tag to match the question'),\n }),\n apply: (resource: Answer, { entityRefs }) => {\n return entityRefs.every(t => resource?.post?.entities?.includes(t));\n },\n toQuery: ({ entityRefs }) => {\n return {\n property: 'entityRefs' as AnswerFilter['property'],\n values: entityRefs,\n };\n },\n});\n\nexport const answerQuestionEntitiesConditionFactory = createConditionFactory(\n answerQuestionHasEntityRefs,\n);\n\nexport const answerRules = {\n isAnswerAuthor,\n answerQuestionHasTags,\n answerQuestionHasEntityRefs,\n};\n\nexport const isCommentAuthor = createPermissionRule({\n name: 'IS_AUTHOR',\n description: 'Should allow only if the comment is created by the user',\n resourceRef: commentPermissionResourceRef,\n paramsSchema: z.object({\n userRef: z.string().describe('User ID to match on the author').optional(),\n claims: z\n .array(z.string())\n .optional()\n .describe('List of claims to match at least one on within author'),\n }),\n apply: (resource: Comment, { userRef, claims = [] }) => {\n return resource?.author === userRef || claims.includes(resource?.author);\n },\n toQuery: ({ userRef, claims = [] }) => {\n return {\n property: 'comments.author' as CommentFilter['property'],\n values: [userRef, ...claims].filter(Boolean),\n };\n },\n});\n\nexport const commentAuthorConditionFactory =\n createConditionFactory(isCommentAuthor);\n\nexport const commentRules = { isCommentAuthor };\n\nexport const isTag = createPermissionRule({\n name: 'IS_TAG',\n description: 'Should allow only if the tag exists',\n resourceRef: tagPermissionResourceRef,\n paramsSchema: z.object({\n tag: z.string().describe('Tag to match the post'),\n }),\n apply: (resource: TagResponse, { tag }) => {\n return resource?.tag === tag;\n },\n toQuery: ({ tag }) => {\n return {\n property: 'tags.tag' as TagFilter['property'],\n values: [tag],\n };\n },\n});\n\nexport const tagConditionFactory = createConditionFactory(isTag);\n\nexport const tagRules = { isTag };\n\nexport const isCollectionOwner = createPermissionRule({\n name: 'IS_OWNER',\n description: 'Should allow only if the collection is owned by the user',\n resourceRef: collectionPermissionResourceRef,\n paramsSchema: z.object({\n userRef: z\n .string()\n .describe('User reference to match on the owner')\n .optional(),\n claims: z\n .array(z.string())\n .optional()\n .describe('List of claims to match at least one on within owner'),\n }),\n apply: (resource: Collection, { userRef, claims = [] }) => {\n return resource?.owner === userRef || claims.includes(resource?.owner);\n },\n toQuery: ({ userRef, claims = [] }) => {\n return {\n property: 'collections.owner' as CollectionFilter['property'],\n values: [userRef, ...claims].filter(Boolean),\n };\n },\n});\n\nexport const collectionOwnerConditionFactory =\n createConditionFactory(isCollectionOwner);\n\nexport const collectionHasTags = createPermissionRule({\n name: 'HAS_TAGS',\n description:\n 'Should allow only if the posts in the collection have the specific tags',\n resourceRef: collectionPermissionResourceRef,\n paramsSchema: z.object({\n tags: z.array(z.string()).describe('Tag to match the collection'),\n }),\n apply: (resource: Collection, { tags }) => {\n return tags.every(t => resource?.tags?.includes(t));\n },\n toQuery: ({ tags }) => {\n return {\n property: 'tags' as CollectionFilter['property'],\n values: tags,\n };\n },\n});\n\nexport const collectionHasTagsConditionFactory =\n createConditionFactory(collectionHasTags);\n\nexport const collectionHasEntities = createPermissionRule({\n name: 'HAS_ENTITIES',\n description:\n 'Should allow only if the posts in the collection have the specific entities',\n resourceRef: collectionPermissionResourceRef,\n paramsSchema: z.object({\n entityRefs: z\n .array(z.string())\n .describe('Entity refs to match the collection'),\n }),\n apply: (resource: Collection, { entityRefs }) => {\n return entityRefs.every(t => resource?.entities?.includes(t));\n },\n toQuery: ({ entityRefs }) => {\n return {\n property: 'entityRefs' as CollectionFilter['property'],\n values: entityRefs,\n };\n },\n});\n\nexport const collectionHasEntitiesConditionFactory = createConditionFactory(\n collectionHasEntities,\n);\n\nexport const collectionRules = {\n isCollectionOwner,\n collectionHasTags,\n collectionHasEntities,\n};\n\nexport const rules = {\n ...commentRules,\n ...answerRules,\n ...postRules,\n ...tagRules,\n ...collectionRules,\n};\n"],"names":["createPermissionRule","postPermissionResourceRef","z","createConditionFactory","answerPermissionResourceRef","commentPermissionResourceRef","tagPermissionResourceRef","collectionPermissionResourceRef"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"permissionRules.cjs.js","sources":["../src/permissionRules.ts"],"sourcesContent":["import {\n createConditionFactory,\n createPermissionRule,\n} from '@backstage/plugin-permission-node';\nimport { z } from 'zod';\nimport {\n Answer,\n AnswerFilter,\n Collection,\n CollectionFilter,\n Comment,\n CommentFilter,\n Post,\n PostFilter,\n TagFilter,\n TagResponse,\n} from '@drodil/backstage-plugin-qeta-common';\nimport {\n answerPermissionResourceRef,\n collectionPermissionResourceRef,\n commentPermissionResourceRef,\n postPermissionResourceRef,\n tagPermissionResourceRef,\n} from './permissionResources';\n\nexport const isPostAuthor = createPermissionRule({\n name: 'IS_AUTHOR',\n description: 'Should allow only if the post is created by the user',\n resourceRef: postPermissionResourceRef,\n paramsSchema: z.object({\n userRef: z.string().describe('User ID to match on the author').optional(),\n claims: z\n .array(z.string())\n .optional()\n .describe('List of claims to match at least one on within author'),\n }),\n apply: (resource: Post, { userRef, claims = [] }) => {\n return resource?.author === userRef || claims.includes(resource?.author);\n },\n toQuery: ({ userRef, claims = [] }) => {\n return {\n property: 'posts.author' as PostFilter['property'],\n values: [userRef, ...claims].filter(Boolean),\n };\n },\n});\n\nexport const postAuthorConditionFactory = createConditionFactory(isPostAuthor);\n\nexport const postHasTags = createPermissionRule({\n name: 'HAS_TAGS',\n description: 'Should allow only if the post has all the specific tags',\n resourceRef: postPermissionResourceRef,\n paramsSchema: z.object({\n tags: z.array(z.string()).describe('Tag to match the post'),\n }),\n apply: (resource: Post, { tags }) => {\n return tags.every(t => resource?.tags?.includes(t));\n },\n toQuery: ({ tags }) => {\n return {\n property: 'tags' as PostFilter['property'],\n values: tags,\n };\n },\n});\n\nexport const postHasTagsConditionFactory = createConditionFactory(postHasTags);\n\nexport const postHasEntities = createPermissionRule({\n name: 'HAS_ENTITIES',\n description: 'Should allow only if the post has all the specific entities',\n resourceRef: postPermissionResourceRef,\n paramsSchema: z.object({\n entityRefs: z.array(z.string()).describe('Entity refs to match the post'),\n }),\n apply: (resource: Post, { entityRefs }) => {\n return entityRefs.every(t => resource?.entities?.includes(t));\n },\n toQuery: ({ entityRefs }) => {\n return {\n property: 'entityRefs' as PostFilter['property'],\n values: entityRefs,\n };\n },\n});\n\nexport const postHasEntitiesConditionFactory =\n createConditionFactory(postHasEntities);\n\nexport const postHasType = createPermissionRule({\n name: 'HAS_TYPE',\n description: 'Should allow only if the post has the specific type',\n resourceRef: postPermissionResourceRef,\n paramsSchema: z.object({\n type: z.string().describe('Type to match the post'),\n }),\n apply: (resource: Post, { type }) => {\n return resource?.type === type;\n },\n toQuery: ({ type }) => {\n return {\n property: 'posts.type' as PostFilter['property'],\n values: [type],\n };\n },\n});\n\nexport const postHasTypeConditionFactory = createConditionFactory(postHasType);\n\nexport const isPostTagExpert = createPermissionRule({\n name: 'IS_POST_TAG_EXPERT',\n description: 'Allows if post has tags the user is expert of',\n resourceRef: postPermissionResourceRef,\n paramsSchema: z.object({\n userRef: z\n .string()\n .describe('User ID to match on the tag expert')\n .optional(),\n claims: z\n .array(z.string())\n .optional()\n .describe('List of claims to match at least one on within tag expert'),\n }),\n apply: (resource: Post, { userRef, claims }) => {\n return Boolean(\n resource?.experts?.some(e => e === userRef || claims?.includes(e)),\n );\n },\n toQuery: ({ claims = [], userRef }) => {\n return {\n property: 'tag.experts' as PostFilter['property'],\n values: [userRef, ...claims].filter(Boolean),\n };\n },\n});\n\nexport const postTagExpertConditionFactory =\n createConditionFactory(isPostTagExpert);\n\nexport const postRules = {\n isPostAuthor,\n postHasTags,\n postHasEntities,\n postHasType,\n isPostTagExpert,\n};\n\nexport const isAnswerAuthor = createPermissionRule({\n name: 'IS_AUTHOR',\n description: 'Should allow only if the answer is created by the user',\n resourceRef: answerPermissionResourceRef,\n paramsSchema: z.object({\n userRef: z.string().describe('User ID to match on the author').optional(),\n claims: z\n .array(z.string())\n .optional()\n .describe('List of claims to match at least one on within author'),\n }),\n apply: (resource: Answer, { userRef, claims = [] }) => {\n return resource?.author === userRef || claims.includes(resource?.author);\n },\n toQuery: ({ userRef, claims = [] }) => {\n return {\n property: 'answers.author' as AnswerFilter['property'],\n values: [userRef, ...claims].filter(Boolean),\n };\n },\n});\n\nexport const answerAuthorConditionFactory =\n createConditionFactory(isAnswerAuthor);\n\nexport const answerQuestionHasTags = createPermissionRule({\n name: 'HAS_TAGS',\n description:\n 'Should allow only if the answers question has all the specific tags',\n resourceRef: answerPermissionResourceRef,\n paramsSchema: z.object({\n tags: z.array(z.string()).describe('Tag to match the question'),\n }),\n apply: (resource: Answer, { tags }) => {\n return tags.every(t => resource?.post?.tags?.includes(t));\n },\n toQuery: ({ tags }) => {\n return {\n property: 'tags' as AnswerFilter['property'],\n values: tags,\n };\n },\n});\n\nexport const answerQuestionTagsConditionFactory = createConditionFactory(\n answerQuestionHasTags,\n);\n\nexport const answerQuestionHasEntityRefs = createPermissionRule({\n name: 'HAS_ENTITIES',\n description:\n 'Should allow only if the answers question has all the specific entities',\n resourceRef: answerPermissionResourceRef,\n paramsSchema: z.object({\n entityRefs: z.array(z.string()).describe('Tag to match the question'),\n }),\n apply: (resource: Answer, { entityRefs }) => {\n return entityRefs.every(t => resource?.post?.entities?.includes(t));\n },\n toQuery: ({ entityRefs }) => {\n return {\n property: 'entityRefs' as AnswerFilter['property'],\n values: entityRefs,\n };\n },\n});\n\nexport const answerQuestionEntitiesConditionFactory = createConditionFactory(\n answerQuestionHasEntityRefs,\n);\n\nexport const isAnswerTagExpert = createPermissionRule({\n name: 'IS_ANSWER_TAG_EXPERT',\n description: 'Allows if answers post has tags the user is expert of',\n resourceRef: answerPermissionResourceRef,\n paramsSchema: z.object({\n userRef: z\n .string()\n .describe('User ID to match on the tag expert')\n .optional(),\n claims: z\n .array(z.string())\n .optional()\n .describe('List of claims to match at least one on within tag expert'),\n }),\n apply: (resource: Answer, { userRef, claims }) => {\n return Boolean(\n resource?.experts?.some(e => e === userRef || claims?.includes(e)),\n );\n },\n toQuery: ({ claims = [], userRef }) => {\n return {\n property: 'tag.experts' as AnswerFilter['property'],\n values: [userRef, ...claims].filter(Boolean),\n };\n },\n});\n\nexport const answerTagExpertConditionFactory =\n createConditionFactory(isAnswerTagExpert);\n\nexport const answerRules = {\n isAnswerAuthor,\n answerQuestionHasTags,\n answerQuestionHasEntityRefs,\n isAnswerTagExpert,\n};\n\nexport const isCommentAuthor = createPermissionRule({\n name: 'IS_AUTHOR',\n description: 'Should allow only if the comment is created by the user',\n resourceRef: commentPermissionResourceRef,\n paramsSchema: z.object({\n userRef: z.string().describe('User ID to match on the author').optional(),\n claims: z\n .array(z.string())\n .optional()\n .describe('List of claims to match at least one on within author'),\n }),\n apply: (resource: Comment, { userRef, claims = [] }) => {\n return resource?.author === userRef || claims.includes(resource?.author);\n },\n toQuery: ({ userRef, claims = [] }) => {\n return {\n property: 'comments.author' as CommentFilter['property'],\n values: [userRef, ...claims].filter(Boolean),\n };\n },\n});\n\nexport const commentAuthorConditionFactory =\n createConditionFactory(isCommentAuthor);\n\nexport const commentRules = { isCommentAuthor };\n\nexport const isTag = createPermissionRule({\n name: 'IS_TAG',\n description: 'Should allow only if the tag exists',\n resourceRef: tagPermissionResourceRef,\n paramsSchema: z.object({\n tag: z.string().describe('Tag to match the post'),\n }),\n apply: (resource: TagResponse, { tag }) => {\n return resource?.tag === tag;\n },\n toQuery: ({ tag }) => {\n return {\n property: 'tags.tag' as TagFilter['property'],\n values: [tag],\n };\n },\n});\n\nexport const tagConditionFactory = createConditionFactory(isTag);\n\nexport const isTagExpert = createPermissionRule({\n name: 'IS_TAG_EXPERT',\n description: 'Allows only if user is tag expert',\n resourceRef: tagPermissionResourceRef,\n paramsSchema: z.object({\n userRef: z\n .string()\n .describe('User ID to match on the tag expert')\n .optional(),\n claims: z\n .array(z.string())\n .optional()\n .describe('List of claims to match at least one on within tag expert'),\n }),\n apply: (resource: TagResponse, { userRef, claims }) => {\n return Boolean(\n resource?.experts?.some(e => e === userRef || claims?.includes(e)),\n );\n },\n toQuery: ({ claims = [], userRef }) => {\n return {\n property: 'tag.experts' as TagFilter['property'],\n values: [userRef, ...claims].filter(Boolean),\n };\n },\n});\n\nexport const tagExpertConditionFactory = createConditionFactory(isTagExpert);\n\nexport const tagRules = { isTag, isTagExpert };\n\nexport const isCollectionOwner = createPermissionRule({\n name: 'IS_OWNER',\n description: 'Should allow only if the collection is owned by the user',\n resourceRef: collectionPermissionResourceRef,\n paramsSchema: z.object({\n userRef: z\n .string()\n .describe('User reference to match on the owner')\n .optional(),\n claims: z\n .array(z.string())\n .optional()\n .describe('List of claims to match at least one on within owner'),\n }),\n apply: (resource: Collection, { userRef, claims = [] }) => {\n return resource?.owner === userRef || claims.includes(resource?.owner);\n },\n toQuery: ({ userRef, claims = [] }) => {\n return {\n property: 'collections.owner' as CollectionFilter['property'],\n values: [userRef, ...claims].filter(Boolean),\n };\n },\n});\n\nexport const collectionOwnerConditionFactory =\n createConditionFactory(isCollectionOwner);\n\nexport const collectionHasTags = createPermissionRule({\n name: 'HAS_TAGS',\n description:\n 'Should allow only if the posts in the collection have the specific tags',\n resourceRef: collectionPermissionResourceRef,\n paramsSchema: z.object({\n tags: z.array(z.string()).describe('Tag to match the collection'),\n }),\n apply: (resource: Collection, { tags }) => {\n return tags.every(t => resource?.tags?.includes(t));\n },\n toQuery: ({ tags }) => {\n return {\n property: 'tags' as CollectionFilter['property'],\n values: tags,\n };\n },\n});\n\nexport const collectionHasTagsConditionFactory =\n createConditionFactory(collectionHasTags);\n\nexport const collectionHasEntities = createPermissionRule({\n name: 'HAS_ENTITIES',\n description:\n 'Should allow only if the posts in the collection have the specific entities',\n resourceRef: collectionPermissionResourceRef,\n paramsSchema: z.object({\n entityRefs: z\n .array(z.string())\n .describe('Entity refs to match the collection'),\n }),\n apply: (resource: Collection, { entityRefs }) => {\n return entityRefs.every(t => resource?.entities?.includes(t));\n },\n toQuery: ({ entityRefs }) => {\n return {\n property: 'entityRefs' as CollectionFilter['property'],\n values: entityRefs,\n };\n },\n});\n\nexport const collectionHasEntitiesConditionFactory = createConditionFactory(\n collectionHasEntities,\n);\n\nexport const isCollectionTagExpert = createPermissionRule({\n name: 'IS_COLLECTION_TAG_EXPERT',\n description: 'Allows if collection has tags the user is expert of',\n resourceRef: collectionPermissionResourceRef,\n paramsSchema: z.object({\n userRef: z\n .string()\n .describe('User ID to match on the tag expert')\n .optional(),\n claims: z\n .array(z.string())\n .optional()\n .describe('List of claims to match at least one on within tag expert'),\n }),\n apply: (resource: Collection, { userRef, claims }) => {\n return Boolean(\n resource?.experts?.some(e => e === userRef || claims?.includes(e)),\n );\n },\n toQuery: ({ claims = [], userRef }) => {\n return {\n property: 'tag.experts' as CollectionFilter['property'],\n values: [userRef, ...claims].filter(Boolean),\n };\n },\n});\n\nexport const collectionTagExpertConditionFactory = createConditionFactory(\n isCollectionTagExpert,\n);\n\nexport const collectionRules = {\n isCollectionOwner,\n collectionHasTags,\n collectionHasEntities,\n isCollectionTagExpert,\n};\n\nexport const rules = {\n ...commentRules,\n ...answerRules,\n ...postRules,\n ...tagRules,\n ...collectionRules,\n};\n"],"names":["createPermissionRule","postPermissionResourceRef","z","createConditionFactory","answerPermissionResourceRef","commentPermissionResourceRef","tagPermissionResourceRef","collectionPermissionResourceRef"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"backstage.io",
|
|
8
8
|
"node"
|
|
9
9
|
],
|
|
10
|
-
"version": "3.
|
|
10
|
+
"version": "3.28.0",
|
|
11
11
|
"main": "dist/index.cjs.js",
|
|
12
12
|
"types": "dist/index.d.ts",
|
|
13
13
|
"prepublishOnly": "yarn tsc && yarn build",
|
|
@@ -47,20 +47,20 @@
|
|
|
47
47
|
"tsc": "tsc"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
|
-
"@backstage/cli": "^0.32.
|
|
50
|
+
"@backstage/cli": "^0.32.1"
|
|
51
51
|
},
|
|
52
52
|
"files": [
|
|
53
53
|
"dist"
|
|
54
54
|
],
|
|
55
55
|
"dependencies": {
|
|
56
|
-
"@backstage/backend-plugin-api": "^1.3.
|
|
57
|
-
"@backstage/catalog-client": "^1.
|
|
58
|
-
"@backstage/catalog-model": "^1.7.
|
|
56
|
+
"@backstage/backend-plugin-api": "^1.3.1",
|
|
57
|
+
"@backstage/catalog-client": "^1.10.0",
|
|
58
|
+
"@backstage/catalog-model": "^1.7.4",
|
|
59
59
|
"@backstage/config": "^1.3.2",
|
|
60
|
-
"@backstage/plugin-auth-node": "^0.6.
|
|
61
|
-
"@backstage/plugin-permission-common": "^0.
|
|
62
|
-
"@backstage/plugin-permission-node": "^0.
|
|
63
|
-
"@drodil/backstage-plugin-qeta-common": "^3.
|
|
60
|
+
"@backstage/plugin-auth-node": "^0.6.3",
|
|
61
|
+
"@backstage/plugin-permission-common": "^0.9.0",
|
|
62
|
+
"@backstage/plugin-permission-node": "^0.10.0",
|
|
63
|
+
"@drodil/backstage-plugin-qeta-common": "^3.28.0",
|
|
64
64
|
"zod": "^3.22.4"
|
|
65
65
|
},
|
|
66
66
|
"typesVersions": {
|