{"version":3,"file":"ngx-smart-permissions.mjs","sources":["../../../projects/ngx-smart-permissions/src/lib/permission/permission.service.ts","../../../projects/ngx-smart-permissions/src/lib/directives/has-permission.directive.ts","../../../projects/ngx-smart-permissions/src/lib/directives/has-role.directive.ts","../../../projects/ngx-smart-permissions/src/lib/ngx-smart-permissions.module.ts","../../../projects/ngx-smart-permissions/src/lib/permission/permissions.providers.ts","../../../projects/ngx-smart-permissions/src/lib/guards/permission.guard.ts","../../../projects/ngx-smart-permissions/src/public-api.ts","../../../projects/ngx-smart-permissions/src/ngx-smart-permissions.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class PermissionService {\r\n  private _permissions$ = new BehaviorSubject<Set<string>>(new Set());\r\n  private _isSuperRole$ = new BehaviorSubject<boolean>(false);\r\n  private _role$ = new BehaviorSubject<string | null>(null); // ✅ جديد\r\n\r\n  permissionsChanged$ = this._permissions$.asObservable();\r\n roleChanged$ = this._role$.asObservable();       // 🔔 تستخدمه الدايركتيف\r\n\r\n  loadPermissions(perms: string[]): void {\r\n    this._permissions$.next(new Set(perms));\r\n  }\r\n\r\n  setSuperRole(active: boolean): void {\r\n    this._isSuperRole$.next(active);\r\n  }\r\n\r\n  switchPermissions(perms: string[], superMode: boolean = false, role: string | null = null): void {\r\n    this.loadPermissions(perms);\r\n    this.setSuperRole(superMode);\r\n    if (role) this.setRole(role); // ✅\r\n  }\r\n\r\n  hasPermission(permission: string | string[]): boolean {\r\n    if (this.isSuper()) return true;\r\n    const currentPerms = this._permissions$.getValue();\r\n    return Array.isArray(permission)\r\n      ? permission.some(p => currentPerms.has(p))\r\n      : currentPerms.has(permission);\r\n  }\r\n\r\n  hasAnyPermission(perms: string[]): boolean {\r\n    if (this.isSuper()) return true;\r\n    const currentPerms = this._permissions$.getValue();\r\n    return perms.some(p => currentPerms.has(p));\r\n  }\r\n\r\n  hasAllPermissions(perms: string[]): boolean {\r\n    if (this.isSuper()) return true;\r\n    const currentPerms = this._permissions$.getValue();\r\n    return perms.every(p => currentPerms.has(p));\r\n  }\r\n\r\n\r\n  getPermissions(): string[] {\r\n    return Array.from(this._permissions$.getValue());\r\n  }\r\n\r\n  isSuper(): boolean {\r\n    return this._isSuperRole$.getValue();\r\n  }\r\n\r\n\r\n\r\n\r\nsetRole(role: string): void {\r\n  this._role$.next(role);\r\n}\r\n\r\ngetRole(): string {\r\n  return this._role$.getValue()||'';\r\n}\r\n\r\nhasRole(requiredRole: string | string[]): boolean {\r\n  const currentRole = this.getRole();\r\n  return Array.isArray(requiredRole)\r\n    ? requiredRole.includes(currentRole)\r\n    : currentRole === requiredRole;\r\n}\r\n\r\n}\r\n","import {\r\n  Directive,\r\n  Input,\r\n  TemplateRef,\r\n  ViewContainerRef,\r\n  OnInit,\r\n  OnDestroy,\r\n  ChangeDetectorRef\r\n} from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { PermissionService } from '../permission/permission.service';\r\n\r\n@Directive({\r\n  selector: '[ngxHasPermission]',\r\n  standalone: true\r\n})\r\nexport class HasPermissionDirective implements OnInit, OnDestroy {\r\n  @Input('ngxHasPermission') required: string | string[] = '';\r\n\r\n  private sub?: Subscription;\r\n\r\n  constructor(\r\n    private tpl: TemplateRef<any>,\r\n    private vcr: ViewContainerRef,\r\n    private permissionService: PermissionService,\r\n    private cdRef: ChangeDetectorRef\r\n  ) {}\r\n\r\n  ngOnInit() {\r\n    this.sub = this.permissionService.permissionsChanged$.subscribe(() => {\r\n      this.updateView();\r\n    });\r\n\r\n    this.updateView();\r\n  }\r\n\r\n  private updateView() {\r\n    const has = Array.isArray(this.required)\r\n      ? this.permissionService.hasAnyPermission(this.required)\r\n      : this.permissionService.hasPermission(this.required);\r\n\r\n    this.vcr.clear();\r\n    if (has) {\r\n      this.vcr.createEmbeddedView(this.tpl);\r\n    }\r\n\r\n    // ✅ Force Angular to detect changes immediately\r\n    this.cdRef.markForCheck(); // or detectChanges() if needed\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.sub?.unsubscribe();\r\n  }\r\n}\r\n","import {\r\n  Directive,\r\n  Input,\r\n  TemplateRef,\r\n  ViewContainerRef,\r\n  OnInit,\r\n  OnDestroy\r\n} from '@angular/core';\r\nimport { PermissionService } from '../permission/permission.service';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Directive({\r\n  selector: '[ngxHasRole]',\r\n  standalone: true\r\n})\r\nexport class HasRoleDirective implements OnInit, OnDestroy {\r\n  @Input('ngxHasRole') required: string | string[] = '';\r\n\r\n  private sub?: Subscription;\r\n\r\n  constructor(\r\n    private tpl: TemplateRef<any>,\r\n    private vcr: ViewContainerRef,\r\n    private permissionService: PermissionService\r\n  ) {}\r\n\r\n  ngOnInit() {\r\n    this.sub = this.permissionService.roleChanged$.subscribe(() => {\r\n      this.updateView();\r\n    });\r\n    this.updateView();\r\n  }\r\n\r\n  private updateView() {\r\n    const has = this.permissionService.hasRole(this.required);\r\n    this.vcr.clear();\r\n    if (has) {\r\n      this.vcr.createEmbeddedView(this.tpl);\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.sub?.unsubscribe();\r\n  }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { HasPermissionDirective } from './directives/has-permission.directive';\r\n import { HasRoleDirective } from './directives/has-role.directive';\r\n@NgModule({\r\n  imports: [HasPermissionDirective,HasRoleDirective],   \r\n   exports: [HasPermissionDirective,HasRoleDirective]\r\n})\r\nexport class NgxSmartPermissionsModule {}\r\n","import {\r\n  EnvironmentProviders,\r\n  importProvidersFrom,\r\n  makeEnvironmentProviders\r\n} from '@angular/core';\r\n\r\nimport { NgxSmartPermissionsModule } from '../ngx-smart-permissions.module';\r\nimport { NgxSmartPermissionsConfig } from './permission.config';\r\n\r\nlet GLOBAL_CONFIG: NgxSmartPermissionsConfig = {\r\n  redirectTo: '/access-denied'\r\n};\r\n\r\nexport function setPermissionsConfig(config: NgxSmartPermissionsConfig) {\r\n  GLOBAL_CONFIG = { ...GLOBAL_CONFIG, ...config };\r\n}\r\n\r\nexport function getPermissionsConfig(): NgxSmartPermissionsConfig {\r\n  return GLOBAL_CONFIG;\r\n}\r\n\r\nexport function provideNgxSmartPermissions(config?: NgxSmartPermissionsConfig): EnvironmentProviders {\r\n  setPermissionsConfig(config || {});\r\n  return makeEnvironmentProviders([\r\n    importProvidersFrom(NgxSmartPermissionsModule)\r\n  ]);\r\n}\r\n","import { inject } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, CanActivateFn, Router, RouterStateSnapshot } from '@angular/router';\r\nimport { PermissionService } from '../permission/permission.service';\r\nimport { getPermissionsConfig } from '../permission/permissions.providers';\r\n \r\nexport const permissionGuard: CanActivateFn = (\r\n  route: ActivatedRouteSnapshot,\r\n  state: RouterStateSnapshot\r\n) => {\r\n  const permissionService = inject(PermissionService);\r\n  const router = inject(Router);\r\n\r\n  const required = route.data?.['permission']; // ممكن تكون string أو array\r\n  const config = getPermissionsConfig();\r\n\r\n  const hasPermission = Array.isArray(required)\r\n    ? permissionService.hasAnyPermission(required)\r\n    : permissionService.hasPermission(required);\r\n\r\n  if (hasPermission) {\r\n    return true;\r\n  }\r\n\r\n  const redirectPath = route.data?.['redirectTo'] || config.redirectTo || '/access-denied';\r\n  return router.parseUrl(redirectPath);\r\n};\r\n","// ✅ Directives\r\nexport * from './lib/directives/has-permission.directive';\r\nexport * from './lib/directives/has-role.directive';\r\n\r\n// ✅ Guards\r\nexport * from './lib/guards/permission.guard';\r\n\r\n// ✅ Core Permission System\r\nexport * from './lib/permission/permission.service';\r\nexport * from './lib/permission/permission.config';\r\nexport * from './lib/permission/permissions.providers';\r\n\r\n// ✅ Optional: Angular compatibility module (for legacy usage)\r\nexport * from './lib/ngx-smart-permissions.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.PermissionService"],"mappings":"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"}