angular - 将 CanActivate() 委托(delegate)给组件

标签 angular angular-routing

我的 angular(4) 应用程序中有数十个组件。

只有有访问权限的用户才能访问。

  • 例如,UserA 可以访问 DashboardComponent,但 userB 不能。

一些组件通过参数检查授权。

  • 例如UserA可以通过参数1访问VisualizeComponent,但不能通过参数2访问。

有多种类型的访问授权或拒绝策略。

所以我想象一下将 CanActivate 方法委托(delegate)给每个组件怎么样,因为每个组件都是根据其目的检查访问权限的最佳位置。

我知道通常人们会像下面这样在服务中实现 CanActivate。

@Injectable()
export class AccessGuard implements CanActivate {
  canActivate(route: ActivatedRouteSnapshot, 
              state: RouterStateSnapshot) {

   route.component.canActivate(route, state); // <----- HERE

   return true;
  }
}

现在我可以在第 6 行调用一些方法吗? 我想对我的所有组件实现 CanActivate 并让它们在该方法中拥有自己的保护登录。所以我很容易将守卫逻辑放在组件的业务逻辑附近。

最佳答案

  1. 尝试添加一些 sessionService,它必须存储有关负责访问的参数的信息,添加一个关于您提供访问逻辑的方法。
  2. 添加适当的方法

    @Injectable()
    export class AccessGuard implements CanActivate { canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
    constructor(private sessionService:SessionService) {}
    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
        return this.sessionService:SessionService.isAuthenticated();
    }}}
    
    1. 例如为组件和页面添加路由器配置 {path: 'dashboard-page, component: DashboardComponent, canActivate: [AuthenticationGuard]},

希望对你有帮助

关于angular - 将 CanActivate() 委托(delegate)给组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48115561/

相关文章:

javascript - 无法在 AngularJS 中实例化模块

angular - 在 routerLink 中设置 url 字符串

angular - Ionic 4 滚动条在 iOS 上无法正常工作

javascript - Angular 4 : abort all pending $http requests on route change

angular - 抑制 "Circular dependency detected"抑制 Angular 6 中的警告

html - AngularJS - 单个 'ui-sref' 中的多个 'ui-sref-active'

javascript - Spring 工具套件中的 Angular 5

node.js - Angular 2 rc3 - Unresolved 依赖关系

javascript - 使用 UI 路由器和 token 在 AngularJS 中重定向

angular - Angular 5中的嵌套路由