# @memberjunction/ng-resource-permissions 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. ## Installation ```bash npm install @memberjunction/ng-resource-permissions ``` ## Overview 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. ```mermaid flowchart TD subgraph Manage["Permission Management"] A["ResourcePermissionsComponent"] A --> B["Add User/Role Permission"] A --> C["Edit Permission Level"] A --> D["Remove Permission"] end subgraph View["Resource Browsing"] E["AvailableResourcesComponent"] E --> F["Filtered Resource Grid"] end subgraph Request["Access Request"] G["RequestResourceAccessComponent"] G --> H["Submit Access Request"] end subgraph Engine["Permission Engine"] I["ResourcePermissionEngine"] end A --> I E --> I G --> I style Manage fill:#2d6a9f,stroke:#1a4971,color:#fff style View fill:#7c5295,stroke:#563a6b,color:#fff style Request fill:#2d8659,stroke:#1a5c3a,color:#fff style Engine fill:#b8762f,stroke:#8a5722,color:#fff ``` ## Usage ### Module Import ```typescript import { ResourcePermissionsModule } from '@memberjunction/ng-resource-permissions'; @NgModule({ imports: [ResourcePermissionsModule] }) export class YourModule {} ``` ### Managing Permissions ```html ``` ### Viewing Available Resources ```html ``` ### Requesting Access ```html ``` ## Components | Component | Selector | Purpose | |-----------|----------|---------| | `ResourcePermissionsComponent` | `mj-resource-permissions` | Manage user/role permissions for a resource | | `AvailableResourcesComponent` | `mj-available-resources` | Display resources available to a user | | `RequestResourceAccessComponent` | `mj-request-resource-access` | Request access to a restricted resource | ## ResourcePermissionsComponent ### Inputs | Property | Type | Default | Description | |----------|------|---------|-------------| | `ResourceTypeID` | `string` | -- | ID of the resource type (required) | | `ResourceRecordID` | `string` | -- | ID of the resource record (required) | | `ShowSaveButton` | `boolean` | `false` | Show built-in Save button | | `ShowPermissionLevels` | `boolean` | `true` | Show permission level options | | `AllowAddPermissions` | `boolean` | `true` | Allow adding permissions | | `AllowEditPermissions` | `boolean` | `true` | Allow editing permissions | | `AllowDeletePermissions` | `boolean` | `true` | Allow deleting permissions | | `PermissionLevels` | `string[]` | `['View', 'Edit', 'Owner']` | Available permission levels | | `PermissionTypes` | `string[]` | `['User', 'Role']` | Available permission types | ### Methods | Method | Returns | Description | |--------|---------|-------------| | `SavePermissions()` | `Promise` | Save all pending permission changes | | `UpdateResourceRecordID(id)` | `void` | Change the resource record ID | ## Permission Workflow 1. **Grant access**: Add a user or role permission with a specific level (View, Edit, Owner) 2. **Edit access**: Change an existing permission level 3. **Revoke access**: Remove a permission entry 4. **Request access**: Users without permission can submit a request (created with `Status = 'Requested'`) 5. **Approve/deny**: Resource owner reviews and approves or denies the request ## Dependencies - [@memberjunction/core](../../../MJCore/readme.md) -- Metadata, entity framework - [@memberjunction/core-entities](../../../MJCoreEntities/readme.md) -- ResourcePermissionEntity, ResourcePermissionEngine - [@memberjunction/ng-notifications](../notifications/README.md) -- Notification service - [@memberjunction/ng-generic-dialog](../generic-dialog/README.md) -- Dialog component - `@progress/kendo-angular-grid` -- Grid rendering - `@progress/kendo-angular-dropdowns` -- Dropdown selectors