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

时间:2013-10-07 16:12:09

标签: node.js sails.js

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

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

1 个答案:

答案 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 中完全禁用蓝图,而是将策略应用于您自己的自定义路由和方法。