2016-05-28 3 views
0

Когда я пишу политику, она не работает. Что случилось с моим кодом?Политика парусности не работает

policies.js

'UserController': { 
    'create': ['canCreate'] 
} 

routes.js

'post /register': { 
    controller: 'UserController', 
    action: 'create' 
} 

политика/canCreate.js

module.exports = function (req, res, next) { 
    if (req.session.canCreate) { 
     return next(); 
    } 
    else { 
     res.send('no auth') 
    } 
}; 

UserController.js

module.exports = { 
    create: function (req, res) { 
     req.session.canCreate = true; 
     User.create({ 
      name: req.param('name'), 
      password: req.param('password') 
     }, function onSuccess(err, newUser) { 
      if (err) { 
       return res.negotiate(err); 
      } 
      res.json({ 
       id: newUser.id 
      }) 
     }) 
    } 
}; 

ответ

1

Политика ищет req.session.canCreate, однако из вашего кода, который установлен только в пределах UserController.create, доступ к которому невозможен, поскольку политика выполняется до метода контроллера. Если вы действительно хотите иметь такую ​​политику, вам необходимо добавить еще одну конечную точку, которая будет инициализировать и установить req.session.canCreate = true;

В зависимости от общей структуры, я бы, вероятно, изменить политику что-то вроде:

if (!req.session.authenticated) { 
    return next(); 
} 
else { 
    res.forbidden('already authenticated') 
} 

И я бы установил req.session.authenticated при создании пользователя и входе в систему. Другими словами, любой * может создать учетную запись пользователя, если они не вошли в систему; если они уже вошли в систему, тогда создание пользователя будет отклонено политикой. (Это неправильное решение для всех случаев использования, конечно, так что это скорее отправная точка. Адаптируйте его в соответствии с вашими потребностями.)

* Пользовательское создание по-прежнему может быть ограничено путем перехвата или совместного использования/частную тайну или некоторые другие средства, которые будут проверяться либо в контроллере, либо, возможно, в политике.

+1

«Политика запуска до метода контроллера», я думал, что она будет работать в методе создания раньше. Теперь я понял. Благодарю. – TopGrd

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