Вопрос

Итак, у меня есть модель с такими полями:

// ...
slug: {
  type: 'string',
  required: true,
  alphanumeric: true,
  minLength: 3,
  maxLength: 16
},
loggedinAt: 'date',
// ...

Я использую структуру проекта Sails, поэтому она автоматически отображает все.Однако иногда у меня есть такие поля, как loggedinAt которые являются строго внутренними, и я не хочу, чтобы пользователь мог их устанавливать.

В нынешнем виде, если я делаю запросы на публикацию с помощью loggedinAt поле, оно установит его.Как я могу это ограничить?

Это было полезно?

Решение

Вы можете использовать политику, чтобы ограничить такое поведение.В API/политики/restrictUserCreate.js:

module.exports = function (req, res, next) {

    // Check for the "loggedInAt" field in the request
    if (req.param('loggedInAt')) {
       return res.badRequest("Nuh uh, you can't set that!");
    }

    return next();

}

или, чтобы просто игнорировать определенные поля (только для Sails v0.10.x), используйте команду черный список:

module.exports = function (req, res, next) {

    // Make sure blacklist object exists, and use existing one if possible,
    // since this policy could be chained
    req.options.values = req.options.values || {};
    req.options.values.blacklist = req.options.values.blacklist || [];
    // Add restricted fields to the blacklist
    req.options.values.blacklist.push('loggedinAt');
    return next();

}

Затем в config/policies.js:

// Assuming your controller is "UserController"
UserController: {
    create: "restrictUserCreate"
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top