有一长串项目,其中一些用户拥有一些权限的项目没有。如何检查用户是否拥有特定项目的权限?我可以在控制器中加载权限,然后当我通过ng-repat中的列表进行迭代时,调用一个方法来检查该项是否有权限 - 该项是在权限数组中 - 之前加载的。我在尝试这种方法时看到的是,由于双向数据绑定需要很长时间 - 即使用户在屏幕上执行其他操作 - 单击按钮 - 与控制器交互,也会执行检查。实现这一目标的最佳方法是什么?
我仅在应用程序启动或路由更改时更新我的用户( - >权限)。有了这个,我的中心方法没有出现任何性能问题
$rootScope.authService.hasPermission(roles)
只检查结果,所以js没有在模板中计算。
只需使用memoization技术。许可检查不应经常更改(我想在登录表单和注销后)。所以,你可以这样做:
var memoize = require('lodash.memoize')
var hasPermission = memoize(service.hasPermission)
如果要清除缓存只需调用
hasPermission.cache.clear()
我在使用CASL的项目中使用了这种方法,它的工作速度非常快