loopback4-authorization
Version:
ARC authorization extension for loopback-next applications.
50 lines (46 loc) • 1.77 kB
text/typescript
import {Binding, Component, inject, ProviderMap} from '@loopback/core';
import {AuthorizationBindings} from './keys';
import {AuthorizeActionProvider} from './providers/authorization-action.provider';
import {AuthorizationMetadataProvider} from './providers/authorization-metadata.provider';
import {CasbinAuthorizationProvider} from './providers/casbin-authorization-action.provider';
import {UserPermissionsProvider} from './providers/user-permissions.provider';
import {AuthorizationConfig} from './types';
export class AuthorizationComponent implements Component {
providers?: ProviderMap;
bindings?: Binding[] = [];
constructor(
private readonly config?: AuthorizationConfig,
(AuthorizationBindings.PERMISSION, {optional: true})
private readonly permission?: unknown,
) {
(AuthorizationBindings.CONFIG)
this.providers = {
[AuthorizationBindings.AUTHORIZE_ACTION.key]: AuthorizeActionProvider,
[AuthorizationBindings.CASBIN_AUTHORIZE_ACTION.key]:
CasbinAuthorizationProvider,
[AuthorizationBindings.METADATA.key]: AuthorizationMetadataProvider,
[AuthorizationBindings.USER_PERMISSIONS.key]: UserPermissionsProvider,
};
if (!this.permission) {
this.bindings?.push(
Binding.bind(AuthorizationBindings.PERMISSION).to(null),
);
}
if (
this.config?.allowAlwaysPaths &&
this.config?.allowAlwaysPaths?.length > 0
) {
this.bindings?.push(
Binding.bind(AuthorizationBindings.PATHS_TO_ALLOW_ALWAYS).to(
this.config.allowAlwaysPaths,
),
);
} else {
this.bindings?.push(
Binding.bind(AuthorizationBindings.PATHS_TO_ALLOW_ALWAYS).to([
'/explorer',
]),
);
}
}
}