如何让Aurelia子路由器拥有自己的授权步骤

时间:2017-04-27 10:18:58

标签: authentication authorization aurelia aurelia-router authorize

我有两个子路由器,一个用于管理员访问,一个用于公共访问 公共访问路由添加了AuthorizeStep,并检查用户是否已登录。

管理员访问权限使用不同的身份验证,以检查管理员用户是否经过身份验证我需要进行不同的检查。

我与'#34;父母"我的app.ts路线:

 configureRouter(config, router) {
    config.title = 'My site';
    config.addPipelineStep('authorize', AuthorizeStep);
    config.map([
      { route: '', redirect: 'Public' },
      { route: 'Public', moduleId: 'public/views/home', name:'public', title: 'Public Portal - Home' },
      { route: 'Admin', moduleId: 'admin/home', name:'admin', title: 'Admin - Home' }
    ]);

    this.router = router;
  }
}

公共子路由器看起来像:

configureRouter(config, router) {
    config.map([
        { route: '', moduleId: './home', name: 'home', title: 'Home', auth: true },
        { route: 'login', moduleId: './login', name: 'login', title: 'Login' },
        { route: 'page2/:id', moduleId: './page2', name: 'page2', title: 'Page 2', auth: true }
    ]);

    this.router = router;
 }

对主页和第2页路由进行身份验证。

admin子路由器看起来像:

configureRouter(config, router) {
        config.map([
            { route: 'page1', moduleId: './page1/home', name: 'page1', title: 'page 1', auth: true },
            { route: 'page2', moduleId: './page2/home', name: 'page2', title: 'page 2', auth: true }
        ]);

        this.router = router;
  }

只有经过身份验证的路线。 我希望能够做到这样的事情:

configureRouter(config, router) {
        config.addPipelineStep('authorize', AdminAuthorizeStep);
        config.map([
            { route: 'page1', moduleId: './page1/home', name: 'page1', title: 'page 1', auth: true },
            { route: 'page2', moduleId: './page2/home', name: 'page2', title: 'page 2', auth: true }
        ]);

        this.router = router;
  }

如果addPipelineStep出现在子路由器而不是父路由器上,但​​这不起作用,或者我还没有能够使这个工作,它甚至可能吗?或者我只能拥有一个AuthorizeStep并在其中处理逻辑以确定其管理员或公共用户是否访问该路由?

1 个答案:

答案 0 :(得分:0)

对于子路由器来说,这似乎是不可能的。在aurelia-router.js:

if (pipelineSteps.length) {
  if (!router.isRoot) {
    throw new Error('Pipeline steps can only be added to the root router');
  }
...

我确实在我的控制台中收到错误: ERROR [app-router] Error: Pipeline steps can only be added to the root router