node.js - sails : How to only authorize creation of a blueprint model

标签 node.js sails.js

在我的 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/

相关文章:

mysql - Angular.js put 请求因 Sails.js 和 mysql 数据库而失败

node.js - Multer 将文件上传到对象数组中

node.js - 错误 : spawn ENOENT on Windows

javascript - 使用 Angular 发布到 Mongodb

javascript - 随机出现 ECONNREFUSED 错误

node.js - SailsJS 船长以 root 身份上传文件,我如何以应用程序的所有者身份上传?

javascript - 异步为 View 赋值

node.js - 检查网站是否可联系

node.js - 一个迁移文件中的多个迁移语句

node.js - 尝试对 sails js 项目进行 dockerize