模型动作的Sails.jsauthentication

我正在制作一个具有不同访问级别的API,“客户端”只能读取。 但“pipe理员”必须有写权限。 在Sails.js中,每次检查不同的angular色作为策略,并在req.session中设置权限。

我只需要给“客户端”无权创build,更新和删除操作,因此我创build了一个控制器,具有这些CRUD操作,并检查用户是否有正确的angular色。 所有限制访问的操作都通过routes.jsredirect到此控制器。

现在我的问题是,当我删除一个条目,如:Category.destroy(req.param('id')); 给我没有定义,并没有完成的方法。 不像文中提到的,我通过创build这个来解决这个问题:

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'}); } }); 

但是必须有另一种方式来对这些基本操作进行身份validation。 因为现在我必须写下所有的动作。

我写的删除函数的代码有问题吗? 是否可以应用策略并redirect到默认的模型操作,就好像根本没有authentication一样?

您可以在ModelsControllers级别定义策略。 这里是/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); } }; 

希望这可以帮助。

刚刚修改了所有重命名控制器的策略,如de CLI中所述:'sails generate model example'给出了关于被命名为单数的控制器的通知。 所以我不需要将所有模型动作redirect到复数控制器(示例)。 现在所有的基本的CRUD操作都是按照它应该的方式工作的。

sails.jsvideo教程帮了我很多忙: http : //www.youtube.com/watch? feature=player_embedded&v=GK-​​tFvpIR7c

我的猜测(不是一个Sails用户本人)将是你传递一个callback, 或者你会得到一个有一个done()方法的对象:

 Category.destroy(id, function(...) {...}); // method 1 Category.destroy(id).done(function(...) {...}); // method 2