Node.js 用于模型操作的Sails.js身份验证

Node.js 用于模型操作的Sails.js身份验证,node.js,mongodb,authentication,sails.js,Node.js,Mongodb,Authentication,Sails.js,我正在制作一个具有不同访问级别的API,“客户端”只能读取。但“管理员”必须具有写入权限。在Sails.js中,每次都会将不同的角色作为策略进行检查,并在req.session中设置权限 我只需要让“客户端”无权创建、更新和删除操作,因此我创建了一个具有这些CRUD操作的控制器,并检查用户是否具有正确的角色。所有访问受限的操作都通过routes.js重定向到此控制器 现在我的问题是,当我删除一个条目时,比如:Category.destroy(req.param('id'));给我一个未定义且没有

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

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

现在我的问题是,当我删除一个条目时,比如:Category.destroy(req.param('id'));给我一个未定义且没有完成的方法。与文档中提到的不同,我通过创建以下内容解决了问题:

   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函数的代码有问题吗?是否可以应用策略并重定向到默认模型操作,就好像根本没有身份验证一样?

我猜(我自己不是Sails用户)您要么通过回调,要么返回一个具有
done()
方法的对象:


刚刚修改了所有策略,并重命名了控制器,如de CLI中所述:“sails generate model example”会发出控制器命名为singular的通知。因此,我不需要将所有模型操作重定向到复数控制器(示例)。现在,所有基本的CRUD操作都正常工作


sails.js视频教程对我帮助很大:

您可以在
模型
控制器
级别定义策略。下面是
/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);
    }
};

希望这有帮助。

谢谢您的回答。我认为,在帆船内的改道是不正确运作行动的一部分。现在有了新的重写,它就可以正常工作了。但是谢谢你抽出时间!
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);
    }
};