首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >模型操作的Sails.js身份验证

模型操作的Sails.js身份验证
EN

Stack Overflow用户
提问于 2013-04-17 21:41:01
回答 3查看 7.8K关注 0票数 6

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

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

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-18 16:56:24

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

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

票数 2
EN

Stack Overflow用户

发布于 2013-07-08 10:05:45

您可以在ModelsControllers级别定义策略。这里有一个来自/config/policies.js的示例。

代码语言:javascript
运行
复制
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下,您可以定义访问级别。

代码语言:javascript
运行
复制
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);
    }
};

希望这能有所帮助。

票数 12
EN

Stack Overflow用户

发布于 2013-04-17 21:46:34

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

代码语言:javascript
运行
复制
Category.destroy(id, function(...) {...});      // method 1
Category.destroy(id).done(function(...) {...}); // method 2
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16061678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档