UNPKG

@alauda-fe/common

Version:

Alauda frontend team common codes.

59 lines 7.53 kB
import { Inject, Injectable, InjectionToken, Optional } from '@angular/core'; import { map } from 'rxjs'; import { FeatureGateService } from '../services/feature-gate.service'; import { SilentlyNavigateService } from '../services/silently-navigate.service'; import * as i0 from "@angular/core"; import * as i1 from "../services/feature-gate.service"; import * as i2 from "../services/silently-navigate.service"; export const DEFAULT_FEATURE_FORBIDDEN_URL = 'feature-forbidden'; export const GET_CURRENT_CLUSTER = new InjectionToken('Get current cluster function'); /** * ```ts * data: { * path: 'home', * canActivate: [ FeatureGuard ], * data: { featureName: 'ace3', guard_url: 'xxx' } * } * ``` */ export class FeatureGuard { constructor(featureGate, silentlyNavigate, getCluster) { this.featureGate = featureGate; this.silentlyNavigate = silentlyNavigate; this.getCluster = getCluster; } canActivateChild(childRoute, state) { return this.canActivate(childRoute, state); } canActivate(route, state) { const data = { featureName: '', guard_url: DEFAULT_FEATURE_FORBIDDEN_URL, negate: false, ...route.data, }; let currentCluster; if (this.getCluster) { currentCluster = this.getCluster(route); } return this.featureGate[data.negate ? 'isNegateEnabled' : 'isEnabled'](data.featureName, currentCluster).pipe(map(enabled => { if (enabled) return true; const errorUrl = `${data.guard_url}/${data.featureName}`; this.silentlyNavigate.navigate(state.url, errorUrl); return false; })); } static { this.ɵfac = function FeatureGuard_Factory(t) { return new (t || FeatureGuard)(i0.ɵɵinject(i1.FeatureGateService), i0.ɵɵinject(i2.SilentlyNavigateService), i0.ɵɵinject(GET_CURRENT_CLUSTER, 8)); }; } static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: FeatureGuard, factory: FeatureGuard.ɵfac, providedIn: 'root' }); } } (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FeatureGuard, [{ type: Injectable, args: [{ providedIn: 'root' }] }], () => [{ type: i1.FeatureGateService }, { type: i2.SilentlyNavigateService }, { type: undefined, decorators: [{ type: Inject, args: [GET_CURRENT_CLUSTER] }, { type: Optional }] }], null); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy9jb3JlL2d1YXJkcy9mZWF0dXJlLmd1YXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFPN0UsT0FBTyxFQUFjLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7OztBQUloRixNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBRyxtQkFBbUIsQ0FBQztBQUVqRSxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLGNBQWMsQ0FDbkQsOEJBQThCLENBQy9CLENBQUM7QUFFRjs7Ozs7Ozs7R0FRRztBQUVILE1BQU0sT0FBTyxZQUFZO0lBQ3ZCLFlBQ21CLFdBQStCLEVBQy9CLGdCQUF5QyxFQUd6QyxVQUE2QjtRQUo3QixnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFDL0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUF5QjtRQUd6QyxlQUFVLEdBQVYsVUFBVSxDQUFtQjtJQUM3QyxDQUFDO0lBRUosZ0JBQWdCLENBQ2QsVUFBa0MsRUFDbEMsS0FBMEI7UUFFMUIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsV0FBVyxDQUNULEtBQTZCLEVBQzdCLEtBQTBCO1FBRTFCLE1BQU0sSUFBSSxHQUFHO1lBQ1gsV0FBVyxFQUFFLEVBQUU7WUFDZixTQUFTLEVBQUUsNkJBQTZCO1lBQ3hDLE1BQU0sRUFBRSxLQUFLO1lBQ2IsR0FBRyxLQUFLLENBQUMsSUFBSTtTQUNkLENBQUM7UUFFRixJQUFJLGNBQXNCLENBQUM7UUFFM0IsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsY0FBYyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQ3BFLElBQUksQ0FBQyxXQUFXLEVBQ2hCLGNBQWMsQ0FDZixDQUFDLElBQUksQ0FDSixHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDWixJQUFJLE9BQU87Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDekIsTUFBTSxRQUFRLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUV6RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDcEQsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzs2RUE3Q1UsWUFBWSwyRkFJYixtQkFBbUI7dUVBSmxCLFlBQVksV0FBWixZQUFZLG1CQURDLE1BQU07O2lGQUNuQixZQUFZO2NBRHhCLFVBQVU7ZUFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7O3NCQUs3QixNQUFNO3VCQUFDLG1CQUFtQjs7c0JBQzFCLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcbiAgQ2FuQWN0aXZhdGUsXG4gIENhbkFjdGl2YXRlQ2hpbGQsXG4gIFJvdXRlclN0YXRlU25hcHNob3QsXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBtYXAgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgRmVhdHVyZUdhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZmVhdHVyZS1nYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2lsZW50bHlOYXZpZ2F0ZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zaWxlbnRseS1uYXZpZ2F0ZS5zZXJ2aWNlJztcblxuZXhwb3J0IHR5cGUgR2V0Q3VycmVudENsdXN0ZXIgPSAocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpID0+IHN0cmluZztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfRkVBVFVSRV9GT1JCSURERU5fVVJMID0gJ2ZlYXR1cmUtZm9yYmlkZGVuJztcblxuZXhwb3J0IGNvbnN0IEdFVF9DVVJSRU5UX0NMVVNURVIgPSBuZXcgSW5qZWN0aW9uVG9rZW48R2V0Q3VycmVudENsdXN0ZXI+KFxuICAnR2V0IGN1cnJlbnQgY2x1c3RlciBmdW5jdGlvbicsXG4pO1xuXG4vKipcbiAqIGBgYHRzXG4gKiBkYXRhOiB7XG4gKiAgcGF0aDogJ2hvbWUnLFxuICogIGNhbkFjdGl2YXRlOiBbIEZlYXR1cmVHdWFyZCBdLFxuICogIGRhdGE6IHsgZmVhdHVyZU5hbWU6ICdhY2UzJywgZ3VhcmRfdXJsOiAneHh4JyAgfVxuICogfVxuICogYGBgXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgRmVhdHVyZUd1YXJkIGltcGxlbWVudHMgQ2FuQWN0aXZhdGUsIENhbkFjdGl2YXRlQ2hpbGQge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZlYXR1cmVHYXRlOiBGZWF0dXJlR2F0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzaWxlbnRseU5hdmlnYXRlOiBTaWxlbnRseU5hdmlnYXRlU2VydmljZSxcbiAgICBASW5qZWN0KEdFVF9DVVJSRU5UX0NMVVNURVIpXG4gICAgQE9wdGlvbmFsKClcbiAgICBwcml2YXRlIHJlYWRvbmx5IGdldENsdXN0ZXI6IEdldEN1cnJlbnRDbHVzdGVyLFxuICApIHt9XG5cbiAgY2FuQWN0aXZhdGVDaGlsZChcbiAgICBjaGlsZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICAgIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90LFxuICApOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5jYW5BY3RpdmF0ZShjaGlsZFJvdXRlLCBzdGF0ZSk7XG4gIH1cblxuICBjYW5BY3RpdmF0ZShcbiAgICByb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcbiAgICBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCxcbiAgKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGZlYXR1cmVOYW1lOiAnJyxcbiAgICAgIGd1YXJkX3VybDogREVGQVVMVF9GRUFUVVJFX0ZPUkJJRERFTl9VUkwsXG4gICAgICBuZWdhdGU6IGZhbHNlLFxuICAgICAgLi4ucm91dGUuZGF0YSxcbiAgICB9O1xuXG4gICAgbGV0IGN1cnJlbnRDbHVzdGVyOiBzdHJpbmc7XG5cbiAgICBpZiAodGhpcy5nZXRDbHVzdGVyKSB7XG4gICAgICBjdXJyZW50Q2x1c3RlciA9IHRoaXMuZ2V0Q2x1c3Rlcihyb3V0ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZmVhdHVyZUdhdGVbZGF0YS5uZWdhdGUgPyAnaXNOZWdhdGVFbmFibGVkJyA6ICdpc0VuYWJsZWQnXShcbiAgICAgIGRhdGEuZmVhdHVyZU5hbWUsXG4gICAgICBjdXJyZW50Q2x1c3RlcixcbiAgICApLnBpcGUoXG4gICAgICBtYXAoZW5hYmxlZCA9PiB7XG4gICAgICAgIGlmIChlbmFibGVkKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY29uc3QgZXJyb3JVcmwgPSBgJHtkYXRhLmd1YXJkX3VybH0vJHtkYXRhLmZlYXR1cmVOYW1lfWA7XG5cbiAgICAgICAgdGhpcy5zaWxlbnRseU5hdmlnYXRlLm5hdmlnYXRlKHN0YXRlLnVybCwgZXJyb3JVcmwpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG59XG4iXX0=