如何在sails.js中创builddynamic策略

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

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

目前在sails中存储所有的策略

API /政策

文件夹并分配给控制器

configuration/ policies.js

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

我的问题是我如何使dynamic政策基于来自数据库的访问级别

我GOOGLE了,但没有发现如何在sails.js中创builddynamic策略,所以发布在这里。

感谢你的帮助。

谢谢

查看sails-permissions

Sails.js和Waterline全面的用户权限和权限系统。 通过passport.js支持用户authentication,基于angular色的权限,对象所有权和行级安全。

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

政策/ level01.js政策/ level02.js等。 。 。

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

政策/ level01.js

 module.exports = function(req,res,next){ if(req.session.accessLevel = 1) return next(); return res.forbidden(); } 

然后在你的configuration

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

从这样的事情开始,可以熟悉这些政策工作,并从那里build立起来。 了解并理解您的安全性如何工作始终是非常重要的。

@Travis Webb的解决scheme是一个很好的解决scheme。 您还可以创build模型angular色和模型权限(由一对多,多对多……)按照您的意愿进行关联,然后使用如下策略对其进行过滤:

例:

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

最好的祝福

一年半之后,如果有人遇到这种情况, 风帆似乎是一个很好的解决scheme。

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

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