angularJS基于角色的多个母版页

时间:2016-12-12 19:19:12

标签: angularjs angular-ui-router master-pages role

应用程序的要求是根据用户的角色显示不同的选项。喜欢

  1. 如果角色为Admin,则登录后,需要向用户显示包含选项1,选项2和选项3链接的母版页。

  2. 如果角色是操作员,则在登录后,需要向用户显示包含选项4和选项5链接的母版页。

  3. 任何想法如何实现这一目标?我正在使用基于令牌的身份验证 我正在使用ng-view。这是我的配置设置。

    angularSupplierCTQApp.config(function ($routeProvider, $locationProvider) {
        $routeProvider
            .when("/home", {
                templateUrl: "App/Home/Home.html",
                controller: "HomeController"
            })
            .when("/login", {
                templateUrl: "App/Login/loginTemplate.html",
                controller: "LoginController"
            })
            .otherwise({
                redirectTo: "/login"
            });
    
    
    });
    

2 个答案:

答案 0 :(得分:1)

您可以在索引ctrl中创建函数

$scope.IsAdmin = function(){
return $scope.authentication.role ==     "admin";
}

在每个div上你可以用ng-if

进行检查
<div ng-if="isAdmin()">test div<\div> 

在这种情况下,ng-if优于ng-hide / show,因为ng-if完全从DOM中删除。而且,如果你使用ng-hide / show ...有人可以很容易地在控制台中更改代码并获取数据。

编辑:

您是否有定义的服务,您可以从中浏览用户角色?来自令牌可以提取用户角色......这是解码令牌的方法

app.factory('authService', ['$http', '$sessionStorage', '$q', 'localStorageService', 'ngAuthSettings',
function ($http, $localStorage, $q, localStorageService, ngAuthSettings, $resource, $rootScope, $location) {

    var serviceBase = ngAuthSettings.apiServiceBaseUri;
    var authServiceFactory = {};

    var _authentication = {
        isAuth: false,
        username: "",
        role: "",
        userID: ""
                //useRefreshTokens: false
    };
function urlBase64Decode(str) {
        var output = str.replace('-', '+').replace('_', '/');
        switch (output.length % 4) {
            case 0:
                break;
            case 2:
                output += '==';
                break;
            case 3:
                output += '=';
                break;
            default:
                throw 'Illegal base64url string!';
        }
        return window.atob(output);
    }

    function getUserRoleFromToken(t) {

        var user = getUserFromToken(t);
        return user.role;
    }
 }]);

现在,登录后您可以检查用户是否已登录,哪个用户有角色。 然后完成对ADMIN的检查,你让他看到只有管理员才能看到的部分。

我匆忙写作所以请注意括号

答案 1 :(得分:0)

有两种方法可以做到这一点:

  1. 隐藏元素:使用ng-if隐藏不相关的元素。链接看起来像ng-if =&#34; isRole(&#39; Admin&#39;)&#34;选项1,2和3.然后ng-if =&#34; isRole(&#39;运算符&#39;)&#34;选项4和5。

  2. 不同的路由:为管理员和运营商提供单独的路由。所以你有&#39; / homeAdmin&#39;和&#39; / homeOp&#39;