您可以将多个策略应用于单个函数,如下所示
Noticia:{ '*': 'superAdmin', find: ['isUser','isSuperAdmin','isAdmin'], ... }
在某些情况下,这可能仍然不是最简单的方法。
一个 的 替代 强> 在您的情况下更简单的方法可能是您在前一个级别中包含每个级别,因此更高级别的用户可以始终使用较低级别的用户权限,例如,这些是您的级别
在isUser方法中,首先检查它是否为admin,然后返回,然后检查您的用户逻辑
module.exports = function isUser(req, res, next) { if(is_admin)return next(); //you need to provide logic for is_admin here //remaining user check logic below .... }
同样在Admin方法中,首先检查其SuperAdmin是否返回,然后检查管理逻辑
module.exports = function isAdmin(req, res, next) { if(is_su)return next(); //you need to provide logic for is_su here //remaining admin check logic below .... }
绝对检查@ arkoak的答案就方法而言。我不确定这是否能解决你的完整问题,但这里还有其他可能有用的东西。
目前,您正在映射策略配置的LHS上的模型。它工作的原因是因为我们有适当的猜测逻辑 - 但实际上你想要使用控制器。策略只是可配置的中间件,位于来自用户的传入请求和控制器操作之间。
所以,例如,而不是 User 作为关键,尝试:
User
UserController:{ '*': 'SuOrAdmin', findOne: 'User' }
我要提到的另一件事是澄清政策没有级联 - 也就是说,如果你有:
'*': 'foo', NoticiaController: { '*': 'bar' }
...然后NoticiaController的动作将受到保护 bar (不 foo 和 bar - 抓住我的漂移?)
bar
foo
至于你无法找到的确切问题 Noticia 作为超级拉丁,我相信这是因为你的政策是互相排斥的,就像@arkoak所说的那样。
Noticia
希望有所帮助!