@memberjunction/ng-resource-permissions 4.0.0 → 4.2.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/README.md +79 -311
- package/package.json +9 -9
package/README.md
CHANGED
|
@@ -1,20 +1,6 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @memberjunction/ng-resource-permissions
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
## Features
|
|
6
|
-
|
|
7
|
-
- **Permission Management**: View, add, edit, and delete permissions for resources
|
|
8
|
-
- **Available Resources Display**: Show resources available to a specific user
|
|
9
|
-
- **Access Requests**: Allow users to request access to resources they don't have permission for
|
|
10
|
-
- **Multiple Permission Types**: Support for both user and role-based permissions
|
|
11
|
-
- **Configurable Permission Levels**: Customizable permission levels (View, Edit, Owner)
|
|
12
|
-
- **Transaction Support**: All permission changes are grouped in transactions for data integrity
|
|
13
|
-
- **Batch Operations**: Multiple permission changes can be saved together in a single transaction
|
|
14
|
-
- **Filtering Options**: Filter available resources with custom criteria
|
|
15
|
-
- **Resource Type Support**: Works with all MemberJunction resource types
|
|
16
|
-
- **Responsive Design**: Adapts to different screen sizes and layouts
|
|
17
|
-
- **Error Handling**: Comprehensive error handling with optional user notifications
|
|
3
|
+
Angular components for managing resource-level permissions in MemberJunction applications. Provides interfaces for viewing, granting, editing, and revoking permissions for any resource type, viewing available resources, and requesting access to restricted resources.
|
|
18
4
|
|
|
19
5
|
## Installation
|
|
20
6
|
|
|
@@ -22,353 +8,135 @@ A suite of Angular components for managing and displaying permissions for resour
|
|
|
22
8
|
npm install @memberjunction/ng-resource-permissions
|
|
23
9
|
```
|
|
24
10
|
|
|
11
|
+
## Overview
|
|
12
|
+
|
|
13
|
+
The resource permissions package provides three components that together form a complete permission management workflow: managing who can access a resource and at what level, viewing which resources a user has access to, and requesting access to restricted resources. All permission changes are grouped in transactions for data integrity.
|
|
14
|
+
|
|
15
|
+
```mermaid
|
|
16
|
+
flowchart TD
|
|
17
|
+
subgraph Manage["Permission Management"]
|
|
18
|
+
A["ResourcePermissionsComponent"]
|
|
19
|
+
A --> B["Add User/Role Permission"]
|
|
20
|
+
A --> C["Edit Permission Level"]
|
|
21
|
+
A --> D["Remove Permission"]
|
|
22
|
+
end
|
|
23
|
+
subgraph View["Resource Browsing"]
|
|
24
|
+
E["AvailableResourcesComponent"]
|
|
25
|
+
E --> F["Filtered Resource Grid"]
|
|
26
|
+
end
|
|
27
|
+
subgraph Request["Access Request"]
|
|
28
|
+
G["RequestResourceAccessComponent"]
|
|
29
|
+
G --> H["Submit Access Request"]
|
|
30
|
+
end
|
|
31
|
+
subgraph Engine["Permission Engine"]
|
|
32
|
+
I["ResourcePermissionEngine"]
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
A --> I
|
|
36
|
+
E --> I
|
|
37
|
+
G --> I
|
|
38
|
+
|
|
39
|
+
style Manage fill:#2d6a9f,stroke:#1a4971,color:#fff
|
|
40
|
+
style View fill:#7c5295,stroke:#563a6b,color:#fff
|
|
41
|
+
style Request fill:#2d8659,stroke:#1a5c3a,color:#fff
|
|
42
|
+
style Engine fill:#b8762f,stroke:#8a5722,color:#fff
|
|
43
|
+
```
|
|
44
|
+
|
|
25
45
|
## Usage
|
|
26
46
|
|
|
27
|
-
### Import
|
|
47
|
+
### Module Import
|
|
28
48
|
|
|
29
49
|
```typescript
|
|
30
50
|
import { ResourcePermissionsModule } from '@memberjunction/ng-resource-permissions';
|
|
31
51
|
|
|
32
52
|
@NgModule({
|
|
33
|
-
imports: [
|
|
34
|
-
ResourcePermissionsModule,
|
|
35
|
-
// other imports
|
|
36
|
-
],
|
|
37
|
-
// ...
|
|
53
|
+
imports: [ResourcePermissionsModule]
|
|
38
54
|
})
|
|
39
|
-
export class YourModule {
|
|
55
|
+
export class YourModule {}
|
|
40
56
|
```
|
|
41
57
|
|
|
42
|
-
###
|
|
58
|
+
### Managing Permissions
|
|
43
59
|
|
|
44
60
|
```html
|
|
45
|
-
<!-- Component for managing permissions for a resource -->
|
|
46
61
|
<mj-resource-permissions
|
|
47
62
|
[ResourceTypeID]="reportResourceTypeID"
|
|
48
63
|
[ResourceRecordID]="reportID"
|
|
49
64
|
[ShowSaveButton]="true"
|
|
50
65
|
[AllowAddPermissions]="true"
|
|
51
66
|
[AllowEditPermissions]="true"
|
|
52
|
-
[AllowDeletePermissions]="true"
|
|
67
|
+
[AllowDeletePermissions]="true"
|
|
68
|
+
[PermissionLevels]="['View', 'Edit', 'Owner']">
|
|
53
69
|
</mj-resource-permissions>
|
|
54
70
|
```
|
|
55
71
|
|
|
56
|
-
### Available Resources
|
|
72
|
+
### Viewing Available Resources
|
|
57
73
|
|
|
58
74
|
```html
|
|
59
|
-
<!-- Component for displaying resources available to a user -->
|
|
60
75
|
<mj-available-resources
|
|
61
76
|
[User]="currentUser"
|
|
62
77
|
[ResourceTypeID]="dashboardResourceTypeID"
|
|
63
78
|
[ResourceExtraFilter]="'IsActive = 1'"
|
|
64
79
|
[SelectionMode]="'Multiple'"
|
|
65
|
-
[ExtraColumns]="'CreatedAt,LastUpdatedAt'"
|
|
66
80
|
(SelectionChanged)="onResourceSelectionChanged($event)">
|
|
67
81
|
</mj-available-resources>
|
|
68
82
|
```
|
|
69
83
|
|
|
70
|
-
###
|
|
84
|
+
### Requesting Access
|
|
71
85
|
|
|
72
86
|
```html
|
|
73
|
-
<!-- Component for requesting access to a resource -->
|
|
74
87
|
<mj-request-resource-access
|
|
75
88
|
[ResourceType]="'Report'"
|
|
76
89
|
[ResourceName]="'Sales Dashboard'"
|
|
77
90
|
[ResourceRecordID]="reportID"
|
|
78
91
|
[PermissionLevel]="'View'"
|
|
79
|
-
[ShowPermissionLevelDropdown]="true"
|
|
80
92
|
(AccessRequested)="onAccessRequested($event)">
|
|
81
93
|
</mj-request-resource-access>
|
|
82
94
|
```
|
|
83
95
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
```typescript
|
|
87
|
-
import { Component, OnInit } from '@angular/core';
|
|
88
|
-
import { ResourceData, ResourcePermissionEntity } from '@memberjunction/core-entities';
|
|
89
|
-
import { UserInfo } from '@memberjunction/core';
|
|
90
|
-
import { MJNotificationService } from '@memberjunction/ng-notifications';
|
|
91
|
-
|
|
92
|
-
@Component({
|
|
93
|
-
selector: 'app-resource-access-manager',
|
|
94
|
-
template: `
|
|
95
|
-
<div class="resource-manager">
|
|
96
|
-
<h2>Resource Access Manager</h2>
|
|
97
|
-
|
|
98
|
-
<!-- Tab navigation -->
|
|
99
|
-
<ul class="nav-tabs">
|
|
100
|
-
<li [class.active]="activeTab === 'permissions'">
|
|
101
|
-
<a (click)="activeTab = 'permissions'">Manage Permissions</a>
|
|
102
|
-
</li>
|
|
103
|
-
<li [class.active]="activeTab === 'available'">
|
|
104
|
-
<a (click)="activeTab = 'available'">Available Resources</a>
|
|
105
|
-
</li>
|
|
106
|
-
</ul>
|
|
107
|
-
|
|
108
|
-
<!-- Permissions management tab -->
|
|
109
|
-
<div *ngIf="activeTab === 'permissions'" class="tab-content">
|
|
110
|
-
<h3>Manage Report Permissions</h3>
|
|
111
|
-
<p>Control who can access this report and at what permission level.</p>
|
|
112
|
-
|
|
113
|
-
<mj-resource-permissions
|
|
114
|
-
[ResourceTypeID]="reportResourceTypeID"
|
|
115
|
-
[ResourceRecordID]="selectedReportID"
|
|
116
|
-
[ShowSaveButton]="true"
|
|
117
|
-
[ShowPermissionLevels]="true"
|
|
118
|
-
[PermissionTypes]="['User', 'Role']"
|
|
119
|
-
[ExcludedRoleNames]="['System Administrator']">
|
|
120
|
-
</mj-resource-permissions>
|
|
121
|
-
</div>
|
|
122
|
-
|
|
123
|
-
<!-- Available resources tab -->
|
|
124
|
-
<div *ngIf="activeTab === 'available'" class="tab-content">
|
|
125
|
-
<h3>Resources Available to User</h3>
|
|
126
|
-
<p>Select a user to view their accessible resources:</p>
|
|
127
|
-
|
|
128
|
-
<select [(ngModel)]="selectedUser">
|
|
129
|
-
<option *ngFor="let user of users" [ngValue]="user">
|
|
130
|
-
{{user.Name}} ({{user.Email}})
|
|
131
|
-
</option>
|
|
132
|
-
</select>
|
|
133
|
-
|
|
134
|
-
<mj-available-resources
|
|
135
|
-
*ngIf="selectedUser"
|
|
136
|
-
[User]="selectedUser"
|
|
137
|
-
[ResourceTypeID]="reportResourceTypeID"
|
|
138
|
-
[ExtraColumns]="'CreatedAt,ModifiedAt'"
|
|
139
|
-
(SelectionChanged)="onAvailableResourcesChanged($event)">
|
|
140
|
-
</mj-available-resources>
|
|
141
|
-
</div>
|
|
142
|
-
</div>
|
|
143
|
-
`,
|
|
144
|
-
styles: [`
|
|
145
|
-
.resource-manager {
|
|
146
|
-
padding: 20px;
|
|
147
|
-
}
|
|
148
|
-
.nav-tabs {
|
|
149
|
-
display: flex;
|
|
150
|
-
list-style: none;
|
|
151
|
-
padding: 0;
|
|
152
|
-
border-bottom: 1px solid #ccc;
|
|
153
|
-
}
|
|
154
|
-
.nav-tabs li {
|
|
155
|
-
padding: 10px 20px;
|
|
156
|
-
cursor: pointer;
|
|
157
|
-
}
|
|
158
|
-
.nav-tabs li.active {
|
|
159
|
-
border-bottom: 2px solid #0066cc;
|
|
160
|
-
font-weight: bold;
|
|
161
|
-
}
|
|
162
|
-
.tab-content {
|
|
163
|
-
padding: 20px 0;
|
|
164
|
-
}
|
|
165
|
-
`]
|
|
166
|
-
})
|
|
167
|
-
export class ResourceAccessManagerComponent implements OnInit {
|
|
168
|
-
activeTab = 'permissions';
|
|
169
|
-
reportResourceTypeID = '1'; // Resource type ID for reports
|
|
170
|
-
selectedReportID = '123'; // ID of the selected report
|
|
171
|
-
selectedUser?: UserInfo;
|
|
172
|
-
users: UserInfo[] = [];
|
|
173
|
-
|
|
174
|
-
constructor(private notificationService: MJNotificationService) {}
|
|
175
|
-
|
|
176
|
-
async ngOnInit() {
|
|
177
|
-
// Load users
|
|
178
|
-
// This would typically come from your user service
|
|
179
|
-
this.users = await this.loadUsers();
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
async loadUsers(): Promise<UserInfo[]> {
|
|
183
|
-
// Implementation for loading users
|
|
184
|
-
return [];
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
onAvailableResourcesChanged(resources: ResourceData[]) {
|
|
188
|
-
console.log('Selected resources:', resources);
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
onAccessRequested(permission: ResourcePermissionEntity) {
|
|
192
|
-
this.notificationService.CreateSimpleNotification(
|
|
193
|
-
`Access request submitted for ${permission.Get('ResourceType')}`,
|
|
194
|
-
'success',
|
|
195
|
-
3000
|
|
196
|
-
);
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
## API Reference
|
|
202
|
-
|
|
203
|
-
### ResourcePermissionsComponent
|
|
204
|
-
|
|
205
|
-
Component for managing permissions for a specific resource.
|
|
206
|
-
|
|
207
|
-
#### Inputs
|
|
208
|
-
|
|
209
|
-
- `ResourceTypeID`: string - ID of the resource type record (required)
|
|
210
|
-
- `ResourceRecordID`: string - ID of the resource record (required)
|
|
211
|
-
- `ShowSaveButton`: boolean - Whether to show the Save button (default: false)
|
|
212
|
-
- `ShowPermissionLevels`: boolean - Whether to show permission level options (default: true)
|
|
213
|
-
- `ShowUserErrorMessages`: boolean - Whether to show error messages to the user (default: false)
|
|
214
|
-
- `AllowAddPermissions`: boolean - Whether the user can add permissions (default: true)
|
|
215
|
-
- `AllowEditPermissions`: boolean - Whether the user can edit permissions (default: true)
|
|
216
|
-
- `AllowDeletePermissions`: boolean - Whether the user can delete permissions (default: true)
|
|
217
|
-
- `PermissionLevels`: string[] - Available permission levels (default: ['View', 'Edit', 'Owner'])
|
|
218
|
-
- `PermissionTypes`: string[] - Available permission types (default: ['User', 'Role'])
|
|
219
|
-
- `ExcludedRoleNames`: string[] - Role names to exclude from selection
|
|
220
|
-
- `ExcludedUserEmails`: string[] - User emails to exclude from selection
|
|
221
|
-
|
|
222
|
-
#### Methods
|
|
96
|
+
## Components
|
|
223
97
|
|
|
224
|
-
|
|
225
|
-
|
|
98
|
+
| Component | Selector | Purpose |
|
|
99
|
+
|-----------|----------|---------|
|
|
100
|
+
| `ResourcePermissionsComponent` | `mj-resource-permissions` | Manage user/role permissions for a resource |
|
|
101
|
+
| `AvailableResourcesComponent` | `mj-available-resources` | Display resources available to a user |
|
|
102
|
+
| `RequestResourceAccessComponent` | `mj-request-resource-access` | Request access to a restricted resource |
|
|
226
103
|
|
|
227
|
-
|
|
104
|
+
## ResourcePermissionsComponent
|
|
228
105
|
|
|
229
|
-
|
|
106
|
+
### Inputs
|
|
230
107
|
|
|
231
|
-
|
|
108
|
+
| Property | Type | Default | Description |
|
|
109
|
+
|----------|------|---------|-------------|
|
|
110
|
+
| `ResourceTypeID` | `string` | -- | ID of the resource type (required) |
|
|
111
|
+
| `ResourceRecordID` | `string` | -- | ID of the resource record (required) |
|
|
112
|
+
| `ShowSaveButton` | `boolean` | `false` | Show built-in Save button |
|
|
113
|
+
| `ShowPermissionLevels` | `boolean` | `true` | Show permission level options |
|
|
114
|
+
| `AllowAddPermissions` | `boolean` | `true` | Allow adding permissions |
|
|
115
|
+
| `AllowEditPermissions` | `boolean` | `true` | Allow editing permissions |
|
|
116
|
+
| `AllowDeletePermissions` | `boolean` | `true` | Allow deleting permissions |
|
|
117
|
+
| `PermissionLevels` | `string[]` | `['View', 'Edit', 'Owner']` | Available permission levels |
|
|
118
|
+
| `PermissionTypes` | `string[]` | `['User', 'Role']` | Available permission types |
|
|
232
119
|
|
|
233
|
-
|
|
234
|
-
- `ResourceTypeID`: string - ID of the resource type (required)
|
|
235
|
-
- `ResourceExtraFilter`: string - Additional filter for resources
|
|
236
|
-
- `SelectionMode`: 'Single' | 'Multiple' - Selection mode for the grid (default: 'Single')
|
|
237
|
-
- `ExtraColumns`: string - Comma-delimited list of additional columns to display
|
|
238
|
-
- `SelectedResources`: ResourceData[] - Array of currently selected resources
|
|
120
|
+
### Methods
|
|
239
121
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
#### Methods
|
|
245
|
-
|
|
246
|
-
- `Refresh()`: Promise<void> - Refreshes the component data
|
|
247
|
-
|
|
248
|
-
### RequestResourceAccessComponent
|
|
249
|
-
|
|
250
|
-
Component for requesting access to a resource.
|
|
251
|
-
|
|
252
|
-
#### Inputs
|
|
253
|
-
|
|
254
|
-
- `ResourceType`: string - The name of the resource type (required)
|
|
255
|
-
- `ResourceName`: string - The name of the resource to display
|
|
256
|
-
- `ResourceRecordID`: string - ID of the resource record (required)
|
|
257
|
-
- `PermissionLevel`: 'View' | 'Edit' | 'Owner' - Default permission level (default: 'View')
|
|
258
|
-
- `ShowPermissionLevelDropdown`: boolean - Whether to show permission level selection (default: true)
|
|
259
|
-
|
|
260
|
-
#### Outputs
|
|
261
|
-
|
|
262
|
-
- `AccessRequested`: EventEmitter<ResourcePermissionEntity> - Emitted when access is requested
|
|
263
|
-
|
|
264
|
-
#### Methods
|
|
265
|
-
|
|
266
|
-
- `requestAccess()`: Promise<void> - Submits the access request
|
|
122
|
+
| Method | Returns | Description |
|
|
123
|
+
|--------|---------|-------------|
|
|
124
|
+
| `SavePermissions()` | `Promise<boolean>` | Save all pending permission changes |
|
|
125
|
+
| `UpdateResourceRecordID(id)` | `void` | Change the resource record ID |
|
|
267
126
|
|
|
268
127
|
## Permission Workflow
|
|
269
128
|
|
|
270
|
-
1. **
|
|
271
|
-
2. **
|
|
272
|
-
3. **
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
When using the RequestResourceAccessComponent, permissions are created with a status of 'Requested'. This allows resource owners to review and approve/deny access requests. The typical workflow is:
|
|
277
|
-
|
|
278
|
-
1. User requests access to a resource → Permission created with Status = 'Requested'
|
|
279
|
-
2. Resource owner reviews the request in ResourcePermissionsComponent
|
|
280
|
-
3. Resource owner can approve (change status) or deny (delete) the permission
|
|
281
|
-
4. Once approved, the user gains access to the resource at the specified permission level
|
|
282
|
-
|
|
283
|
-
## Resource Types
|
|
284
|
-
|
|
285
|
-
The resource permissions system works with any resource type defined in MemberJunction, including:
|
|
286
|
-
|
|
287
|
-
- Reports
|
|
288
|
-
- Dashboards
|
|
289
|
-
- Queries
|
|
290
|
-
- Documents
|
|
291
|
-
- Other custom resource types
|
|
292
|
-
|
|
293
|
-
## Styling
|
|
294
|
-
|
|
295
|
-
The components include basic CSS that can be customized to match your application's design.
|
|
129
|
+
1. **Grant access**: Add a user or role permission with a specific level (View, Edit, Owner)
|
|
130
|
+
2. **Edit access**: Change an existing permission level
|
|
131
|
+
3. **Revoke access**: Remove a permission entry
|
|
132
|
+
4. **Request access**: Users without permission can submit a request (created with `Status = 'Requested'`)
|
|
133
|
+
5. **Approve/deny**: Resource owner reviews and approves or denies the request
|
|
296
134
|
|
|
297
135
|
## Dependencies
|
|
298
136
|
|
|
299
|
-
-
|
|
300
|
-
-
|
|
301
|
-
-
|
|
302
|
-
-
|
|
303
|
-
- `@
|
|
304
|
-
- `@
|
|
305
|
-
- `@memberjunction/ng-generic-dialog`: For dialog components
|
|
306
|
-
- `@memberjunction/ng-compare-records`: For record comparison functionality
|
|
307
|
-
- `@progress/kendo-angular-grid`: For grid components
|
|
308
|
-
- `@progress/kendo-angular-buttons`: For UI buttons
|
|
309
|
-
- `@progress/kendo-angular-dropdowns`: For dropdown selectors
|
|
310
|
-
- `@progress/kendo-angular-dialog`: For dialog windows
|
|
311
|
-
- `@progress/kendo-angular-indicators`: For loading indicators
|
|
312
|
-
- `@progress/kendo-angular-listview`: For list view components
|
|
313
|
-
- `@progress/kendo-angular-layout`: For layout components
|
|
314
|
-
|
|
315
|
-
## Building
|
|
316
|
-
|
|
317
|
-
This package is part of the MemberJunction monorepo. To build:
|
|
318
|
-
|
|
319
|
-
```bash
|
|
320
|
-
# From the package directory
|
|
321
|
-
npm run build
|
|
322
|
-
|
|
323
|
-
# Or from the monorepo root
|
|
324
|
-
turbo build --filter="@memberjunction/ng-resource-permissions"
|
|
325
|
-
```
|
|
326
|
-
|
|
327
|
-
## Integration with MemberJunction
|
|
328
|
-
|
|
329
|
-
This package integrates seamlessly with the MemberJunction ecosystem:
|
|
330
|
-
|
|
331
|
-
- **ResourcePermissionEngine**: Leverages the core ResourcePermissionEngine for permission logic
|
|
332
|
-
- **Entity Framework**: Uses MemberJunction's entity system for data access
|
|
333
|
-
- **Metadata System**: Utilizes the metadata provider for entity discovery
|
|
334
|
-
- **Transaction Support**: Integrates with MemberJunction's transaction management
|
|
335
|
-
- **Notification System**: Sends notifications when access is requested
|
|
336
|
-
|
|
337
|
-
## Advanced Usage
|
|
338
|
-
|
|
339
|
-
### Custom Permission Validation
|
|
340
|
-
|
|
341
|
-
You can extend the permission validation logic by implementing custom checks in your application before calling the save methods on the components.
|
|
342
|
-
|
|
343
|
-
### Programmatic Permission Management
|
|
344
|
-
|
|
345
|
-
```typescript
|
|
346
|
-
import { ResourcePermissionEngine } from '@memberjunction/core-entities';
|
|
347
|
-
import { Metadata } from '@memberjunction/core';
|
|
348
|
-
|
|
349
|
-
// Get the engine instance
|
|
350
|
-
const engine = ResourcePermissionEngine.Instance;
|
|
351
|
-
await engine.Config();
|
|
352
|
-
|
|
353
|
-
// Check if a user has access to a resource
|
|
354
|
-
const hasAccess = engine.UserHasPermission(
|
|
355
|
-
userID,
|
|
356
|
-
resourceTypeID,
|
|
357
|
-
resourceRecordID,
|
|
358
|
-
'View' // minimum permission level
|
|
359
|
-
);
|
|
360
|
-
|
|
361
|
-
// Get all permissions for a resource
|
|
362
|
-
const permissions = await engine.GetResourcePermissions(
|
|
363
|
-
resourceTypeID,
|
|
364
|
-
resourceRecordID
|
|
365
|
-
);
|
|
366
|
-
```
|
|
367
|
-
|
|
368
|
-
## Version
|
|
369
|
-
|
|
370
|
-
Current version: 2.43.0
|
|
371
|
-
|
|
372
|
-
## License
|
|
373
|
-
|
|
374
|
-
ISC
|
|
137
|
+
- [@memberjunction/core](../../MJCore/README.md) -- Metadata, entity framework
|
|
138
|
+
- [@memberjunction/core-entities](../../MJCoreEntities/README.md) -- ResourcePermissionEntity, ResourcePermissionEngine
|
|
139
|
+
- [@memberjunction/ng-notifications](../notifications/README.md) -- Notification service
|
|
140
|
+
- [@memberjunction/ng-generic-dialog](../generic-dialog/README.md) -- Dialog component
|
|
141
|
+
- `@progress/kendo-angular-grid` -- Grid rendering
|
|
142
|
+
- `@progress/kendo-angular-dropdowns` -- Dropdown selectors
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/ng-resource-permissions",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.2.0",
|
|
4
4
|
"description": "MemberJunction: Generic Angular components for displaying/editing permissions for a resource",
|
|
5
5
|
"main": "./dist/public-api.js",
|
|
6
6
|
"typings": "./dist/public-api.d.ts",
|
|
@@ -25,14 +25,14 @@
|
|
|
25
25
|
"@angular/router": "21.1.3"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@memberjunction/core": "4.
|
|
29
|
-
"@memberjunction/core-entities": "4.
|
|
30
|
-
"@memberjunction/global": "4.
|
|
31
|
-
"@memberjunction/ng-base-types": "4.
|
|
32
|
-
"@memberjunction/ng-container-directives": "4.
|
|
33
|
-
"@memberjunction/ng-generic-dialog": "4.
|
|
34
|
-
"@memberjunction/ng-notifications": "4.
|
|
35
|
-
"@memberjunction/ng-shared-generic": "4.
|
|
28
|
+
"@memberjunction/core": "4.2.0",
|
|
29
|
+
"@memberjunction/core-entities": "4.2.0",
|
|
30
|
+
"@memberjunction/global": "4.2.0",
|
|
31
|
+
"@memberjunction/ng-base-types": "4.2.0",
|
|
32
|
+
"@memberjunction/ng-container-directives": "4.2.0",
|
|
33
|
+
"@memberjunction/ng-generic-dialog": "4.2.0",
|
|
34
|
+
"@memberjunction/ng-notifications": "4.2.0",
|
|
35
|
+
"@memberjunction/ng-shared-generic": "4.2.0",
|
|
36
36
|
"@progress/kendo-angular-buttons": "22.0.1",
|
|
37
37
|
"@progress/kendo-angular-dialog": "22.0.1",
|
|
38
38
|
"@progress/kendo-angular-dropdowns": "22.0.1",
|