根据用户权限更改routeProvider中的templateUrl

时间:2017-04-18 14:34:48

标签: javascript angularjs routing

我想根据用户权限更改路由器提供商上的templateUrl,如下所示:

   field    acno    value   date
    a   11  12  17-11-2015
    b   11  3   17-11-2015
    c   11  234 17-11-2015
    d   11  2321    17-11-2015
    d   11  12  01-09-2016
    d   11  32  28-04-2016
    a   11  23  17-11-2015
    a   11  324 01-09-2016
    d   11  43  17-11-2015

   Output - I'm looking for

   field    acno    value   date
   a    11  324 01-09-2016
   b    11  3   17-11-2015
   c    11  234 17-11-2015
   d    11  12  01-09-2016

我有一个查询返回给我用户的权限,然后如果用户是管理员我应该将他重定向到admin-homepage? 这样做的最佳做法是什么?

2 个答案:

答案 0 :(得分:1)

templateUrl接受函数作为动态路由值的值。

来自文档:

  

“如果templateUrl是一个函数,它将使用以下参数调用:

     

{Array。} - 通过应用当前路线从当前$ location.path()中提取的路线参数“

您可以使用此函数来运行if语句逻辑,像中间件一样运行,或者应用执行逻辑的函数,构造动态模板并将其返回。

$routeProvider
.when('/', {
    templateUrl: _ => { //you're not using a dynamic file name here
        let route = 'app/views/pages/';
        if (user) route += 'home-page.html';
        else if (admin) route += 'admin-page.html';
        return route;
    }
})

您可以更进一步,实际应用参数,这将为您的网址添加依赖项。现在,中间件将在此处更改,因为它们都接受相同的值,因此您必须更改该功能以检查两个层上的权限,或应用不同的URL范围。

$http的示例。显然,我不了解您的整个架构,将.isUserisAdminurl/for/permissions作为您需要更改的内容。

$http.get('/url/for/permissions/').then(results => {
    $routeProvider
    .when('/', {
        templateUrl: _ => { //you're not using a dynamic file name here
            let route = 'app/views/pages/';
            if (results.isUser) route += 'home-page.html';
            else if (results.isAdmin) route += 'admin-page.html';
            return route;
        }
    })
});

答案 1 :(得分:1)

您可以使用routeChange事件来实现此目的(您可以将此代码添加到app.run):

app.run

$rootScope.$on("$routeChangeStart", function(event, next, current) {
  if(next.$$route.originalPath = '/' && user) {
      $location.path('/home');
  }         
});