Паруса.аутентификация js для действий модели
Я создаю API, который имеет разные уровни доступа, "клиент" может только читать. Но "администратор" должен иметь доступ на запись. Различные роли проверяются каждый раз как политика в парусах.js и устанавливает права в req.сессия.
Мне просто нужно дать "клиенту" доступ к созданию, обновлению и удалению действий, поэтому я создал контроллер, который имеет эти действия CRUD и проверяет, имеет ли пользователь правильную роль. Все действия, которые имеют ограниченный доступ, перенаправляются через канал маршруты.js к этому контроллеру.
Теперь моя проблема заключается в том, что когда я удаляю запись типа: категория.уничтожить (req.param ('id')); дает мне неопределенный и не имеет метода done. В отличие от упомянутых в документах, мне удалось решить эту проблему, создав следующее:
var deleted = Category.destroy(req.param('id'), function(err, status) {
if (status == 1){
res.json({message: 'Category is deleted'});
} else {
res.json({message: 'Oops, something went wrong'});
}
});
Но должен быть и другой способ применить аутентификацию к этим основным действиям. Потому что теперь я должен писать все действия.
Что-то не так с кодом для функции delete, которую я написал? И возможно ли это сделать? применить политики и перенаправление к действиям модели по умолчанию, как если бы не было никакой аутентификации вообще?
3 ответа:
Вы можете определить политику на уровне
Models
илиControllers
. Вот пример из/config/policies.js
.module.exports.policies = { // Default policy (allow public access) '*': true, 'events': 'eventsPolicy', // Policy for a Model someController: { // Policy for a Controller // Apply the "authenticated" policy to all actions '*': 'authenticated', // For someAction, apply 'somePolicy' instead someAction: 'somePolicy' } };
Под
api/policies
находится место, где можно определить уровень доступа.module.exports = function (req, res, next) { if (req.session.user) { var action = req.param('action'); if (action == "create") { req.body.userId = req.session.user.id; req.body.username = req.session.user.username; } next(); } else { res.send("You're not authenticated.", 403); } };
Надеюсь, это поможет.
Просто модифицировал все политики en переименовал контроллеры, как указано в de CLI: "паруса генерируют пример модели" дает уведомление о контроллере, названном как сингулярный. Поэтому мне не нужно было перенаправлять все действия модели на множественный контроллер (примеры). Теперь все основные действия CRUD работают как надо.
Паруса.видеоурок js мне очень помог: http://www.youtube.com/watch?feature=player_embedded&v=GK-tFvpIR7c