/* * @Author: ferried * @Email: harlancui@outlook.com * @Date: 2021-02-22 14:26:12 * @LastEditTime: 2021-03-05 11:15:57 * @LastEditors: ferried * @Description: Basic description * @FilePath: /stars/projects/stars/src/schematics/ng-add/files/src/app/common/act.guard.ts * @LICENSE: NONE */ import { Injectable } from "@angular/core"; import { ActivatedRouteSnapshot, CanActivate, CanActivateChild, RouterStateSnapshot, UrlTree, } from "@angular/router"; import { Observable } from "rxjs"; import { globalStar, PathToRegexpService } from "@yunzai/stars"; @Injectable({ providedIn: "root", }) export class ActGuard implements CanActivate, CanActivateChild { constructor(private pathToRegexp: PathToRegexpService) {} canActivate( route: ActivatedRouteSnapshot, state: RouterStateSnapshot ): | boolean | UrlTree | Observable | Promise { const acl = globalStar.portalApplication.aclService; acl.authMap.set('/<%=project%>/displayIndex', []); const errorStatus = { '403': '用户得到授权,但是访问是被禁止的。', '404': '发出的请求针对的是不存在的记录,服务器没有进行操作。', '406': '请求的格式不可得。', '410': '请求的资源被永久删除,且不会再得到的。', '422': '当创建一个对象时,发生一个验证错误。', '500': '服务器发生错误,请检查服务器。', '502': '网关错误。', '503': '服务不可用,服务器暂时过载或维护。', '504': '网关超时。', }; for (const key in errorStatus) { acl.authMap.set(`/<%=project%>/error/${key}`, []); } let canshow = false; acl.authMap.forEach((v, k, m) => { const regexp: RegExp = this.pathToRegexp.stringToRegexp(k, null, null); if (regexp.test(state.url.split("?")[0])) { canshow = true; return; } }); return canshow; } canActivateChild( childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot ): | boolean | UrlTree | Observable | Promise { return this.canActivate(childRoute, state); } }