Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在sails.js中创建动态策略_Javascript_Node.js_Express_Sails.js_Policies - Fatal编程技术网

Javascript 如何在sails.js中创建动态策略

Javascript 如何在sails.js中创建动态策略,javascript,node.js,express,sails.js,policies,Javascript,Node.js,Express,Sails.js,Policies,我一直在从事一个项目,需要根据sails.js中的用户访问权限/级别创建和分配策略 每个用户都可以访问低于其级别的所有级别,就像管理员有9级权限一样,他可以访问低于9级的所有级别 当前在sails中,所有策略都存储在 api/政策 文件夹和已分配给中的控制器 config/policies.js 我的问题是,如何根据来自db的访问级别制定动态策略 我在谷歌上搜索过它,但没有找到关于如何在sails.js中创建动态策略的任何信息,所以我在这里发布 谢谢你在这方面的帮助 谢谢退房 针对sails.j

我一直在从事一个项目,需要根据sails.js中的用户访问权限/级别创建和分配策略

每个用户都可以访问低于其级别的所有级别,就像管理员有9级权限一样,他可以访问低于9级的所有级别

当前在sails中,所有策略都存储在

api/政策

文件夹和已分配给中的控制器

config/policies.js

我的问题是,如何根据来自db的访问级别制定动态策略

我在谷歌上搜索过它,但没有找到关于如何在sails.js中创建动态策略的任何信息,所以我在这里发布

谢谢你在这方面的帮助

谢谢退房

针对sails.js和Waterline的全面用户权限和授权系统。支持passport.js用户身份验证、基于角色的许可、对象所有权和行级安全性


一个简单的方法是为每个访问级别创建一个策略

策略/level01.js 策略/level02.js 等等

您的策略文件将检查它们的会话/令牌,以确保它们符合该策略的标准

策略/level01.js

module.exports = function(req,res,next){
 if(req.session.accessLevel = 1) return next();
 return res.forbidden();
}
然后在你的配置中

module.exports.policies = {
UserController: {
    "create": ['policyXX.js'],
    "list": ['policyXX.js'],
    "show": ['policyXX.js'],
},
AuthController: {
    '*': true,
}};

从这样的事情开始,可以熟悉这些政策的运作,并从中积累经验。准确地了解和理解您的安全机制是非常重要的

@Travis Webb的解决方案很好。 您还可以根据需要创建模型角色和通过关系(一对多、多对多…)链接的模型权限,然后使用如下策略对其进行过滤:

例如:

module.exports = function isAdmin (req, res, next) {
    if (typeof req.session.User != "undefined") {
    User.findOne(req.session.User.id).populate('roles').exec(function(err,user){
           if(err) return res.forbidden('You are not permitted to perform this action.');
           if(!user) return res.redirect('/user/new');
           for(var i in user.roles){
                if(user.roles[i]['name'] == 'ROLE_ADMIN'){
                    return next();
                }
           }
           return res.redirect('/user/show/'+req.session.User.id);
        });
    } else {
        return res.redirect('/session/new');
    }
};

一年半后,如果有人遇到这种情况,向你致以最诚挚的问候,这似乎是一个很好的解决办法

RabbitController: {
    nurture: must().be.a('rabbit').mother,
    feed: [must().be.nice.to('rabbits'), must().have('rabbit').food]
},

免责声明:我自己没有使用过它。

谢谢您的回答,我可以在没有passport.js的情况下使用它吗?我不知道您为什么不想使用passport,但如果您愿意,可以禁用它。您只需编写自己的自定义登录内容。哦,是的,免责声明:我是《sails权限》的作者Hanks Travis,sails权限非常棒,我决定使用它来创建角色和策略。谢谢您的时间。由于每个用户可以有不同的访问级别,我如何根据配置中的级别调用策略?您可以根据端点的限制调用策略。因此,如果UserController.create仅限于具有级别4的用户,那么在上面的示例中,您将在create操作上放置['policy04.js',然后让policy04.js检查以确保它们确实处于级别4。
RabbitController: {
    nurture: must().be.a('rabbit').mother,
    feed: [must().be.nice.to('rabbits'), must().have('rabbit').food]
},