【问题标题】:Sails: How to only authorize creation of a blueprint modelSails:如何仅授权创建蓝图模型
【发布时间】:2013-10-14 07:25:41
【问题描述】:

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

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

【问题讨论】:

    标签: node.js sails.js


    【解决方案1】:

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

    【讨论】:

    • 如何为返回所有条目列表的 GET /:controller 蓝图制定策略?
    猜你喜欢
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2017-01-12
    • 1970-01-01
    • 2017-07-07
    相关资源
    最近更新 更多