具有全局权限服务检查ng-disabled或ng-hide

时间:2014-09-02 09:54:50

标签: angularjs

我想对我的标记中的某些元素进行全局权限检查,但我不一定希望/需要让我的控制器知道它。权限检查本身是非常随意的,因为后端服务将阻止任何未经授权的访问......这只是用于隐藏/禁用控件。

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

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

所以我的问题是:

  1. 这是不好的做法吗?
  2. 我该怎么做?
  3. 提前致谢。

1 个答案:

答案 0 :(得分:4)

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

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

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是要反转条件(过滤函数的第二个参数),因为我们想要在用户没有权限的情况下禁用&#34;。这只是一种方法,例如,您可以定义另一个类似hasNoPermission的过滤器,它会与hasPermission过滤器相反...它是一个问题口味。

Plunker