【问题标题】:Display content based on the role of the user根据用户的角色显示内容
【发布时间】:2017-05-10 14:24:45
【问题描述】:

我有一个菜单,其中包含仅对某些用户可见的部分。我的数据库中有角色用户、角色 admin1 和角色 admin2。 例如,如何使类别 2 仅对 ROLE_ADMIN1 可见?

知道我的用户可以同时拥有多个角色或所有角色。如下所示,每个用户都有 ROLE_USER 角色,但唯一的区别是 ROLE_USER 只能是 ROLE_USER、ROLE_ADMIN1 或 ROLE_ADMIN2,或同时是两者。

{
         "name": "Jack",
         "fname": "Daniel",
         "roles": [
           "ROLE_USER"
         ]
       }


       {
         "name": "Laly",
         "fname": "Dom",
         "roles": [
           "ROLE_USER",
           "ROLE_ADMIN1"
         ]
       }


       {
         "name": "Admini",
         "fname": "Strator",
         "roles": [
           "ROLE_USER",
           "ROLE_ADMIN2"
         ]
       }<br><br>            {
         "name": "Admini",
         "fname": "Strator",
         "roles": [
           "ROLE_USER",
           "ROLE_ADMIN1",               
           "ROLE_ADMIN2" 
           ]
       }

我的html:

<ion-item class="item-stable animsvdj" ng-click="toggleGroup(group)" ng-class="{active: isGroupShown(group)}">
      <i class="icon" ng-class="isGroupShown(group) ? 'ion-android-contacts' : 'ion-android-contacts'"></i>
      &nbsp; Category
    </ion-item>
    <ion-item class="item-accordion menu-border" ng-show="isGroupShown(group)" ui-sref="menu.disponibilites" menu-close=""><i class="ion-ios-calendar-outline menu-icon"></i>   Category 1</ion-item>

    <!-- Part that should be visible only by admin -->
    <ion-item class="item-accordion menu-border" ng-show="isGroupShown(group)" ui-sref="menu.organiseVisite" menu-close=""><i class="ion-ios-time-outline menu-icon"></i>   Category 2</ion-item>
    <!-- Part that should be visible only by admin -->

    <ion-item class="item-accordion menu-border" ng-show="isGroupShown(group)" ui-sref="menu.trouverUnJeune" menu-close=""><i class="ion-ios-eye-outline menu-icon"></i>   Category 3</ion-item>

在我的控制器中:

.controller('menuCtrl', function($scope, $state, $http, $ionicHistory, AppService) {
            $scope.group = [];
            $scope.toggleGroup = function(group) {
              if ($scope.isGroupShown(group)) {
                $scope.shownGroup = null;
              } else {
                $scope.shownGroup = group;
              }
            };
            $scope.isGroupShown = function(group) {
              return $scope.shownGroup === group;
            };

      })

谢谢大家!

【问题讨论】:

  • json 是从哪里来的?我会从后端返回可用的菜单项并使用 Angular 的等效 for 循环绑定。
  • 什么是“isGroupShown”?我没有看到它的功能。

标签: javascript angularjs


【解决方案1】:

首先,我认为在后端级别处理此逻辑的最佳实践,

所以你发送令牌,后端人员必须检查来自

自行标记并根据您拥有的权限返回数据,

还要确保您的数据安全。

如果您不关心上述内容,您可以这样做并在客户端过滤您的数据

  $scope.adminData = []; 
  $scope.data = [{data:'some user data',roll:'user'},{data:'some admin data',roll:'admin'}]
        data.filter(function(currentValue, index, arr){
        if(currentValue.roll == "admin"){
        $scope.adminData.push(currentValue);
        }
        })

如果登录用户具有管理员权限,则在此之后在您的视图中重复 adminData 数组

在这种情况下,我更喜欢在你的组件中执行逻辑,这将是

为您提供更好的维护和更清洁的视野。

【讨论】:

    猜你喜欢
    • 2012-09-16
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多