2014-06-04 4 views
1

Поэтому у меня есть модель с некоторыми полями, как так:Ограничение поля из создаются в Sails.js модели

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

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

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

ответ

2

Вы можете использовать политику для ограничения этого поведения. В 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(); 

} 

Тогда в конфигурация/policies.js:

// Assuming your controller is "UserController" 
UserController: { 
    create: "restrictUserCreate" 
} 
+0

Это кажется немного работы, чтобы сделать для каждых пар, Perhap Лучшая формулировка - это просто игнорировать его. Например, если я просто установил что-то вроде «blahb = blah», эффекта не будет. – Rob

+0

А, ок. Добавлена ​​информация к моему ответу о черном списке в Sails v0.10.x. В v0.9.x вам нужно просто переопределить действие «create» в вашем контроллере. – sgress454

+0

Пришел к этому [здесь] (https://github.com/balderdashy/sails/issues/352), который больше того, что я ищу, однако он работает только в версии с кровотечением в 0.10.x. – Rob

Смежные вопросы