如何在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] },
免责声明:我没有使用它自己。