@rxap/authorization
Version:
Provides an Angular module and directives to manage authorization and permissions in your application. It allows you to control the visibility and enabled state of UI elements based on user permissions. The package includes an `AuthorizationService` to ch
1 lines • 38 kB
Source Map (JSON)
{"version":3,"file":"rxap-authorization.mjs","sources":["../../../../../packages/angular/authorization/src/lib/tokens.ts","../../../../../packages/angular/authorization/src/lib/authorization.service.ts","../../../../../packages/angular/authorization/src/lib/has-enable-permission.ts","../../../../../packages/angular/authorization/src/lib/form-control-has-enable-permission.directive.ts","../../../../../packages/angular/authorization/src/lib/has-write-permission.directive.ts","../../../../../packages/angular/authorization/src/lib/if-has-permission.directive.ts","../../../../../packages/angular/authorization/src/lib/mat-button-has-enable-permission.directive.ts","../../../../../packages/angular/authorization/src/lib/mat-checkbox-has-enable-permission.directive.ts","../../../../../packages/angular/authorization/src/lib/mat-input-has-enable-permission.directive.ts","../../../../../packages/angular/authorization/src/lib/mat-select-has-enable-permission.directive.ts","../../../../../packages/angular/authorization/src/lib/mat-slide-toggle-has-enable-permission.directive.ts","../../../../../packages/angular/authorization/src/lib/has-permission.module.ts","../../../../../packages/angular/authorization/src/index.ts","../../../../../packages/angular/authorization/src/rxap-authorization.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport const RXAP_AUTHORIZATION_SCOPE = new InjectionToken('rxap-authorization/scope');\n\nexport const RXAP_GET_SYSTEM_ROLES_METHOD = new InjectionToken('rxap-authorization/get-system-roles-method');\n\nexport const RXAP_DISABLE_AUTHORIZATION = new InjectionToken<boolean>('rxap-authorization/disable');\n","import {\n inject,\n Injectable,\n isDevMode,\n} from '@angular/core';\nimport { coerceArray } from '@rxap/utilities';\nimport {\n BehaviorSubject,\n Observable,\n} from 'rxjs';\nimport {\n distinctUntilChanged,\n map,\n} from 'rxjs/operators';\nimport { RXAP_DISABLE_AUTHORIZATION } from './tokens';\n\n@Injectable({ providedIn: 'root' })\nexport class AuthorizationService {\n\n protected readonly permissions$ = new BehaviorSubject<string[]>([]);\n\n public readonly disabled = inject(RXAP_DISABLE_AUTHORIZATION, { optional: true }) ?? false;\n\n public setPermissions(permissions: string[]): void {\n this.permissions$.next(permissions);\n }\n\n public checkPermission(\n identifier: string | string[],\n permissions: string[],\n scope?: string | null,\n ): boolean {\n\n if (this.disabled) {\n console.warn('Authorization is disabled! Granting all permissions!');\n return true;\n }\n\n identifier = coerceArray(identifier);\n\n if (!identifier.length) {\n return true;\n }\n\n if (isDevMode()) {\n console.log(\n `check permission for [${ identifier.join(', ') }]${ scope ? ` with scope '${ scope }': ` : ' :' }`,\n permissions,\n );\n }\n\n // holds all permission, but if a scope is defined only permissions without scope\n // or with the matching scope and the scope prefix is removed\n let permissionSubset = permissions;\n\n if (scope) {\n permissionSubset = permissions\n .filter(\n (permission) =>\n !permission.match(/\\//) ||\n permission.match(new RegExp(`^${ scope.replace('.', '\\\\.') }/`)),\n ).map((permission) =>\n permission.replace(\n new RegExp(`^${ scope.replace('.', '\\\\.') }/`),\n '',\n ),\n ).sort((a, b) => a.length - b.length);\n }\n\n if (identifier.every(id => permissionSubset.includes(id))) {\n return true;\n }\n\n const permissionRegexList = permissionSubset.map((permission) => {\n\n const permissionRegex = permission\n .replace('.', '\\\\.')\n .replace('*', '.+');\n\n if (permission[0] === '*' && permission[permission.length - 1] === '*') {\n return new RegExp(permissionRegex);\n } else if (permission[0] === '*') {\n return new RegExp(`${ permissionRegex }$`);\n } else if (permission[permission.length - 1] === '*') {\n return new RegExp(`^${ permissionRegex }`);\n } else {\n return new RegExp(`^${ permissionRegex }$`);\n }\n\n });\n\n return identifier.every(id => permissionRegexList.some((permissionRegex) =>\n id.match(permissionRegex),\n ));\n }\n\n public hasPermission$(\n identifier: string | string[],\n scope?: string | null,\n ignorePermissionList?: string[],\n ): Observable<boolean> {\n return this.permissions$.pipe(\n map((permissions) => ignorePermissionList ?\n permissions.filter((permission) => !ignorePermissionList.includes(permission)) :\n permissions.slice()),\n map((permissions) =>\n this.checkPermission(identifier, permissions, scope),\n ),\n distinctUntilChanged(),\n );\n }\n\n public hasPermission(\n identifier: string | string[],\n scope?: string | null,\n ignorePermissionList?: string[],\n ): boolean {\n const allPermissions = this.getPermissions();\n const permissions = ignorePermissionList ?\n allPermissions.filter((permission) => !ignorePermissionList.includes(permission)) :\n allPermissions;\n\n return this.checkPermission(identifier, permissions, scope);\n }\n\n public getPermissions$(): Observable<string[]> {\n return this.permissions$.asObservable().pipe(map(permissions => permissions.slice()));\n }\n\n public getPermissions(): string[] {\n return this.permissions$.value.slice();\n }\n\n}\n","import {\n ChangeDetectorRef,\n Inject,\n Injectable,\n OnDestroy,\n OnInit,\n Optional,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { tap } from 'rxjs/operators';\nimport { AuthorizationService } from './authorization.service';\nimport { RXAP_AUTHORIZATION_SCOPE } from './tokens';\n\n@Injectable()\nexport abstract class HasEnablePermission implements OnInit, OnDestroy {\n public identifier!: string;\n\n private _subscription?: Subscription;\n\n constructor(\n @Inject(AuthorizationService)\n private readonly authorization: AuthorizationService,\n @Inject(ChangeDetectorRef)\n protected readonly cdr: ChangeDetectorRef,\n @Optional()\n @Inject(RXAP_AUTHORIZATION_SCOPE)\n private readonly scope: string | null = null,\n @Optional()\n @Inject(NG_VALUE_ACCESSOR)\n private readonly valueAccessor: ControlValueAccessor[] | null = null,\n ) {\n }\n\n // eslint-disable-next-line @angular-eslint/contextual-lifecycle\n public ngOnInit() {\n this._subscription = this\n .authorization\n .hasPermission$(this.identifier, this.scope || null)\n .pipe(\n tap((hasPermission) => {\n this.setDisabled(!hasPermission);\n if (this.valueAccessor) {\n this.valueAccessor.forEach((value) => {\n if (value.setDisabledState) {\n value.setDisabledState(!hasPermission);\n }\n });\n }\n this.cdr.markForCheck();\n this.cdr.detectChanges();\n }),\n )\n .subscribe();\n }\n\n public ngOnDestroy() {\n this._subscription?.unsubscribe();\n }\n\n public abstract setDisabled(disabled: boolean): void;\n}\n","import {\n ChangeDetectorRef,\n Directive,\n Inject,\n Input,\n Optional,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n NgControl,\n} from '@angular/forms';\nimport { AuthorizationService } from './authorization.service';\nimport { HasEnablePermission } from './has-enable-permission';\nimport { RXAP_AUTHORIZATION_SCOPE } from './tokens';\n\n@Directive({\n selector: '[formControl][rxapHasEnablePermission],[formControlName][rxapHasEnablePermission]',\n standalone: true,\n})\nexport class FormControlHasEnablePermissionDirective extends HasEnablePermission {\n\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('rxapHasEnablePermission')\n public override identifier!: string;\n\n constructor(\n @Inject(AuthorizationService)\n authorization: AuthorizationService,\n @Inject(ChangeDetectorRef)\n cdr: ChangeDetectorRef,\n @Optional()\n @Inject(RXAP_AUTHORIZATION_SCOPE)\n scope: string,\n @Optional()\n @Inject(NG_VALUE_ACCESSOR)\n valueAccessor: ControlValueAccessor[] | null = null,\n @Inject(NgControl)\n private readonly ngControl: NgControl,\n ) {\n super(authorization, cdr, scope, valueAccessor);\n }\n\n public setDisabled(disabled: boolean) {\n if (this.ngControl.control) {\n if (disabled) {\n this.ngControl.control.disable();\n } else {\n this.ngControl.control.enable();\n }\n }\n }\n}\n","import {\n ChangeDetectorRef,\n Directive,\n HostBinding,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { tap } from 'rxjs/operators';\nimport { AuthorizationService } from './authorization.service';\nimport { RXAP_AUTHORIZATION_SCOPE } from './tokens';\n\n@Directive({\n selector: '[rxapHasWritePermission]',\n standalone: true,\n})\nexport class HasWritePermissionDirective implements OnInit, OnDestroy {\n @Input({\n alias: 'rxapHasWritePermission',\n required: true,\n })\n public identifier!: string;\n @HostBinding('readonly')\n public readonly = false;\n private _subscription?: Subscription;\n\n constructor(\n @Inject(AuthorizationService)\n private readonly authorization: AuthorizationService,\n @Inject(ChangeDetectorRef)\n protected readonly cdr: ChangeDetectorRef,\n @Optional()\n @Inject(RXAP_AUTHORIZATION_SCOPE)\n private readonly scope: string | null = null,\n ) {\n }\n\n public ngOnInit() {\n this._subscription = this.authorization\n .hasPermission$(this.identifier, this.scope || null)\n .pipe(\n tap((hasPermission) => {\n this.readonly = !hasPermission;\n this.cdr.markForCheck();\n }),\n )\n .subscribe();\n }\n\n public ngOnDestroy() {\n this._subscription?.unsubscribe();\n }\n}\n","import {\n ChangeDetectorRef,\n Directive,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport {\n distinctUntilChanged,\n tap,\n} from 'rxjs/operators';\nimport { AuthorizationService } from './authorization.service';\nimport { RXAP_AUTHORIZATION_SCOPE } from './tokens';\n\n@Directive({\n selector: '[rxapIfHasPermission]',\n standalone: true,\n})\nexport class IfHasPermissionDirective implements OnInit, OnDestroy {\n\n @Input({ required: true, alias: 'rxapIfHasPermission' })\n public identifier!: string;\n\n @Input({ alias: 'rxapIfHasPermissionElse' })\n public else?: TemplateRef<any>;\n\n private _subscription?: Subscription;\n\n constructor(\n @Inject(AuthorizationService)\n private readonly authorization: AuthorizationService,\n @Inject(TemplateRef)\n private readonly template: TemplateRef<any>,\n @Inject(ViewContainerRef)\n private readonly viewContainerRef: ViewContainerRef,\n @Inject(ChangeDetectorRef)\n private readonly cdr: ChangeDetectorRef,\n @Optional()\n @Inject(RXAP_AUTHORIZATION_SCOPE)\n private readonly scope: string | null = null,\n ) {\n }\n\n public ngOnInit() {\n this._subscription = this.authorization\n .hasPermission$(this.identifier, this.scope || null)\n .pipe(\n distinctUntilChanged(),\n tap((hasPermission) => {\n this.viewContainerRef.clear();\n if (hasPermission) {\n this.viewContainerRef.createEmbeddedView(this.template);\n } else if (this.else) {\n this.viewContainerRef.createEmbeddedView(this.else);\n }\n this.cdr.markForCheck();\n }),\n )\n .subscribe();\n }\n\n public ngOnDestroy() {\n this._subscription?.unsubscribe();\n }\n}\n","import {\n ChangeDetectorRef,\n Directive,\n Inject,\n Injector,\n INJECTOR,\n Input,\n OnInit,\n Optional,\n} from '@angular/core';\nimport {\n MatButton,\n MatFabButton,\n MatIconButton,\n MatMiniFabButton,\n} from '@angular/material/button';\nimport { AuthorizationService } from './authorization.service';\nimport { HasEnablePermission } from './has-enable-permission';\nimport { RXAP_AUTHORIZATION_SCOPE } from './tokens';\n\ninterface CanDisable {\n disabled: boolean;\n}\n\n@Directive({\n selector: 'button[rxapHasEnablePermission],[mat-button][rxapHasEnablePermission],[mat-raised-button][rxapHasEnablePermission],[mat-stroked-button][rxapHasEnablePermission],[mat-flat-button][rxapHasEnablePermission],[mat-icon-button][rxapHasEnablePermission],[mat-fab][rxapHasEnablePermission],[mat-mini-fab][rxapHasEnablePermission]',\n standalone: true,\n})\nexport class MatButtonHasEnablePermissionDirective extends HasEnablePermission implements OnInit {\n @Input('rxapHasEnablePermission')\n public override identifier!: string;\n\n private _button!: CanDisable;\n\n constructor(\n @Inject(AuthorizationService)\n authorization: AuthorizationService,\n @Inject(ChangeDetectorRef)\n cdr: ChangeDetectorRef,\n @Inject(INJECTOR)\n private readonly injector: Injector,\n @Optional()\n @Inject(RXAP_AUTHORIZATION_SCOPE)\n scope: string,\n ) {\n super(authorization, cdr, scope);\n }\n\n public setDisabled(disabled: boolean): void {\n this._button.disabled = disabled;\n }\n\n override ngOnInit() {\n this._button = this.injector.get<CanDisable>(\n MatButton,\n this.injector.get(MatIconButton, this.injector.get(MatMiniFabButton, this.injector.get(MatFabButton, null))),\n );\n if (!this._button) {\n throw new Error('Could not inject the mat button instance!');\n }\n // must be called after the button is injected\n // the setDisabled method is called in the super.ngOnInit method\n super.ngOnInit();\n }\n\n}\n","import {\n ChangeDetectorRef,\n Directive,\n Inject,\n Input,\n Optional,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\nimport { MatCheckbox } from '@angular/material/checkbox';\nimport { AuthorizationService } from './authorization.service';\nimport { HasEnablePermission } from './has-enable-permission';\nimport { RXAP_AUTHORIZATION_SCOPE } from './tokens';\n\n@Directive({\n selector: 'mat-checkbox[rxapHasEnablePermission]:not([formControl]):not([formControlName])',\n standalone: true,\n})\nexport class MatCheckboxHasEnablePermissionDirective extends HasEnablePermission {\n @Input('rxapHasEnablePermission')\n public override identifier!: string;\n\n constructor(\n @Inject(AuthorizationService)\n authorization: AuthorizationService,\n @Inject(ChangeDetectorRef)\n cdr: ChangeDetectorRef,\n @Inject(MatCheckbox)\n private readonly matCheckbox: MatCheckbox,\n @Optional()\n @Inject(RXAP_AUTHORIZATION_SCOPE)\n scope: string,\n @Optional()\n @Inject(NG_VALUE_ACCESSOR)\n valueAccessor: ControlValueAccessor[] | null = null,\n ) {\n super(authorization, cdr, scope, valueAccessor);\n }\n\n public setDisabled(disabled: boolean) {\n this.matCheckbox.disabled = disabled;\n }\n}\n","import {\n ChangeDetectorRef,\n Directive,\n Inject,\n Input,\n Optional,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\nimport { MatInput } from '@angular/material/input';\nimport { AuthorizationService } from './authorization.service';\nimport { HasEnablePermission } from './has-enable-permission';\nimport { RXAP_AUTHORIZATION_SCOPE } from './tokens';\n\n@Directive({\n selector: '[matInput][rxapHasEnablePermission]:not([formControl]):not([formControlName])',\n standalone: true,\n})\nexport class MatInputHasEnablePermissionDirective extends HasEnablePermission {\n\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('rxapHasEnablePermission')\n public override identifier!: string;\n\n constructor(\n @Inject(AuthorizationService)\n authorization: AuthorizationService,\n @Inject(ChangeDetectorRef)\n cdr: ChangeDetectorRef,\n @Inject(MatInput)\n private readonly matInput: MatInput,\n @Optional()\n @Inject(RXAP_AUTHORIZATION_SCOPE)\n scope: string,\n @Optional()\n @Inject(NG_VALUE_ACCESSOR)\n valueAccessor: ControlValueAccessor[] | null = null,\n ) {\n super(authorization, cdr, scope, valueAccessor);\n }\n\n public setDisabled(disabled: boolean) {\n this.matInput.disabled = disabled;\n }\n}\n","import {\n ChangeDetectorRef,\n Directive,\n Inject,\n Input,\n Optional,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\nimport { MatSelect } from '@angular/material/select';\nimport { AuthorizationService } from './authorization.service';\nimport { HasEnablePermission } from './has-enable-permission';\nimport { RXAP_AUTHORIZATION_SCOPE } from './tokens';\n\n@Directive({\n selector: 'mat-select[rxapHasEnablePermission]:not([formControl]):not([formControlName])',\n standalone: true,\n})\nexport class MatSelectHasEnablePermissionDirective extends HasEnablePermission {\n @Input('rxapHasEnablePermission')\n public override identifier!: string;\n\n constructor(\n @Inject(AuthorizationService)\n authorization: AuthorizationService,\n @Inject(ChangeDetectorRef)\n cdr: ChangeDetectorRef,\n @Inject(MatSelect)\n private readonly matSelect: MatSelect,\n @Optional()\n @Inject(RXAP_AUTHORIZATION_SCOPE)\n scope: string,\n @Optional()\n @Inject(NG_VALUE_ACCESSOR)\n valueAccessor: ControlValueAccessor[] | null = null,\n ) {\n super(authorization, cdr, scope, valueAccessor);\n }\n\n public setDisabled(disabled: boolean) {\n this.matSelect.disabled = disabled;\n }\n}\n","import {\n ChangeDetectorRef,\n Directive,\n Inject,\n Input,\n Optional,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\nimport { MatSlideToggle } from '@angular/material/slide-toggle';\nimport { AuthorizationService } from './authorization.service';\nimport { HasEnablePermission } from './has-enable-permission';\nimport { RXAP_AUTHORIZATION_SCOPE } from './tokens';\n\n@Directive({\n selector: 'mat-slide-toggle[rxapHasEnablePermission]:not([formControl]):not([formControlName])',\n standalone: true,\n})\nexport class MatSlideToggleHasEnablePermissionDirective extends HasEnablePermission {\n @Input('rxapHasEnablePermission')\n public override identifier!: string;\n\n constructor(\n @Inject(AuthorizationService)\n authorization: AuthorizationService,\n @Inject(ChangeDetectorRef)\n cdr: ChangeDetectorRef,\n @Inject(MatSlideToggle)\n private readonly matSlideToggle: MatSlideToggle,\n @Optional()\n @Inject(RXAP_AUTHORIZATION_SCOPE)\n scope: string,\n @Optional()\n @Inject(NG_VALUE_ACCESSOR)\n valueAccessor: ControlValueAccessor[] | null = null,\n ) {\n super(authorization, cdr, scope, valueAccessor);\n }\n\n public setDisabled(disabled: boolean) {\n this.matSlideToggle.disabled = disabled;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { FormControlHasEnablePermissionDirective } from './form-control-has-enable-permission.directive';\nimport { HasWritePermissionDirective } from './has-write-permission.directive';\nimport { IfHasPermissionDirective } from './if-has-permission.directive';\nimport { MatButtonHasEnablePermissionDirective } from './mat-button-has-enable-permission.directive';\nimport { MatCheckboxHasEnablePermissionDirective } from './mat-checkbox-has-enable-permission.directive';\nimport { MatInputHasEnablePermissionDirective } from './mat-input-has-enable-permission.directive';\nimport { MatSelectHasEnablePermissionDirective } from './mat-select-has-enable-permission.directive';\nimport { MatSlideToggleHasEnablePermissionDirective } from './mat-slide-toggle-has-enable-permission.directive';\n\n@NgModule({\n imports: [\n MatButtonHasEnablePermissionDirective,\n MatInputHasEnablePermissionDirective,\n MatSelectHasEnablePermissionDirective,\n MatCheckboxHasEnablePermissionDirective,\n MatSlideToggleHasEnablePermissionDirective,\n FormControlHasEnablePermissionDirective,\n IfHasPermissionDirective,\n HasWritePermissionDirective,\n ],\n exports: [\n MatButtonHasEnablePermissionDirective,\n MatInputHasEnablePermissionDirective,\n MatSelectHasEnablePermissionDirective,\n MatCheckboxHasEnablePermissionDirective,\n MatSlideToggleHasEnablePermissionDirective,\n FormControlHasEnablePermissionDirective,\n IfHasPermissionDirective,\n HasWritePermissionDirective,\n ],\n})\nexport class HasPermissionModule {\n}\n","// region \nexport * from './lib/authorization.service';\nexport * from './lib/form-control-has-enable-permission.directive';\nexport * from './lib/has-enable-permission';\nexport * from './lib/has-permission.module';\nexport * from './lib/has-write-permission.directive';\nexport * from './lib/if-has-permission.directive';\nexport * from './lib/mat-button-has-enable-permission.directive';\nexport * from './lib/mat-checkbox-has-enable-permission.directive';\nexport * from './lib/mat-input-has-enable-permission.directive';\nexport * from './lib/mat-select-has-enable-permission.directive';\nexport * from './lib/mat-slide-toggle-has-enable-permission.directive';\nexport * from './lib/tokens';\n// endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}