Skip to content

API Reference ​

Complete reference for all public exports from ng-ability.

Setup ​

provideAbilities() ​

Configures ng-ability in a standalone Angular application.

typescript
// With ability context
provideAbilities(contextClass: Type<AbilityContext<S>>, abilities: Type<Ability<S>>[]): EnvironmentProviders

// Without ability context (context provided elsewhere)
provideAbilities(abilities: Type<Ability<any>>[]): EnvironmentProviders

Example:

typescript
bootstrapApplication(AppComponent, {
  providers: [
    provideAbilities(AbilityUserContext, [ArticleAbility, AdminAbility]),
  ],
})

NgAbilityModule.withAbilities() deprecated ​

NgModule-based setup. Use provideAbilities() for new projects.

typescript
NgAbilityModule.withAbilities(
  contextClass: Type<AbilityContext<S>>,
  abilities: Type<Ability<S>>[],
): ModuleWithProviders<NgAbilityModule>

Service ​

NgAbilityService ​

The main service for checking permissions programmatically.

typescript
class NgAbilityService {
  can(matcher: AbilityMatcher, action: string, thing?: unknown): boolean
  can(thing: object, action: string): boolean
}

Inject with:

typescript
readonly #ability = inject(NgAbilityService)

Overloads:

SignatureDescription
can(stringKey, action)Check by string matcher, no entity
can(stringKey, action, thing)Check by string matcher with entity
can(ClassCtor, action)Check by class constructor, no entity
can(ClassCtor, action, thing)Check by class constructor with entity
can(instance, action)Check by entity instance (inferred matcher)
can(fn, action, thing?)Check by function matcher

Template ​

CanPipe ​

Impure pipe for permission checks in templates.

typescript
{{ matcher | can: action }}
{{ matcher | can: action : thing }}

Import:

typescript
import { CanPipe } from 'ng-ability'

Examples:

html
@if ('Article' | can: 'create') { ... }
@if (article | can: 'edit') { ... }
@if ('Article' | can: 'edit' : draftArticle) { ... }

CanDirective ​

Structural directive for conditional rendering based on permissions.

typescript
*can="[matcher, action]"
*can="[matcher, action, thing]"
*can="[matcher, action]; else tmpl"
*can="[matcher, action, thing]; else tmpl"

Import:

typescript
import { CanDirective } from 'ng-ability'

Examples:

html
<div *can="['Article', 'create']">...</div>
<div *can="['Article', 'edit', article]; else readOnly">...</div>
<ng-template #readOnly>...</ng-template>

Route Guards ​

canActivateAbility() ​

Returns a CanActivateFn guard.

typescript
canActivateAbility(matcher, action): CanActivateFn
canActivateAbility(matcher, action, thingResolver): CanActivateFn

Parameters:

ParameterTypeDescription
matcherstring | Class | FunctionAbility matcher
actionstringAction to check
thingResolver(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => unknownOptional resolver for the entity

canActivateChildAbility() ​

Returns a CanActivateChildFn guard. Same signature as canActivateAbility.


canMatchAbility() ​

Returns a CanMatchFn guard. Same signature as canActivateAbility.


Decorators ​

@AbilityFor(...matchers) ​

Registers one or more matchers for an ability class.

typescript
@AbilityFor(matcher1, matcher2, ...): ClassDecorator

Matcher types:

TypeExampleMatch logic
String'Article'matcher === passedMatcher
ClassArticlething instanceof Article
SymbolGlobalAbilityMakes this a global ability
Function(obj) => obj.__typename === 'Article'fn(thing) === true

Interfaces ​

Ability<S, O> ​

Interface your ability classes must implement.

typescript
interface Ability<S, O = unknown> {
  can(subject: S | null, action: string, thing?: O): boolean
}

AbilityContext<S> ​

Interface your ability context service must implement.

typescript
interface AbilityContext<S> {
  abilityContext: Signal<S>
}

AbilityActions ​

Augment via declaration merging to register type-safe actions per matcher key.

typescript
declare module 'ng-ability' {
  interface AbilityActions {
    Article: 'view' | 'create' | 'edit' | 'delete'
    AdminArea: 'view'
  }
}

AbilityActionsOf<K> ​

Implement on entity classes to link them to their registered AbilityActions key.

typescript
class Article implements AbilityActionsOf<'Article'> { ... }

This enables TypeScript to narrow the allowed actions when passing the class constructor or its instances to can().


Symbols ​

GlobalAbility ​

A unique symbol used as a matcher to mark an ability as a global ability.

typescript
import { GlobalAbility } from 'ng-ability'

@AbilityFor(GlobalAbility)
export class MaintenanceModeAbility implements Ability<User> { ... }

Global abilities run before all specific abilities. All global abilities must return true for any specific ability to be checked.


Injection Tokens ​

ABILITY_CONTEXT ​

The injection token used to provide AbilityContext. Typically managed by provideAbilities().

ABILITY ​

A multi-provider injection token used to provide individual ability classes. Typically managed by provideAbilities().

Released under the MIT License.