繁体   English   中英

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

[英]How to create dynamic policies in sails.js

我一直致力于一个项目,我需要在sails.js中根据访问权限/级别创建和分配策略

每个用户都可以访问低于其级别的所有级别,例如admin具有级别9,并且他可以访问级别9以下的所有级别

目前在风帆中存储所有策略

API /政策

文件夹并分配给控制器

配置/ policies.js

module.exports.policies = {

UserController: {
    "create": ['canCreate'],
    "list": ['canRead'],
    "show": ['canRead'],
},
AuthController: {
    '*': true,
}};

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

我已经google了它,但没有发现如何在sails.js中创建动态策略,所以发布在这里。

感谢您对此的帮助。

谢谢

查看sails-permissions

sails.js和Waterline的综合用户权限和权利系统。 支持使用passport.js进行用户身份验证,基于角色的权限,对象所有权和行级安全性。

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

policies / level01.js policies / 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]
},

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM