angularJS基于角色的多个Master页面

Posted

技术标签:

【中文标题】angularJS基于角色的多个Master页面【英文标题】:angularJS multiple Master pages based on Role 【发布时间】:2017-04-27 17:45:52 【问题描述】:

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

    如果角色是 Admin ,在登录后,用户需要看到一个母版页,其中包含选项 1、选项 2 和选项 3 的链接。

    如果角色是操作员,在登录后,用户需要看到一个母版页,其中包含选项 4 和选项 5 的链接。

任何想法如何实现这一目标?我正在使用基于令牌的身份验证。 我正在使用 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"
        );


);

【问题讨论】:

成功登录后,您需要进行路由***.com/questions/23429055/… 【参考方案1】:

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

    隐藏元素:使用 ng-if 隐藏不相关的元素。选项 1,2 和 3 上的链接看起来像 ng-if="isRole('Admin')"。然后是 ng-if ="isRole('Operator')" 选项 4 和 5。

    不同的路由:管理员和操作员有不同的路由。所以你有'/homeAdmin'和'/homeOp'

【讨论】:

【参考方案2】:

你可以在 index 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;
    
 ]);

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

我写的很匆忙,请注意括号

【讨论】:

我在 Index.html 中添加了代码 test div ,它链接到控制器 IndexController。在 IndexController 中,我添加了仅用于测试的代码 $scope.isAdmin = function () $log.debug('IsAdmin called');返回真;但是 IsAdmin 函数永远不会被调用。知道为什么吗? Arter,你能帮我解决我上面的问题吗? isAdmin 函数没有被调用。我是 angularjs 的新手。 感谢 Arter...我找到了问题并解决了。现在可以了。

以上是关于angularJS基于角色的多个Master页面的主要内容,如果未能解决你的问题,请参考以下文章

如何在 AngularJS 中处理基于角色的授权?

Angular Js 安全问题基于角色的授权

AngularJs中的模块定义,一个页面加载多个ng-app

如何在 AngularJS 和 FireBase 中进行简单的基于角色的授权?

AngularJS中实现权限控制 - 基于RBAC

AngularJS 中启动多个 ng-app 的问题