1

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

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

4

1 回答 1

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

于 2013-10-08T13:30:05.090 回答