javascript – 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');
    }
我已经不得不解决这个问题:

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

$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");
            }
        }
    ]);
})();
相关文章
相关标签/搜索