ui-router:基于用户角色的默认路由

时间:2016-05-03 11:55:32

标签: javascript angularjs angular-ui-router

我在我的项目中使用UI路由器。我的应用程序的主页包含4个选项卡,每个选项卡都路由到不同的模板。这是我目前的路由代码,即使用forEach创建6条路由。

['Draft','Assigned','InProgress','Completed','Rejected','All'].forEach(function (val) {
        $stateProvider.state({
            name: 'root.jobs.list.' + val.toLowerCase(),
            url: '/' + val.toLowerCase(),
            views: {
                'currentTab': {
                    templateUrl: 'adminworkspace/jobs',
                    controller: 'JobsController'
                }
            },
            data: {
                userJobsStatus: val
            }
        });
    });

默认情况下,当用户登录时,它会转到" root.jobs.list.draft"。如何根据登录用户的角色(管理员,用户,文员等)重定向到给定状态。如果想要重定向属于"工程师"的所有用户?或者"首席工程师"角色到" root.jobs.list.inprogress"

我最初在控制器中有这个,但正如你所看到的,它没有用,因为每次我点击一个标签时,它总是会回到" root.jobs。 list.inprogress"

    if (user !== undefined) {
        if (user.BusinessRole == "Engineer" || user.BusinessRole == "Lead Engineer")
            $state.go('root.jobs.list.inprogress');
    }

2 个答案:

答案 0 :(得分:6)

我已经不得不解决这个问题了:

我已经注册了一个仅用于根据角色处理默认页面的状态。

        $urlRouterProvider.otherwise("/");
        $stateProvider.state("default", {
            url:"/",
            templateUrl: "app/core/home/default.html",
            controller: "DefaultController"
        });

控制器很简单:

(function () {
    "use strict";

    angular.module("core").controller("DefaultController", [
        "$rootScope",
        "$state",
        "roles",
        function ($rootScope, $state, roles) {
            if ($rootScope.hasPermission(roles.SomeRoleName)) {
                $state.go("someStateName");
            } else if ($rootScope.hasPermission(roles.SomeRoleName)) {
                $state.go("someStateName");
            }
        }
    ]);
})();

答案 1 :(得分:1)

如果每个角色的默认状态链接相同,例如 admin 用户 / user / home 。 我们可以做的一件事是根据角色在应用程序的默认状态下显示不同的html模板。 ui-router提供@stateProvider服务,该服务具有propertyProvider和ControllerProvider属性。我们可以使用它们来确定我们想要使用哪个模板和控制器用于相同的默认状态。 Here是文档链接。