{"version":3,"file":"nebular-security.mjs","sources":["../../../src/framework/security/security.options.ts","../../../src/framework/security/services/acl.service.ts","../../../src/framework/security/services/role.provider.ts","../../../src/framework/security/services/access-checker.service.ts","../../../src/framework/security/directives/is-granted.directive.ts","../../../src/framework/security/security.module.ts","../../../src/framework/security/public_api.ts","../../../src/framework/security/nebular-security.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport interface NbAclRole {\n  parent?: string,\n  [permission: string]: string|string[]|undefined,\n}\n\nexport interface NbAccessControl {\n  [role: string]: NbAclRole,\n}\n\nexport interface NbAclOptions {\n  accessControl?: NbAccessControl,\n}\n\nexport const NB_SECURITY_OPTIONS_TOKEN = new InjectionToken<NbAclOptions>('Nebular Security Options');\n","/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nimport { Inject, Injectable, Optional } from '@angular/core';\nimport { NB_SECURITY_OPTIONS_TOKEN, NbAclOptions, NbAclRole, NbAccessControl } from '../security.options';\n\nconst shallowObjectClone = (o) => Object.assign({}, o);\nconst shallowArrayClone = (a) => Object.assign([], a);\nconst popParent = (abilities) => {\n  const parent = abilities.parent;\n  delete abilities.parent;\n  return parent;\n};\n\n/**\n * Common acl service.\n */\n@Injectable()\nexport class NbAclService {\n  private static readonly ANY_RESOURCE = '*';\n\n  private state: NbAccessControl = {};\n\n  constructor(@Optional() @Inject(NB_SECURITY_OPTIONS_TOKEN) protected settings: NbAclOptions = {}) {\n    if (settings.accessControl) {\n      this.setAccessControl(settings.accessControl);\n    }\n  }\n\n  /**\n   * Set/Reset ACL list\n   * @param {NbAccessControl} list\n   */\n  setAccessControl(list: NbAccessControl) {\n    for (const [role, value] of Object.entries(list)) {\n      const abilities = shallowObjectClone(value);\n      const parent = popParent(abilities);\n      this.register(role, parent, abilities);\n    }\n  }\n\n  /**\n   * Register a new role with a list of abilities (permission/resources combinations)\n   * @param {string} role\n   * @param {string} parent\n   * @param {[permission: string]: string|string[]} abilities\n   */\n  register(role: string, parent: string = null, abilities: { [permission: string]: string | string[] } = {}) {\n    this.validateRole(role);\n\n    this.state[role] = {\n      parent: parent,\n    };\n\n    for (const [permission, value] of Object.entries(abilities)) {\n      const resources = typeof value === 'string' ? [value] : value;\n      this.allow(role, permission, shallowArrayClone(resources));\n    }\n  }\n\n  /**\n   * Allow a permission for specific resources to a role\n   * @param {string} role\n   * @param {string} permission\n   * @param {string | string[]} resource\n   */\n  allow(role: string, permission: string, resource: string | string[]) {\n    this.validateRole(role);\n\n    if (!this.getRole(role)) {\n      this.register(role, null, {});\n    }\n\n    resource = typeof resource === 'string' ? [resource] : resource;\n\n    let resources = shallowArrayClone(this.getRoleResources(role, permission));\n    resources = resources.concat(resource);\n\n    this.state[role][permission] = resources.filter((item, pos) => resources.indexOf(item) === pos);\n  }\n\n  /**\n   * Check whether the role has a permission to a resource\n   * @param {string} role\n   * @param {string} permission\n   * @param {string} resource\n   * @returns {boolean}\n   */\n  can(role: string, permission: string, resource: string) {\n    this.validateResource(resource);\n\n    const parentRole = this.getRoleParent(role);\n    const parentCan = parentRole && this.can(this.getRoleParent(role), permission, resource);\n    return parentCan || this.exactCan(role, permission, resource);\n  }\n\n  private getRole(role: string): NbAclRole {\n    return this.state[role];\n  }\n\n  private validateRole(role: string) {\n    if (!role) {\n      throw new Error('NbAclService: role name cannot be empty');\n    }\n  }\n\n  private validateResource(resource: string) {\n    if (!resource || [NbAclService.ANY_RESOURCE].includes(resource)) {\n      throw new Error(`NbAclService: cannot use empty or bulk '*' resource placeholder with 'can' method`);\n    }\n  }\n\n  private exactCan(role: string, permission: string, resource: string) {\n    const resources = this.getRoleResources(role, permission);\n    return resources.includes(resource) || resources.includes(NbAclService.ANY_RESOURCE);\n  }\n\n  private getRoleResources(role: string, permission: string): string[] {\n    return this.getRoleAbilities(role)[permission] || [];\n  }\n\n  private getRoleAbilities(role: string): { [permission: string]: string[] } {\n    const abilities = shallowObjectClone(this.state[role] || {});\n    popParent(shallowObjectClone(this.state[role] || {}));\n    return abilities;\n  }\n\n  private getRoleParent(role: string): string {\n    return this.state[role] ? this.state[role].parent : null;\n  }\n}\n","/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nimport { Observable } from 'rxjs';\n\nexport abstract class NbRoleProvider {\n\n  /**\n   * Returns current user role\n   * @returns {Observable<string | string[]>}\n   */\n  abstract getRole(): Observable<string|string[]>;\n}\n","/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nimport { Injectable } from '@angular/core';\nimport { NbRoleProvider } from './role.provider';\nimport { NbAclService } from './acl.service';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n/**\n * Access checker service.\n *\n * Injects `NbRoleProvider` to determine current user role, and checks access permissions using `NbAclService`\n */\n@Injectable()\nexport class NbAccessChecker {\n\n  constructor(protected roleProvider: NbRoleProvider, protected acl: NbAclService) {\n  }\n\n  /**\n   * Checks whether access is granted or not\n   *\n   * @param {string} permission\n   * @param {string} resource\n   * @returns {Observable<boolean>}\n   */\n  isGranted(permission: string, resource: string): Observable<boolean> {\n    return this.roleProvider.getRole()\n      .pipe(\n        map((role: string|string[]) => Array.isArray(role) ? role : [role]),\n        map((roles: string[]) => {\n          return roles.some(role => this.acl.can(role, permission, resource));\n        }),\n      );\n  }\n}\n","import { Directive, Input, OnDestroy, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { takeUntil } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\n\nimport { NbAccessChecker } from '../services/access-checker.service';\n\n@Directive({\n    selector: '[nbIsGranted]',\n    standalone: false\n})\nexport class NbIsGrantedDirective implements OnDestroy {\n\n  private destroy$ = new Subject<void>();\n\n  private hasView = false;\n\n  constructor(private templateRef: TemplateRef<any>,\n              private viewContainer: ViewContainerRef,\n              private accessChecker: NbAccessChecker) {\n  }\n\n  @Input() set nbIsGranted([permission, resource]: [string, string]) {\n\n    this.accessChecker.isGranted(permission, resource)\n      .pipe(\n        takeUntil(this.destroy$),\n      )\n      .subscribe((can: boolean) => {\n        if (can && !this.hasView) {\n          this.viewContainer.createEmbeddedView(this.templateRef);\n          this.hasView = true;\n        } else if (!can && this.hasView) {\n          this.viewContainer.clear();\n          this.hasView = false;\n        }\n      });\n  }\n\n  ngOnDestroy() {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { NB_SECURITY_OPTIONS_TOKEN, NbAclOptions } from './security.options';\nimport { NbAclService } from './services/acl.service';\nimport { NbAccessChecker } from './services/access-checker.service';\nimport { NbIsGrantedDirective } from './directives/is-granted.directive';\n\n@NgModule({\n  imports: [\n    CommonModule,\n  ],\n  declarations: [\n    NbIsGrantedDirective,\n  ],\n  exports: [\n    NbIsGrantedDirective,\n  ],\n})\nexport class NbSecurityModule {\n  static forRoot(nbSecurityOptions?: NbAclOptions): ModuleWithProviders<NbSecurityModule> {\n    return {\n      ngModule: NbSecurityModule,\n      providers: [\n        { provide: NB_SECURITY_OPTIONS_TOKEN, useValue: nbSecurityOptions },\n        NbAclService,\n        NbAccessChecker,\n      ],\n    };\n  }\n}\n","/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nexport * from './security.options';\nexport * from './security.module';\nexport * from './services/acl.service';\nexport * from './services/access-checker.service';\nexport * from './services/role.provider';\nexport * from './directives/is-granted.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.NbRoleProvider","i2.NbAclService","i1.NbAccessChecker"],"mappings":"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"}