在config/policies.js中的sails中配置策略时,例如:
ActivityController: {
create: ['authenticated'],
update: ['authenticated', 'isActivityOwner'],
destroy: ['authenticated' ,'isActivityOwner']
}
Run Code Online (Sandbox Code Playgroud)
是否有任何功能允许我授予对一组策略中的一个或多个成功的操作的访问权限,例如:
ActivityController: {
create: ['authenticated'],
update: ['authenticated', {or:['isActivityOwner', 'isAdmin']}],
destroy: ['authenticated' ,'isActivityOwner']
}
Run Code Online (Sandbox Code Playgroud)
或者可以创建复合策略,以便在一个策略中我可以检查一个或多个其他策略?
如果这两个选项看起来都是糟糕的解决方案,您能否提出一种被认为是更好的做法的方法?
请原谅我,如果这有点明显,但我对帆和节点一般都是新手,并提前感谢任何帮助!
Tra*_*vis 10
我没有在帆船政策中找到任何对运营商的官方支持,但这就是我正在做的事情.
ActivityController: {
update: ['authenticated', 'orActivityOwner', 'orAdmin', orPolicy],
}
Run Code Online (Sandbox Code Playgroud)
无论orActivityOwner和orAdmin回报next(),就好像它们是有效的.但是他们也为会话变量设置了一个布尔值.请记住,策略是从左到右执行的.我添加了一个orPolicy到底,然后将评估我们的会话变量的状态.
小智 7
检查sails-must:
ActivityController: {
create: 'authenticated',
update: ['authenticated', must().be.the.owner.or.be.a.member.of('admins')],
destroy: ['authenticated', must().be.the.owner]
}
Run Code Online (Sandbox Code Playgroud)
我已经创建了一个帆钩,可以向策略添加参数:https :
//github.com/mastilver/sails-hook-parametized-policies
我设置了一个定义or策略的示例:
module.exports = function(firstPolicy, secondPolicy){
return function(req, res, next){
var fakeRes = {};
for(var i in res){
if(i === 'forbidden'){
// override the functions you want the `or` factory to handle
fakeRes[i] = function(){
secondPolicy(req, res, next);
};
}
else{
fakeRes[i] = res[i];
}
}
firstPolicy(req, fakeRes, next);
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用哪种方式:
ActivityController: {
create: ['authenticated'],
update: ['authenticated', 'or(isActivityOwner, isAdmin)'],
destroy: ['authenticated' ,'isActivityOwner']
}
Run Code Online (Sandbox Code Playgroud)