angularjs - 使用全局权限服务检查 ng-disabled 或 ng-hide

标签 angularjs

我希望对标记中的某些元素进行全局权限检查,但我不一定希望/需要让我的 Controller 意识到这一点。权限检查本身是相当任意的,因为后端服务将阻止任何未经授权的访问...这只是为了隐藏/禁用控件。

本质上,我有一个权限服务,它将检查当前用户是否具有所需的权限。我想在我的标记中调用此服务,如下所示:

<input type="text" ng-model="name" ng-disabled="$permissions.check('edit-user')" />

所以我的问题是:

  1. 这是不好的做法吗?
  2. 我该怎么做?

提前致谢。

最佳答案

嗯,你可以这样做,但我更喜欢另一种方法。您无需向每个 $scope(或 $rootScope)添加 $permissions 属性,只需使用 filters .

权限过滤器看起来像这样:

app.filter('hasPermission', function(permissionsSvc) {
  return function(input, invert) {
    var hasPermission = permissionsSvc.check(input);
    return (invert ? !hasPermission : hasPermission);
  };
});

以及权限服务:

app.factory('permissionsSvc', function() {
  return {
    check: function(permission) {
      // do the validation here and return true or false
    }
  };
});

关于标记:

<input type="text" ng-model="name" ng-disabled="'edit-user' | hasPermission:true" />

过滤器后面的true是为了反转条件(过滤器函数的第二个参数),因为我们想要“如果用户没有权限则禁用”。这只是一种方法,例如,您可以定义另一个过滤器,例如 hasNoPermission ,它的作用与 hasPermission 过滤器相反......这是一个品味问题.

Plunker

关于angularjs - 使用全局权限服务检查 ng-disabled 或 ng-hide,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25620610/

相关文章:

javascript - 使用 angularjs 获取休息服务

javascript - HTML View 看不到 AngularJS

javascript - 在加载指令模板之前指令的范围未初始化,导致无法加载 Google map

javascript - 突出显示行 angularjs 中的过滤元素

javascript - Angular js - 通过不在多维数组上工作来排序

javascript - AngularJs/Javascript ,复制对象是好的做法吗?

javascript - 在javascript中从对象数组中删除一个对象

javascript - Angular JS - 如何将 Javascript 对象导出到 XLS 文件?

AngularJS 使用 templateHtml 的路径作为模块名称

javascript - Angular js 启动模块