UNPKG

@ngx-security/permissions

Version:

Angular Security Permissions Module

1 lines 10.9 kB
{"version":3,"file":"ngx-security-permissions.mjs","sources":["../../../projects/permissions/src/lib/subject-permissions.provider.ts","../../../projects/permissions/src/lib/is-permitted/is-permitted.directive.ts","../../../projects/permissions/src/lib/is-permitted/is-permitted.pipe.ts","../../../projects/permissions/src/lib/permissions.module.ts","../../../projects/permissions/src/lib/permissions.provider.ts","../../../projects/permissions/src/ngx-security-permissions.ts"],"sourcesContent":["import { Injectable, OnDestroy } from '@angular/core';\nimport { Subject, SubjectDetails, SubjectService } from '@ngx-security/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { newTrie, ShiroTrie } from 'shiro-trie';\n\nexport abstract class SubjectPermissionsProvider {\n\n private trie: ShiroTrie;\n\n abstract permissions$: Observable<string[]>;\n\n abstract getPermissions(): string[];\n\n protected constructor() {\n this.trie = newTrie();\n }\n\n apply(): void {\n this.trie.reset();\n this.trie.add(...this.getPermissions());\n }\n\n isPermittedAsync(permission: string): Observable<boolean> {\n return this.permissions$.pipe(\n map(() => this._isPermitted(permission))\n );\n }\n\n isPermitted(permission: string): boolean {\n return this._isPermitted(permission);\n }\n\n protected _isPermitted(permission: string) {\n return this.trie.check(permission);\n }\n}\n\n@Injectable()\nexport class StandardSubjectPermissionsProvider<D extends SubjectDetails, S extends Subject<D>> extends SubjectPermissionsProvider {\n\n permissions$: Observable<string[]> = this.subject.authorities$;\n\n constructor(private subject: SubjectService<D, S>) {\n super();\n }\n\n getPermissions(): string[] {\n return this.subject.getAuthorities();\n }\n}\n\n@Injectable()\nexport class UpdatableSubjectPermissionsProvider extends SubjectPermissionsProvider implements OnDestroy {\n\n private permissions: BehaviorSubject<string[]> = new BehaviorSubject([]);\n\n permissions$: Observable<string[]> = this.permissions.asObservable();\n\n constructor() {\n super();\n this.apply();\n }\n\n ngOnDestroy(): void {\n this.permissions.complete();\n }\n\n getPermissions(): string[] {\n return this.permissions.getValue();\n }\n\n update(permissions: string[]): void {\n this.permissions.next(permissions);\n }\n}\n","import { Directive, ElementRef, EmbeddedViewRef, Input, OnDestroy, OnInit, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { SubjectPermissionsProvider } from '../subject-permissions.provider';\n\n@Directive({selector: '[isPermitted]'})\nexport class IsPermittedDirective implements OnInit, OnDestroy {\n\n private permission: string = null;\n\n private sub: Subscription;\n private embeddedViewRef: EmbeddedViewRef<any> = null;\n\n @Input()\n set isPermitted(permission: string) {\n this.permission = permission;\n this.updateView();\n }\n\n constructor(private element: ElementRef, private templateRef: TemplateRef<any>,\n private viewContainer: ViewContainerRef, private subject: SubjectPermissionsProvider) {\n }\n\n ngOnInit(): void {\n this.sub = this.subject.permissions$.subscribe(() => this.updateView());\n }\n\n ngOnDestroy(): void {\n if (this.sub) {\n this.sub.unsubscribe();\n }\n }\n\n private updateView() {\n if (!this.subject.isPermitted(this.permission)) {\n this.viewContainer.clear();\n this.embeddedViewRef = null;\n } else if (!this.embeddedViewRef) {\n this.embeddedViewRef = this.viewContainer.createEmbeddedView(this.templateRef);\n }\n }\n}\n","import { ChangeDetectorRef, OnDestroy, Pipe, PipeTransform } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { SubjectPermissionsProvider } from '../subject-permissions.provider';\n\n@Pipe({name: 'isPermitted', pure: false})\nexport class IsPermittedPipe implements PipeTransform, OnDestroy {\n\n private isPermitted: boolean = null;\n\n private sub: Subscription = null;\n\n constructor(private ref: ChangeDetectorRef, private subject: SubjectPermissionsProvider) {\n }\n\n transform(permission: string, permissionAsArg: string): boolean {\n permission = permissionAsArg || permission;\n this.clear();\n this.sub = this.subject.isPermittedAsync(permission).subscribe((isPermitted) => {\n if (this.isPermitted !== isPermitted) {\n this.isPermitted = isPermitted;\n this.ref.markForCheck();\n }\n });\n return this.isPermitted;\n }\n\n ngOnDestroy(): void {\n this.clear();\n }\n\n private clear(): void {\n this.isPermitted = null;\n if (this.sub) {\n this.sub.unsubscribe();\n this.sub = null;\n }\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { IsPermittedDirective } from './is-permitted/is-permitted.directive';\nimport { IsPermittedPipe } from './is-permitted/is-permitted.pipe';\n\n@NgModule({\n imports: [\n IsPermittedDirective,\n IsPermittedPipe\n ],\n exports: [\n IsPermittedDirective,\n IsPermittedPipe\n ]\n})\nexport class SecurityPermissionsModule {\n}\n","import { EnvironmentProviders, makeEnvironmentProviders, Provider } from '@angular/core';\nimport { StandardSubjectService, SubjectService } from '@ngx-security/core';\n\nimport { StandardSubjectPermissionsProvider, SubjectPermissionsProvider } from './subject-permissions.provider';\n\nexport interface SecurityPermissionsModuleConfig {\n subject?: Provider;\n subjectPermissions?: Provider;\n}\n\nexport function provideSecurityPermissions(config: SecurityPermissionsModuleConfig = {}): EnvironmentProviders {\n return makeEnvironmentProviders([\n config.subject || {provide: SubjectService, useClass: StandardSubjectService},\n config.subjectPermissions || {provide: SubjectPermissionsProvider, useClass: StandardSubjectPermissionsProvider}\n ]);\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.SubjectPermissionsProvider"],"mappings":";;;;;;;;MAMsB,0BAA0B,CAAA;AAQ9C,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE;;IAGvB,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;QACjB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;;AAGzC,IAAA,gBAAgB,CAAC,UAAkB,EAAA;AACjC,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAC3B,GAAG,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CACzC;;AAGH,IAAA,WAAW,CAAC,UAAkB,EAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;;AAG5B,IAAA,YAAY,CAAC,UAAkB,EAAA;QACvC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;;AAErC;AAGK,MAAO,kCAAmF,SAAQ,0BAA0B,CAAA;AAIhI,IAAA,WAAA,CAAoB,OAA6B,EAAA;AAC/C,QAAA,KAAK,EAAE;QADW,IAAO,CAAA,OAAA,GAAP,OAAO;AAF3B,QAAA,IAAA,CAAA,YAAY,GAAyB,IAAI,CAAC,OAAO,CAAC,YAAY;;IAM9D,cAAc,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;;+GAT3B,kCAAkC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAlC,kCAAkC,EAAA,CAAA,CAAA;;4FAAlC,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAD9C;;AAeK,MAAO,mCAAoC,SAAQ,0BAA0B,CAAA;AAMjF,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;AALD,QAAA,IAAA,CAAA,WAAW,GAA8B,IAAI,eAAe,CAAC,EAAE,CAAC;AAExE,QAAA,IAAA,CAAA,YAAY,GAAyB,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;QAIlE,IAAI,CAAC,KAAK,EAAE;;IAGd,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;;IAG7B,cAAc,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;;AAGpC,IAAA,MAAM,CAAC,WAAqB,EAAA;AAC1B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;;+GApBzB,mCAAmC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAnC,mCAAmC,EAAA,CAAA,CAAA;;4FAAnC,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAD/C;;;MC9CY,oBAAoB,CAAA;IAO/B,IACI,WAAW,CAAC,UAAkB,EAAA;AAChC,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;QAC5B,IAAI,CAAC,UAAU,EAAE;;AAGnB,IAAA,WAAA,CAAoB,OAAmB,EAAU,WAA6B,EAC1D,aAA+B,EAAU,OAAmC,EAAA;QAD5E,IAAO,CAAA,OAAA,GAAP,OAAO;QAAsB,IAAW,CAAA,WAAA,GAAX,WAAW;QACxC,IAAa,CAAA,aAAA,GAAb,aAAa;QAA4B,IAAO,CAAA,OAAA,GAAP,OAAO;QAZ5D,IAAU,CAAA,UAAA,GAAW,IAAI;QAGzB,IAAe,CAAA,eAAA,GAAyB,IAAI;;IAYpD,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;;IAGzE,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,GAAG,EAAE;AACZ,YAAA,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE;;;IAIlB,UAAU,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AAC9C,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAC1B,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;;AACtB,aAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AAChC,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;;;+GAhCvE,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,0BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC,SAAS;mBAAC,EAAC,QAAQ,EAAE,eAAe,EAAC;8KAShC,WAAW,EAAA,CAAA;sBADd;;;MCPU,eAAe,CAAA;IAM1B,WAAoB,CAAA,GAAsB,EAAU,OAAmC,EAAA;QAAnE,IAAG,CAAA,GAAA,GAAH,GAAG;QAA6B,IAAO,CAAA,OAAA,GAAP,OAAO;QAJnD,IAAW,CAAA,WAAA,GAAY,IAAI;QAE3B,IAAG,CAAA,GAAA,GAAiB,IAAI;;IAKhC,SAAS,CAAC,UAAkB,EAAE,eAAuB,EAAA;AACnD,QAAA,UAAU,GAAG,eAAe,IAAI,UAAU;QAC1C,IAAI,CAAC,KAAK,EAAE;AACZ,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW,KAAI;AAC7E,YAAA,IAAI,IAAI,CAAC,WAAW,KAAK,WAAW,EAAE;AACpC,gBAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;;AAE3B,SAAC,CAAC;QACF,OAAO,IAAI,CAAC,WAAW;;IAGzB,WAAW,GAAA;QACT,IAAI,CAAC,KAAK,EAAE;;IAGN,KAAK,GAAA;AACX,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,IAAI,CAAC,GAAG,EAAE;AACZ,YAAA,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE;AACtB,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI;;;+GA7BR,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,0BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA,CAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA,EAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,EAAC;;;MCU3B,yBAAyB,CAAA;+GAAzB,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,YARlC,oBAAoB;AACpB,YAAA,eAAe,aAGf,oBAAoB;YACpB,eAAe,CAAA,EAAA,CAAA,CAAA;gHAGN,yBAAyB,EAAA,CAAA,CAAA;;4FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAVrC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,oBAAoB;wBACpB;AACD,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,oBAAoB;wBACpB;AACD;AACF,iBAAA;;;ACJe,SAAA,0BAA0B,CAAC,MAAA,GAA0C,EAAE,EAAA;AACrF,IAAA,OAAO,wBAAwB,CAAC;QAC9B,MAAM,CAAC,OAAO,IAAI,EAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,sBAAsB,EAAC;QAC7E,MAAM,CAAC,kBAAkB,IAAI,EAAC,OAAO,EAAE,0BAA0B,EAAE,QAAQ,EAAE,kCAAkC;AAChH,KAAA,CAAC;AAEJ;;AChBA;;AAEG;;;;"}