@memberjunction/ng-conversations 2.110.1 → 2.111.1
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/lib/components/artifact/artifact-share-modal.component.d.ts +42 -0
- package/dist/lib/components/artifact/artifact-share-modal.component.d.ts.map +1 -0
- package/dist/lib/components/artifact/artifact-share-modal.component.js +659 -0
- package/dist/lib/components/artifact/artifact-share-modal.component.js.map +1 -0
- package/dist/lib/components/collection/collection-artifact-card.component.d.ts +15 -3
- package/dist/lib/components/collection/collection-artifact-card.component.d.ts.map +1 -1
- package/dist/lib/components/collection/collection-artifact-card.component.js +89 -23
- package/dist/lib/components/collection/collection-artifact-card.component.js.map +1 -1
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +44 -6
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-chat-area.component.js +321 -182
- package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
- package/dist/lib/components/conversation/conversation-empty-state.component.d.ts +25 -0
- package/dist/lib/components/conversation/conversation-empty-state.component.d.ts.map +1 -0
- package/dist/lib/components/conversation/conversation-empty-state.component.js +233 -0
- package/dist/lib/components/conversation/conversation-empty-state.component.js.map +1 -0
- package/dist/lib/components/mention/mention-dropdown.component.d.ts +2 -1
- package/dist/lib/components/mention/mention-dropdown.component.d.ts.map +1 -1
- package/dist/lib/components/mention/mention-dropdown.component.js +8 -5
- package/dist/lib/components/mention/mention-dropdown.component.js.map +1 -1
- package/dist/lib/components/message/message-input-box.component.d.ts +72 -0
- package/dist/lib/components/message/message-input-box.component.d.ts.map +1 -0
- package/dist/lib/components/message/message-input-box.component.js +267 -0
- package/dist/lib/components/message/message-input-box.component.js.map +1 -0
- package/dist/lib/components/message/message-input.component.d.ts +13 -37
- package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-input.component.js +106 -190
- package/dist/lib/components/message/message-input.component.js.map +1 -1
- package/dist/lib/components/navigation/conversation-navigation.component.d.ts +2 -1
- package/dist/lib/components/navigation/conversation-navigation.component.d.ts.map +1 -1
- package/dist/lib/components/navigation/conversation-navigation.component.js +12 -2
- package/dist/lib/components/navigation/conversation-navigation.component.js.map +1 -1
- package/dist/lib/components/workspace/conversation-workspace.component.d.ts +24 -1
- package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
- package/dist/lib/components/workspace/conversation-workspace.component.js +119 -33
- package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -1
- package/dist/lib/conversations.module.d.ts +55 -52
- package/dist/lib/conversations.module.d.ts.map +1 -1
- package/dist/lib/conversations.module.js +15 -3
- package/dist/lib/conversations.module.js.map +1 -1
- package/dist/lib/services/artifact-permission.service.d.ts +94 -0
- package/dist/lib/services/artifact-permission.service.d.ts.map +1 -0
- package/dist/lib/services/artifact-permission.service.js +294 -0
- package/dist/lib/services/artifact-permission.service.js.map +1 -0
- package/dist/lib/services/artifact-state.service.d.ts +25 -2
- package/dist/lib/services/artifact-state.service.d.ts.map +1 -1
- package/dist/lib/services/artifact-state.service.js +55 -4
- package/dist/lib/services/artifact-state.service.js.map +1 -1
- package/dist/lib/services/conversation-state.service.d.ts +1 -0
- package/dist/lib/services/conversation-state.service.d.ts.map +1 -1
- package/dist/lib/services/conversation-state.service.js +2 -0
- package/dist/lib/services/conversation-state.service.js.map +1 -1
- package/dist/public-api.d.ts +5 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +5 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +19 -15
|
@@ -22,6 +22,7 @@ import { MarkdownModule } from 'ngx-markdown';
|
|
|
22
22
|
import { MessageItemComponent } from './components/message/message-item.component';
|
|
23
23
|
import { MessageListComponent } from './components/message/message-list.component';
|
|
24
24
|
import { MessageInputComponent } from './components/message/message-input.component';
|
|
25
|
+
import { MessageInputBoxComponent } from './components/message/message-input-box.component';
|
|
25
26
|
import { SuggestedResponsesComponent } from './components/message/suggested-responses.component';
|
|
26
27
|
import { MentionDropdownComponent } from './components/mention/mention-dropdown.component';
|
|
27
28
|
import { ConversationWorkspaceComponent } from './components/workspace/conversation-workspace.component';
|
|
@@ -29,6 +30,7 @@ import { ConversationNavigationComponent } from './components/navigation/convers
|
|
|
29
30
|
import { ConversationSidebarComponent } from './components/sidebar/conversation-sidebar.component';
|
|
30
31
|
import { ConversationListComponent } from './components/conversation/conversation-list.component';
|
|
31
32
|
import { ConversationChatAreaComponent } from './components/conversation/conversation-chat-area.component';
|
|
33
|
+
import { ConversationEmptyStateComponent } from './components/conversation/conversation-empty-state.component';
|
|
32
34
|
import { ThreadPanelComponent } from './components/thread/thread-panel.component';
|
|
33
35
|
import { CollectionTreeComponent } from './components/collection/collection-tree.component';
|
|
34
36
|
import { CollectionViewComponent } from './components/collection/collection-view.component';
|
|
@@ -56,6 +58,7 @@ import { InputDialogComponent } from './components/dialogs/input-dialog.componen
|
|
|
56
58
|
import { CollectionShareModalComponent } from './components/collection/collection-share-modal.component';
|
|
57
59
|
import { UserPickerComponent } from './components/shared/user-picker.component';
|
|
58
60
|
import { ArtifactCollectionPickerModalComponent } from './components/collection/artifact-collection-picker-modal.component';
|
|
61
|
+
import { ArtifactShareModalComponent } from './components/artifact/artifact-share-modal.component';
|
|
59
62
|
// Directives
|
|
60
63
|
import { SearchShortcutDirective } from './directives/search-shortcut.directive';
|
|
61
64
|
import * as i0 from "@angular/core";
|
|
@@ -65,6 +68,7 @@ const COMPONENTS = [
|
|
|
65
68
|
MessageItemComponent,
|
|
66
69
|
MessageListComponent,
|
|
67
70
|
MessageInputComponent,
|
|
71
|
+
MessageInputBoxComponent,
|
|
68
72
|
SuggestedResponsesComponent,
|
|
69
73
|
MentionDropdownComponent,
|
|
70
74
|
ConversationWorkspaceComponent,
|
|
@@ -72,6 +76,7 @@ const COMPONENTS = [
|
|
|
72
76
|
ConversationSidebarComponent,
|
|
73
77
|
ConversationListComponent,
|
|
74
78
|
ConversationChatAreaComponent,
|
|
79
|
+
ConversationEmptyStateComponent,
|
|
75
80
|
ThreadPanelComponent,
|
|
76
81
|
CollectionTreeComponent,
|
|
77
82
|
CollectionViewComponent,
|
|
@@ -122,7 +127,8 @@ export class ConversationsModule {
|
|
|
122
127
|
TasksFullViewComponent,
|
|
123
128
|
CollectionShareModalComponent,
|
|
124
129
|
UserPickerComponent,
|
|
125
|
-
ArtifactCollectionPickerModalComponent
|
|
130
|
+
ArtifactCollectionPickerModalComponent,
|
|
131
|
+
ArtifactShareModalComponent] });
|
|
126
132
|
}
|
|
127
133
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ConversationsModule, [{
|
|
128
134
|
type: NgModule,
|
|
@@ -154,7 +160,8 @@ export class ConversationsModule {
|
|
|
154
160
|
TasksFullViewComponent,
|
|
155
161
|
CollectionShareModalComponent,
|
|
156
162
|
UserPickerComponent,
|
|
157
|
-
ArtifactCollectionPickerModalComponent
|
|
163
|
+
ArtifactCollectionPickerModalComponent,
|
|
164
|
+
ArtifactShareModalComponent
|
|
158
165
|
],
|
|
159
166
|
exports: [
|
|
160
167
|
...COMPONENTS,
|
|
@@ -167,6 +174,7 @@ export class ConversationsModule {
|
|
|
167
174
|
(function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(ConversationsModule, { declarations: [MessageItemComponent,
|
|
168
175
|
MessageListComponent,
|
|
169
176
|
MessageInputComponent,
|
|
177
|
+
MessageInputBoxComponent,
|
|
170
178
|
SuggestedResponsesComponent,
|
|
171
179
|
MentionDropdownComponent,
|
|
172
180
|
ConversationWorkspaceComponent,
|
|
@@ -174,6 +182,7 @@ export class ConversationsModule {
|
|
|
174
182
|
ConversationSidebarComponent,
|
|
175
183
|
ConversationListComponent,
|
|
176
184
|
ConversationChatAreaComponent,
|
|
185
|
+
ConversationEmptyStateComponent,
|
|
177
186
|
ThreadPanelComponent,
|
|
178
187
|
CollectionTreeComponent,
|
|
179
188
|
CollectionViewComponent,
|
|
@@ -218,9 +227,11 @@ export class ConversationsModule {
|
|
|
218
227
|
TasksFullViewComponent,
|
|
219
228
|
CollectionShareModalComponent,
|
|
220
229
|
UserPickerComponent,
|
|
221
|
-
ArtifactCollectionPickerModalComponent
|
|
230
|
+
ArtifactCollectionPickerModalComponent,
|
|
231
|
+
ArtifactShareModalComponent], exports: [MessageItemComponent,
|
|
222
232
|
MessageListComponent,
|
|
223
233
|
MessageInputComponent,
|
|
234
|
+
MessageInputBoxComponent,
|
|
224
235
|
SuggestedResponsesComponent,
|
|
225
236
|
MentionDropdownComponent,
|
|
226
237
|
ConversationWorkspaceComponent,
|
|
@@ -228,6 +239,7 @@ export class ConversationsModule {
|
|
|
228
239
|
ConversationSidebarComponent,
|
|
229
240
|
ConversationListComponent,
|
|
230
241
|
ConversationChatAreaComponent,
|
|
242
|
+
ConversationEmptyStateComponent,
|
|
231
243
|
ThreadPanelComponent,
|
|
232
244
|
CollectionTreeComponent,
|
|
233
245
|
CollectionViewComponent,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversations.module.js","sourceRoot":"","sources":["../../src/lib/conversations.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,mBAAmB;AACnB,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAEtE,yBAAyB;AACzB,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,kBAAkB;AAClB,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,aAAa;AACb,OAAO,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,2BAA2B,EAAE,MAAM,oDAAoD,CAAC;AACjG,OAAO,EAAE,wBAAwB,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,EAAE,8BAA8B,EAAE,MAAM,yDAAyD,CAAC;AACzG,OAAO,EAAE,+BAA+B,EAAE,MAAM,2DAA2D,CAAC;AAC5G,OAAO,EAAE,4BAA4B,EAAE,MAAM,qDAAqD,CAAC;AACnG,OAAO,EAAE,yBAAyB,EAAE,MAAM,uDAAuD,CAAC;AAClG,OAAO,EAAE,6BAA6B,EAAE,MAAM,4DAA4D,CAAC;AAC3G,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAClF,OAAO,EAAE,uBAAuB,EAAE,MAAM,mDAAmD,CAAC;AAC5F,OAAO,EAAE,uBAAuB,EAAE,MAAM,mDAAmD,CAAC;AAC5F,OAAO,EAAE,+BAA+B,EAAE,MAAM,4DAA4D,CAAC;AAC7G,OAAO,EAAE,wBAAwB,EAAE,MAAM,kDAAkD,CAAC;AAC5F,OAAO,EAAE,4BAA4B,EAAE,MAAM,yDAAyD,CAAC;AACvG,OAAO,EAAE,4BAA4B,EAAE,MAAM,yDAAyD,CAAC;AACvG,OAAO,EAAE,4BAA4B,EAAE,MAAM,yDAAyD,CAAC;AACvG,OAAO,EAAE,wBAAwB,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,EAAE,yBAAyB,EAAE,MAAM,mDAAmD,CAAC;AAC9F,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,EAAE,0BAA0B,EAAE,MAAM,kDAAkD,CAAC;AAC9F,OAAO,EAAE,6BAA6B,EAAE,MAAM,qDAAqD,CAAC;AACpG,OAAO,EAAE,yBAAyB,EAAE,MAAM,wDAAwD,CAAC;AACnG,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAClF,OAAO,EAAE,0BAA0B,EAAE,MAAM,wDAAwD,CAAC;AACpG,OAAO,EAAE,0BAA0B,EAAE,MAAM,wDAAwD,CAAC;AACpG,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,EAAE,6BAA6B,EAAE,MAAM,0DAA0D,CAAC;AACzG,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAChF,OAAO,EAAE,sCAAsC,EAAE,MAAM,oEAAoE,CAAC;
|
|
1
|
+
{"version":3,"file":"conversations.module.js","sourceRoot":"","sources":["../../src/lib/conversations.module.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { UserInfo } from '@memberjunction/core';
|
|
2
|
+
import { ArtifactPermissionEntity } from '@memberjunction/core-entities';
|
|
3
|
+
import { CollectionPermissionService } from './collection-permission.service';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export interface ArtifactPermission {
|
|
6
|
+
id: string;
|
|
7
|
+
artifactId: string;
|
|
8
|
+
userId: string;
|
|
9
|
+
userName: string;
|
|
10
|
+
canRead: boolean;
|
|
11
|
+
canEdit: boolean;
|
|
12
|
+
canShare: boolean;
|
|
13
|
+
sharedByUserId: string | null;
|
|
14
|
+
sharedByUserName: string | null;
|
|
15
|
+
sharedAt: Date;
|
|
16
|
+
}
|
|
17
|
+
export interface EffectivePermission extends ArtifactPermission {
|
|
18
|
+
source: 'owner' | 'explicit' | 'collection';
|
|
19
|
+
collectionName?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface ArtifactPermissionSet {
|
|
22
|
+
canRead: boolean;
|
|
23
|
+
canEdit: boolean;
|
|
24
|
+
canShare: boolean;
|
|
25
|
+
}
|
|
26
|
+
export declare class ArtifactPermissionService {
|
|
27
|
+
private collectionPermissionService;
|
|
28
|
+
constructor(collectionPermissionService: CollectionPermissionService);
|
|
29
|
+
/**
|
|
30
|
+
* Load all explicit permissions for an artifact
|
|
31
|
+
*/
|
|
32
|
+
loadPermissions(artifactId: string, currentUser: UserInfo): Promise<ArtifactPermission[]>;
|
|
33
|
+
/**
|
|
34
|
+
* Check if user has specific permission for an artifact (HYBRID CHECK)
|
|
35
|
+
* Checks in order: Owner > Explicit Permission > Collection Inheritance
|
|
36
|
+
*/
|
|
37
|
+
checkPermission(artifactId: string, userId: string, permission: 'read' | 'edit' | 'share', currentUser: UserInfo): Promise<boolean>;
|
|
38
|
+
/**
|
|
39
|
+
* Get explicit permission record for a user on an artifact
|
|
40
|
+
*/
|
|
41
|
+
getExplicitPermission(artifactId: string, userId: string, currentUser: UserInfo): Promise<ArtifactPermission | null>;
|
|
42
|
+
/**
|
|
43
|
+
* Get all effective permissions for an artifact (owner + explicit + inherited)
|
|
44
|
+
*/
|
|
45
|
+
getEffectiveUsers(artifactId: string, currentUser: UserInfo): Promise<EffectivePermission[]>;
|
|
46
|
+
/**
|
|
47
|
+
* Grant explicit permission to a user
|
|
48
|
+
*/
|
|
49
|
+
grantPermission(artifactId: string, userId: string, permissions: ArtifactPermissionSet, sharedByUserId: string, currentUser: UserInfo): Promise<ArtifactPermissionEntity>;
|
|
50
|
+
/**
|
|
51
|
+
* Update existing permission
|
|
52
|
+
*/
|
|
53
|
+
updatePermission(permissionId: string, permissions: ArtifactPermissionSet, currentUser: UserInfo): Promise<boolean>;
|
|
54
|
+
/**
|
|
55
|
+
* Revoke explicit permission
|
|
56
|
+
*/
|
|
57
|
+
revokePermission(permissionId: string, currentUser: UserInfo): Promise<boolean>;
|
|
58
|
+
/**
|
|
59
|
+
* Validate that requested permissions don't exceed granter's permissions
|
|
60
|
+
*/
|
|
61
|
+
validatePermissions(requested: ArtifactPermissionSet, granter: ArtifactPermissionSet, isOwner: boolean): boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Get available permissions for a user to grant based on their own permissions
|
|
64
|
+
*/
|
|
65
|
+
getAvailablePermissions(userPermissions: ArtifactPermissionSet, isOwner: boolean): string[];
|
|
66
|
+
/**
|
|
67
|
+
* Check if user is owner of artifact
|
|
68
|
+
*/
|
|
69
|
+
isOwner(artifactId: string, userId: string, currentUser: UserInfo): Promise<boolean>;
|
|
70
|
+
/**
|
|
71
|
+
* Get all permissions for current user on an artifact (convenience method for UI)
|
|
72
|
+
*/
|
|
73
|
+
getUserPermissions(artifactId: string, currentUser: UserInfo): Promise<ArtifactPermissionSet>;
|
|
74
|
+
/**
|
|
75
|
+
* Helper: Get artifact record
|
|
76
|
+
*/
|
|
77
|
+
private getArtifact;
|
|
78
|
+
/**
|
|
79
|
+
* Helper: Get all collections containing this artifact
|
|
80
|
+
*/
|
|
81
|
+
private getArtifactCollections;
|
|
82
|
+
/**
|
|
83
|
+
* Helper: Check if permission set has specific permission
|
|
84
|
+
*/
|
|
85
|
+
private hasPermission;
|
|
86
|
+
/**
|
|
87
|
+
* Helper: Check if collection permission has specific permission
|
|
88
|
+
*/
|
|
89
|
+
private hasCollectionPermission;
|
|
90
|
+
private mapToPermission;
|
|
91
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ArtifactPermissionService, never>;
|
|
92
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<ArtifactPermissionService>;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=artifact-permission.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-permission.service.d.ts","sourceRoot":"","sources":["../../../src/lib/services/artifact-permission.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { RunView, Metadata } from '@memberjunction/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "./collection-permission.service";
|
|
5
|
+
export class ArtifactPermissionService {
|
|
6
|
+
collectionPermissionService;
|
|
7
|
+
constructor(collectionPermissionService) {
|
|
8
|
+
this.collectionPermissionService = collectionPermissionService;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Load all explicit permissions for an artifact
|
|
12
|
+
*/
|
|
13
|
+
async loadPermissions(artifactId, currentUser) {
|
|
14
|
+
const rv = new RunView();
|
|
15
|
+
const result = await rv.RunView({
|
|
16
|
+
EntityName: 'MJ: Artifact Permissions',
|
|
17
|
+
ExtraFilter: `ArtifactID='${artifactId}'`,
|
|
18
|
+
OrderBy: '__mj_CreatedAt ASC',
|
|
19
|
+
ResultType: 'entity_object'
|
|
20
|
+
}, currentUser);
|
|
21
|
+
if (result.Success && result.Results) {
|
|
22
|
+
return result.Results.map(p => this.mapToPermission(p));
|
|
23
|
+
}
|
|
24
|
+
return [];
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Check if user has specific permission for an artifact (HYBRID CHECK)
|
|
28
|
+
* Checks in order: Owner > Explicit Permission > Collection Inheritance
|
|
29
|
+
*/
|
|
30
|
+
async checkPermission(artifactId, userId, permission, currentUser) {
|
|
31
|
+
// 1. Check ownership - owner has all permissions
|
|
32
|
+
const artifact = await this.getArtifact(artifactId, currentUser);
|
|
33
|
+
if (artifact && artifact.UserID === userId) {
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
// 2. Check explicit artifact permission
|
|
37
|
+
const explicit = await this.getExplicitPermission(artifactId, userId, currentUser);
|
|
38
|
+
if (explicit) {
|
|
39
|
+
return this.hasPermission(explicit, permission);
|
|
40
|
+
}
|
|
41
|
+
// 3. Check collection permission inheritance
|
|
42
|
+
const collections = await this.getArtifactCollections(artifactId, currentUser);
|
|
43
|
+
for (const collection of collections) {
|
|
44
|
+
const collectionPermission = await this.collectionPermissionService.checkPermission(collection.CollectionID, userId, currentUser);
|
|
45
|
+
if (collectionPermission && this.hasCollectionPermission(collectionPermission, permission)) {
|
|
46
|
+
return true; // Inherited from collection
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// 4. No access
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get explicit permission record for a user on an artifact
|
|
54
|
+
*/
|
|
55
|
+
async getExplicitPermission(artifactId, userId, currentUser) {
|
|
56
|
+
const rv = new RunView();
|
|
57
|
+
const result = await rv.RunView({
|
|
58
|
+
EntityName: 'MJ: Artifact Permissions',
|
|
59
|
+
ExtraFilter: `ArtifactID='${artifactId}' AND UserID='${userId}'`,
|
|
60
|
+
MaxRows: 1,
|
|
61
|
+
ResultType: 'entity_object'
|
|
62
|
+
}, currentUser);
|
|
63
|
+
if (result.Success && result.Results && result.Results.length > 0) {
|
|
64
|
+
return this.mapToPermission(result.Results[0]);
|
|
65
|
+
}
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Get all effective permissions for an artifact (owner + explicit + inherited)
|
|
70
|
+
*/
|
|
71
|
+
async getEffectiveUsers(artifactId, currentUser) {
|
|
72
|
+
const effectivePermissions = [];
|
|
73
|
+
const seenUsers = new Set();
|
|
74
|
+
// 1. Add owner
|
|
75
|
+
const artifact = await this.getArtifact(artifactId, currentUser);
|
|
76
|
+
if (artifact && artifact.UserID) {
|
|
77
|
+
effectivePermissions.push({
|
|
78
|
+
id: '', // No permission record for owner
|
|
79
|
+
artifactId: artifactId,
|
|
80
|
+
userId: artifact.UserID,
|
|
81
|
+
userName: artifact.User || 'Owner',
|
|
82
|
+
canRead: true,
|
|
83
|
+
canEdit: true,
|
|
84
|
+
canShare: true,
|
|
85
|
+
sharedByUserId: null,
|
|
86
|
+
sharedByUserName: null,
|
|
87
|
+
sharedAt: artifact.__mj_CreatedAt,
|
|
88
|
+
source: 'owner'
|
|
89
|
+
});
|
|
90
|
+
seenUsers.add(artifact.UserID);
|
|
91
|
+
}
|
|
92
|
+
// 2. Add explicit permissions
|
|
93
|
+
const explicitPerms = await this.loadPermissions(artifactId, currentUser);
|
|
94
|
+
for (const perm of explicitPerms) {
|
|
95
|
+
if (!seenUsers.has(perm.userId)) {
|
|
96
|
+
effectivePermissions.push({
|
|
97
|
+
...perm,
|
|
98
|
+
source: 'explicit'
|
|
99
|
+
});
|
|
100
|
+
seenUsers.add(perm.userId);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// 3. Add collection-inherited permissions
|
|
104
|
+
const collections = await this.getArtifactCollections(artifactId, currentUser);
|
|
105
|
+
for (const collection of collections) {
|
|
106
|
+
const collectionPerms = await this.collectionPermissionService.loadPermissions(collection.CollectionID, currentUser);
|
|
107
|
+
for (const collPerm of collectionPerms) {
|
|
108
|
+
if (!seenUsers.has(collPerm.userId)) {
|
|
109
|
+
effectivePermissions.push({
|
|
110
|
+
id: '',
|
|
111
|
+
artifactId: artifactId,
|
|
112
|
+
userId: collPerm.userId,
|
|
113
|
+
userName: collPerm.userName,
|
|
114
|
+
canRead: collPerm.canRead,
|
|
115
|
+
canEdit: collPerm.canEdit,
|
|
116
|
+
canShare: collPerm.canShare,
|
|
117
|
+
sharedByUserId: collPerm.sharedByUserId,
|
|
118
|
+
sharedByUserName: collPerm.sharedByUserName,
|
|
119
|
+
sharedAt: collPerm.sharedAt,
|
|
120
|
+
source: 'collection',
|
|
121
|
+
collectionName: collection.Collection || 'Unknown Collection'
|
|
122
|
+
});
|
|
123
|
+
seenUsers.add(collPerm.userId);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return effectivePermissions;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Grant explicit permission to a user
|
|
131
|
+
*/
|
|
132
|
+
async grantPermission(artifactId, userId, permissions, sharedByUserId, currentUser) {
|
|
133
|
+
const md = new Metadata();
|
|
134
|
+
const permission = await md.GetEntityObject('MJ: Artifact Permissions', currentUser);
|
|
135
|
+
permission.ArtifactID = artifactId;
|
|
136
|
+
permission.UserID = userId;
|
|
137
|
+
permission.CanRead = permissions.canRead;
|
|
138
|
+
permission.CanEdit = permissions.canEdit;
|
|
139
|
+
permission.CanShare = permissions.canShare;
|
|
140
|
+
permission.SharedByUserID = sharedByUserId;
|
|
141
|
+
const saved = await permission.Save();
|
|
142
|
+
if (!saved) {
|
|
143
|
+
throw new Error(permission.LatestResult?.Message || 'Failed to grant permission');
|
|
144
|
+
}
|
|
145
|
+
return permission;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Update existing permission
|
|
149
|
+
*/
|
|
150
|
+
async updatePermission(permissionId, permissions, currentUser) {
|
|
151
|
+
const md = new Metadata();
|
|
152
|
+
const permission = await md.GetEntityObject('MJ: Artifact Permissions', currentUser);
|
|
153
|
+
await permission.Load(permissionId);
|
|
154
|
+
permission.CanRead = permissions.canRead;
|
|
155
|
+
permission.CanEdit = permissions.canEdit;
|
|
156
|
+
permission.CanShare = permissions.canShare;
|
|
157
|
+
return await permission.Save();
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Revoke explicit permission
|
|
161
|
+
*/
|
|
162
|
+
async revokePermission(permissionId, currentUser) {
|
|
163
|
+
const md = new Metadata();
|
|
164
|
+
const permission = await md.GetEntityObject('MJ: Artifact Permissions', currentUser);
|
|
165
|
+
await permission.Load(permissionId);
|
|
166
|
+
return await permission.Delete();
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Validate that requested permissions don't exceed granter's permissions
|
|
170
|
+
*/
|
|
171
|
+
validatePermissions(requested, granter, isOwner) {
|
|
172
|
+
if (isOwner)
|
|
173
|
+
return true; // Owner can grant anything
|
|
174
|
+
// Can't grant permissions you don't have
|
|
175
|
+
if (requested.canEdit && !granter.canEdit)
|
|
176
|
+
return false;
|
|
177
|
+
if (requested.canShare && !granter.canShare)
|
|
178
|
+
return false;
|
|
179
|
+
return true;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Get available permissions for a user to grant based on their own permissions
|
|
183
|
+
*/
|
|
184
|
+
getAvailablePermissions(userPermissions, isOwner) {
|
|
185
|
+
if (isOwner) {
|
|
186
|
+
return ['Read', 'Edit', 'Share'];
|
|
187
|
+
}
|
|
188
|
+
const available = ['Read']; // Always have read
|
|
189
|
+
if (userPermissions.canEdit)
|
|
190
|
+
available.push('Edit');
|
|
191
|
+
if (userPermissions.canShare)
|
|
192
|
+
available.push('Share');
|
|
193
|
+
return available;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Check if user is owner of artifact
|
|
197
|
+
*/
|
|
198
|
+
async isOwner(artifactId, userId, currentUser) {
|
|
199
|
+
const artifact = await this.getArtifact(artifactId, currentUser);
|
|
200
|
+
return artifact ? artifact.UserID === userId : false;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Get all permissions for current user on an artifact (convenience method for UI)
|
|
204
|
+
*/
|
|
205
|
+
async getUserPermissions(artifactId, currentUser) {
|
|
206
|
+
const [canRead, canEdit, canShare] = await Promise.all([
|
|
207
|
+
this.checkPermission(artifactId, currentUser.ID, 'read', currentUser),
|
|
208
|
+
this.checkPermission(artifactId, currentUser.ID, 'edit', currentUser),
|
|
209
|
+
this.checkPermission(artifactId, currentUser.ID, 'share', currentUser)
|
|
210
|
+
]);
|
|
211
|
+
return { canRead, canEdit, canShare };
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Helper: Get artifact record
|
|
215
|
+
*/
|
|
216
|
+
async getArtifact(artifactId, currentUser) {
|
|
217
|
+
const rv = new RunView();
|
|
218
|
+
const result = await rv.RunView({
|
|
219
|
+
EntityName: 'MJ: Artifacts',
|
|
220
|
+
ExtraFilter: `ID='${artifactId}'`,
|
|
221
|
+
MaxRows: 1,
|
|
222
|
+
ResultType: 'entity_object'
|
|
223
|
+
}, currentUser);
|
|
224
|
+
if (result.Success && result.Results && result.Results.length > 0) {
|
|
225
|
+
return result.Results[0];
|
|
226
|
+
}
|
|
227
|
+
return null;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Helper: Get all collections containing this artifact
|
|
231
|
+
*/
|
|
232
|
+
async getArtifactCollections(artifactId, currentUser) {
|
|
233
|
+
const rv = new RunView();
|
|
234
|
+
const result = await rv.RunView({
|
|
235
|
+
EntityName: 'MJ: Collection Artifacts',
|
|
236
|
+
ExtraFilter: `ArtifactID='${artifactId}'`,
|
|
237
|
+
ResultType: 'entity_object'
|
|
238
|
+
}, currentUser);
|
|
239
|
+
return result.Success && result.Results ? result.Results : [];
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Helper: Check if permission set has specific permission
|
|
243
|
+
*/
|
|
244
|
+
hasPermission(permission, type) {
|
|
245
|
+
switch (type) {
|
|
246
|
+
case 'read':
|
|
247
|
+
return permission.canRead;
|
|
248
|
+
case 'edit':
|
|
249
|
+
return permission.canEdit;
|
|
250
|
+
case 'share':
|
|
251
|
+
return permission.canShare;
|
|
252
|
+
default:
|
|
253
|
+
return false;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Helper: Check if collection permission has specific permission
|
|
258
|
+
*/
|
|
259
|
+
hasCollectionPermission(permission, type) {
|
|
260
|
+
switch (type) {
|
|
261
|
+
case 'read':
|
|
262
|
+
return permission.canRead;
|
|
263
|
+
case 'edit':
|
|
264
|
+
return permission.canEdit;
|
|
265
|
+
case 'share':
|
|
266
|
+
return permission.canShare;
|
|
267
|
+
default:
|
|
268
|
+
return false;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
mapToPermission(entity) {
|
|
272
|
+
return {
|
|
273
|
+
id: entity.ID,
|
|
274
|
+
artifactId: entity.ArtifactID,
|
|
275
|
+
userId: entity.UserID,
|
|
276
|
+
userName: entity.User || '',
|
|
277
|
+
canRead: entity.CanRead,
|
|
278
|
+
canEdit: entity.CanEdit,
|
|
279
|
+
canShare: entity.CanShare,
|
|
280
|
+
sharedByUserId: entity.SharedByUserID || null,
|
|
281
|
+
sharedByUserName: entity.SharedByUser || null,
|
|
282
|
+
sharedAt: entity.__mj_CreatedAt
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
static ɵfac = function ArtifactPermissionService_Factory(t) { return new (t || ArtifactPermissionService)(i0.ɵɵinject(i1.CollectionPermissionService)); };
|
|
286
|
+
static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: ArtifactPermissionService, factory: ArtifactPermissionService.ɵfac, providedIn: 'root' });
|
|
287
|
+
}
|
|
288
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ArtifactPermissionService, [{
|
|
289
|
+
type: Injectable,
|
|
290
|
+
args: [{
|
|
291
|
+
providedIn: 'root'
|
|
292
|
+
}]
|
|
293
|
+
}], () => [{ type: i1.CollectionPermissionService }], null); })();
|
|
294
|
+
//# sourceMappingURL=artifact-permission.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-permission.service.js","sourceRoot":"","sources":["../../../src/lib/services/artifact-permission.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { Observable } from 'rxjs';
|
|
2
2
|
import { ArtifactEntity } from '@memberjunction/core-entities';
|
|
3
3
|
import { UserInfo } from '@memberjunction/core';
|
|
4
|
+
import { ArtifactPermissionService } from './artifact-permission.service';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
/**
|
|
6
7
|
* State management for artifacts and the artifact panel
|
|
7
|
-
* Handles artifact CRUD operations and caching
|
|
8
|
+
* Handles artifact CRUD operations and caching with permission enforcement
|
|
8
9
|
*/
|
|
9
10
|
export declare class ArtifactStateService {
|
|
11
|
+
private artifactPermissionService;
|
|
10
12
|
private _activeArtifactId$;
|
|
11
13
|
private _activeVersionNumber$;
|
|
12
14
|
private _artifacts$;
|
|
@@ -17,7 +19,28 @@ export declare class ArtifactStateService {
|
|
|
17
19
|
readonly isPanelOpen$: Observable<boolean>;
|
|
18
20
|
readonly panelMode$: Observable<"view" | "edit">;
|
|
19
21
|
readonly activeArtifact$: Observable<ArtifactEntity | null>;
|
|
20
|
-
constructor();
|
|
22
|
+
constructor(artifactPermissionService: ArtifactPermissionService);
|
|
23
|
+
/**
|
|
24
|
+
* Check if current user can read an artifact
|
|
25
|
+
* @param artifactId The artifact ID
|
|
26
|
+
* @param currentUser The current user context
|
|
27
|
+
* @returns True if user has read permission
|
|
28
|
+
*/
|
|
29
|
+
canReadArtifact(artifactId: string, currentUser: UserInfo): Promise<boolean>;
|
|
30
|
+
/**
|
|
31
|
+
* Check if current user can edit an artifact
|
|
32
|
+
* @param artifactId The artifact ID
|
|
33
|
+
* @param currentUser The current user context
|
|
34
|
+
* @returns True if user has edit permission
|
|
35
|
+
*/
|
|
36
|
+
canEditArtifact(artifactId: string, currentUser: UserInfo): Promise<boolean>;
|
|
37
|
+
/**
|
|
38
|
+
* Check if current user can share an artifact
|
|
39
|
+
* @param artifactId The artifact ID
|
|
40
|
+
* @param currentUser The current user context
|
|
41
|
+
* @returns True if user has share permission
|
|
42
|
+
*/
|
|
43
|
+
canShareArtifact(artifactId: string, currentUser: UserInfo): Promise<boolean>;
|
|
21
44
|
/**
|
|
22
45
|
* Opens an artifact in the panel
|
|
23
46
|
* @param id The artifact ID
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifact-state.service.d.ts","sourceRoot":"","sources":["../../../src/lib/services/artifact-state.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,UAAU,EAAiB,MAAM,MAAM,CAAC;AAElE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAqB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;;
|
|
1
|
+
{"version":3,"file":"artifact-state.service.d.ts","sourceRoot":"","sources":["../../../src/lib/services/artifact-state.service.ts"],"names":[],"mappings":"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"}
|