【问题标题】:ui-router: default route based on user roleui-router:基于用户角色的默认路由
【发布时间】:2016-05-03 11:55:32
【问题描述】:

我在我的项目中使用 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');
    }

【问题讨论】:

    标签: javascript angularjs angular-ui-router


    【解决方案1】:

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

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

            $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");
                }
            }
        ]);
    })();
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-17
        • 2017-07-17
        • 2021-09-20
        • 2015-01-30
        • 1970-01-01
        • 2016-06-12
        相关资源
        最近更新 更多