Parameters 将参数传递给sails.js策略
Sails.js(0.9v)控制器的策略定义如下: 兔子控制器:{Parameters 将参数传递给sails.js策略,parameters,acl,sails.js,controllers,policies,Parameters,Acl,Sails.js,Controllers,Policies,Sails.js(0.9v)控制器的策略定义如下: 兔子控制器:{ '*': false, nurture : 'isRabbitMother', feed : ['isNiceToAnimals', 'hasRabbitFood'] } '*': false, nurture : 'isRabbitMother(myparam)', feed : ['isNiceToAnimals(myparam1, myparam2)
'*': false,
nurture : 'isRabbitMother',
feed : ['isNiceToAnimals', 'hasRabbitFood']
}
'*': false,
nurture : 'isRabbitMother(myparam)',
feed : ['isNiceToAnimals(myparam1, myparam2)', 'hasRabbitFood(anotherParam)']
}
是否有方法将参数传递给这些ACL,例如:
兔子控制器:{
'*': false,
nurture : 'isRabbitMother',
feed : ['isNiceToAnimals', 'hasRabbitFood']
}
'*': false,
nurture : 'isRabbitMother(myparam)',
feed : ['isNiceToAnimals(myparam1, myparam2)', 'hasRabbitFood(anotherParam)']
}
这可能导致对不同参数多次使用这些函数。
谢谢
Arif策略是带有签名的中间件功能:
功能myPolicy(请求、恢复、下一步)
无法为这些函数指定其他参数。但是,您可以创建包装函数来动态创建策略:
功能决策者(myArg){
返回函数(req、res、next){
if(请求参数('someParam')==myArg){
返回next();
}否则{
返回被禁止的res();
}
}
}
module.exports={
兔子控制器:{
//为培育行动制定政策
培养:决策者(“foo”),
//使用以下位置的策略:
///api/policies/someOtherPolicy.js用于提要操作
feed:'someOtherPolicy'
}
}
实际上,您可能希望将此代码分离到另一个文件中,然后
需要它,但这应该可以让您开始了。我创建了一个Sails钩子来完成此任务:
我仍然需要为它编写文档,但是您可以签出测试文件夹来查看它是如何工作的
您只需要创建一个文件api/policiesFactories/isNiceTo.js
:
module.exports = function(niceTo){
return function(req, res, next){
// policy code
};
};
在config/policies.json
中:
{
RabbitController: {
'*': false,
nurture: 'isRabbitMother(\'myparam\')',
feed : ['isNiceToAnimals(\'myparam1\', \'myparam2\')', 'hasRabbitFood(\'anotherParam\')']
}
}
退房
非常感谢@ScottGress,这意味着我们没有将函数名作为字符串传递的绑定…???例如,培育:'somefunctioname',感谢您指出这一点,您仍然可以按名称引用策略;这样做将在/api/policies
中使用该文件名运行策略。在大多数情况下,您都会这样做。顺便说一句,如果这个答案对你有帮助,你可以接受它,这样它就不会继续以未回答的形式出现。