4

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

每个用户都可以访问其级别以下的所有级别,例如管理员有 9 级,他可以访问 9 级以下的所有级别

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

api/政策

文件夹并分配给控制器

配置/policies.js

module.exports.policies = {

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

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

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

感谢您对此的帮助。

谢谢

4

4 回答 4

2

查看sails-permissions

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

于 2015-04-21T13:30:59.017 回答
1

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

政策/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,
}};

从这样的事情开始,可以熟悉这些政策的工作并从那里建立起来。准确了解和了解您的安全工作方式始终非常重要。

于 2015-04-21T14:40:27.087 回答
1

@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');
    }
};

此致

于 2015-04-21T16:09:48.040 回答
0

一年半后,如果有人遇到这个问题,sails-must似乎是一个很好的解决方案。

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

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

于 2017-02-22T22:44:09.173 回答