用于模型操作的Sails.js认证



我正在制作一个具有不同访问级别的API, '客户端'可能只读取。但是"admin"必须有写权限。每次在Sails.js中作为策略检查不同的角色,并在request .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'});
    }
  });

但是必须有另一种方法将身份验证应用于这些基本操作。因为现在我必须写所有的动作

我写的删除函数的代码有问题吗?是否有可能应用策略并重定向到默认的模型操作,就好像根本没有身份验证一样?

可以在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);
    }
};

只是修改了所有重命名控制器的策略,如CLI中所述:'sails generate model example'给出了一个关于控制器被命名为奇异的通知。所以我不需要将所有模型动作重定向到复数控制器(示例)。现在,所有基本的CRUD操作都正常工作了。

sails.js视频教程帮助了我很多:http://www.youtube.com/watch?feature=player_embedded&v=GK-tFvpIR7c

我的猜测(不是帆用户我自己)会是你要么传递回调,你会得到一个对象返回有一个done()方法:

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

最新更新