๐Ÿ” ngx-smart-permissions

June 15, 2025 ยท View on GitHub

ngx-smart-permissions is a lightweight and smart Angular library for managing role-based and permission-based access control in Angular applications. Supports both standalone components and NgModules.
Built for Angular 17+ & 18+.


โœจ Features

  • โœ… Show/Hide UI based on permissions or roles
  • โœ… Reusable Directives: *ngxHasPermission, *ngxHasRole
  • โœ… Built-in Route Guard for permission-based navigation
  • โœ… Live permission switching (great for testing/admins)
  • โœ… Support for Super Admin
  • โœ… Lazy-loaded module support
  • โœ… Fully compatible with Standalone Components
  • โœ… Easy setup with provideNgxSmartPermissions(...)

๐Ÿ“ฆ Installation

npm install ngx-smart-permissions

๐Ÿ› ๏ธ Setup

1. Register the providers

In main.ts:

import { provideNgxSmartPermissions } from 'ngx-smart-permissions';

bootstrapApplication(AppComponent, {
  providers: [
    provideNgxSmartPermissions({
      redirectTo: '/unauthorized' // optional
    })
  ]
});

Or inside an NgModule:

@NgModule({
  imports: [
    NgxSmartPermissionsModule
  ]
})
export class AppModule {}

๐Ÿง  Usage

โœ… UI Directive: *ngxHasPermission

<!-- Show only if user has "edit-post" permission -->
<button *ngxHasPermission="'edit-post'">Edit</button>

<!-- Show if user has ANY of these -->
<div *ngxHasPermission="['admin', 'editor']">Admin Tools</div>

โœ… Role Directive: *ngxHasRole

<div *ngxHasRole="'admin'">Welcome, Admin</div>

๐Ÿ” Permission Guard

Protect routes by permission:

import { permissionGuard } from 'ngx-smart-permissions';

{
  path: 'admin',
  canActivate: [permissionGuard],
  data: {
    permission: 'access-admin'
  }
}

๐Ÿ”„ Set Permissions (e.g. after login)

In your AuthService or login component:

const permissions = ['view-dashboard', 'edit-user'];
const role = 'admin';
const isSuperAdmin = role === 'admin';

permissionService.switchPermissions(permissions, isSuperAdmin, role);

๐Ÿšซ Access Denied Page

Use redirectTo in provideNgxSmartPermissions() to control redirection for unauthorized access.

provideNgxSmartPermissions({ redirectTo: '/unauthorized' });

๐Ÿงช Testing

Basic unit tests are recommended for your permission logic.
You can spy on PermissionService methods for behavior tests.


๐Ÿ“ File Structure

src/
โ””โ”€โ”€ lib/
    โ”œโ”€โ”€ directives/
    โ”‚   โ”œโ”€โ”€ has-permission.directive.ts
    โ”‚   โ””โ”€โ”€ has-role.directive.ts
    โ”œโ”€โ”€ guards/
    โ”‚   โ””โ”€โ”€ permission.guard.ts
    โ”œโ”€โ”€ permission/
    โ”‚   โ”œโ”€โ”€ permission.service.ts
    โ”‚   โ”œโ”€โ”€ permission.config.ts
    โ”‚   โ””โ”€โ”€ permissions.providers.ts
    โ”œโ”€โ”€ ngx-smart-permissions.module.ts
    โ””โ”€โ”€ public-api.ts

โœ… Compatibility

  • โœ… Angular 17 & 18
  • โœ… Supports both NgModules & Standalone Components
  • โœ… Fully tree-shakable & side-effect free

๐ŸŒ Live Demo

Check out the live demo on GitHub:
๐Ÿ‘‰ ngx-smart-permissions Demo App


๐Ÿ“„ License

MIT ยฉ Rami Shaikha