我希望对标记中的某些元素进行全局权限检查,但我不一定希望/需要让我的 Controller 意识到这一点。权限检查本身是相当任意的,因为后端服务将阻止任何未经授权的访问...这只是为了隐藏/禁用控件。
本质上,我有一个权限服务,它将检查当前用户是否具有所需的权限。我想在我的标记中调用此服务,如下所示:
<input type="text" ng-model="name" ng-disabled="$permissions.check('edit-user')" />
所以我的问题是:
- 这是不好的做法吗?
- 我该怎么做?
提前致谢。
最佳答案
嗯,你可以这样做,但我更喜欢另一种方法。您无需向每个 $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
过滤器相反......这是一个品味问题.
关于angularjs - 使用全局权限服务检查 ng-disabled 或 ng-hide,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25620610/