Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parameters 将参数传递给sails.js策略_Parameters_Acl_Sails.js_Controllers_Policies - Fatal编程技术网

Parameters 将参数传递给sails.js策略

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)

Sails.js(0.9v)控制器的策略定义如下:

兔子控制器:{

    '*': 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
中使用该文件名运行策略。在大多数情况下,您都会这样做。顺便说一句,如果这个答案对你有帮助,你可以接受它,这样它就不会继续以未回答的形式出现。