在我的sails应用程序中,我创建了数据模型和控制器(蓝图模型)。
我已设置以下政策,仅授权创建新数据。
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
}
};
使用此代码,即使是“创建”操作也是禁止的,因为这是我需要向任何人开放的唯一操作。
答案 0 :(得分:3)
我假设您使用的是Sails.js提供的内置蓝图
您会发现以下政策允许您访问“/ data / create”路线
data: {
'find': true,
'create': true,
'update': true,
'destroy': false,
'findAll': false
}
我不确定为什么您的政策必须像这样配置才能访问“创建”路线,但我想这与蓝图在幕后实施的方式有关
可能解决您的问题的方法是创建自己的路由,覆盖Sails提供的默认蓝图。例如,将“/ data / create”映射到Data控制器中的 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 中完全禁用蓝图,而是将策略应用于您自己的自定义路由和方法。