我想对我的标记中的某些元素进行全局权限检查,但我不一定希望/需要让我的控制器知道它。权限检查本身是非常随意的,因为后端服务将阻止任何未经授权的访问......这只是用于隐藏/禁用控件。
基本上,我有一个权限服务,它将检查当前用户是否具有所需权限。我想在我的标记中调用这个服务:
<input type="text" ng-model="name" ng-disabled="$permissions.check('edit-user')" />
所以我的问题是:
提前致谢。
答案 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
过滤器相反...它是一个问题口味。