在我的 sails 应用程序中,我创建了数据模型和 Controller (蓝图模型)。
我设置了以下策略以仅授权创建新数据。
module.exports.policies = {
// Prevent all actions
'*': false,
// Data controller's policies
DataController:{
'*': false,
'create': true
}
};
这不起作用并会阻止所有操作。难道“创建”规则的优先级高于它上面的规则吗?
更新
我的错误,DataController 应该被数据替换(感谢 #sailsjs IRC)。
我已经更新了政策订单,但这也不起作用:
module.exports.policies = {
// Data controller's policies
data:{
'create': true,
'find': false,
'findAll': false,
'update': false,
'destroy': false
}
};
使用此代码,当这是我唯一需要向任何人开放的操作时,甚至禁止“创建”操作。
最佳答案
我假设您正在使用 Sails.js 提供的内置蓝图
您会发现以下策略将允许您访问“/data/create”路由
data: {
'find': true,
'create': true,
'update': true,
'destroy': false,
'findAll': false
}
我不确定为什么你的策略必须这样配置才能访问“创建”路由,但我认为这与蓝图在幕后实现的方式有关
解决您的问题的一个可能的方法是创建您自己的路线,覆盖 Sails 提供的默认蓝图。例如,将“/data/create”映射到数据 Controller 中的 createData 方法,然后指定应用于此方法的策略。
我的理解是这些CRUD路由仅用于开发期间使用,您会发现这也在config/controllers.js文件中说明
// These CRUD shortcuts exist for your convenience during development,
// but you'll want to disable them in production.
// '/:controller/find/:id?'
// '/:controller/create'
// '/:controller/update/:id'
// '/:controller/destroy/:id'
由于蓝图不打算在生产中使用,因此编写针对这些默认 CRUD 快捷方式的策略没有任何意义。因此,另一种选择是在 config/controllers.js 中完全禁用蓝图,并将策略应用于您自己的自定义路由和方法。
关于node.js - sails : How to only authorize creation of a blueprint model,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19229634/