Node.js Sails:如何仅授权创建蓝图模型

Node.js Sails:如何仅授权创建蓝图模型,node.js,sails.js,Node.js,Sails.js,在我的sails应用程序中,我创建了数据模型和控制器(蓝图模型) 我已设置以下策略,仅授权创建新数据 module.exports.policies = { // Prevent all actions '*': false, // Data controller's policies DataController:{ '*': false, 'create': true } }; 这不起作用,会阻止所有操作。“创建”规则的优先级不高于它上面的规则吗 更

在我的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
  }
};

有了这段代码,即使是“创建”操作也被禁止,因为这是我唯一需要向任何人开放的操作。

我假设您使用的是Sails.js提供的内置蓝图

您会发现以下策略将允许您访问“/data/create”路由

data: {
  'find': true, 
  'create': true,
  'update': true,
  'destroy': false,
  'findAll': false
}
我不确定为什么您的策略必须这样配置才能访问“创建”路径,但我认为这与蓝图在幕后的实现方式有关

解决问题的一个可能方法是创建自己的路线,覆盖Sails提供的默认蓝图。例如,将“/data/create”映射到数据控制器内的createData方法,然后指定应用于此方法的策略

我的理解是,这些CRUD路由仅用于开发过程中,您会发现config/controllers.js文件中也说明了这一点


由于蓝图不打算在生产中使用,因此编写针对这些默认CRUD快捷方式的策略毫无意义。因此,另一个选项是在config/controllers.js中完全禁用蓝图,而是将策略应用于您自己的自定义路由和方法。

如何为返回所有条目列表的GET/:controller blueprint执行策略?
// 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'