如何在 sails.js 中创建动态策略
How to create dynamic policies in sails.js
我一直在做一个项目,我需要根据 rights/levels 对 sails.js
中用户的访问权限来创建和分配策略
每个用户都可以访问他级别以下的所有级别,比如admin有9级,他可以访问9级以下的所有级别
目前在 sails 中所有策略都存储在
api/policies
文件夹并分配给
中的控制器
config/policies.js
module.exports.policies = {
UserController: {
"create": ['canCreate'],
"list": ['canRead'],
"show": ['canRead'],
},
AuthController: {
'*': true,
}};
我的问题是如何根据来自数据库的访问级别制定动态策略
我用谷歌搜索了它,但在 sails.js 中没有找到关于如何创建动态策略的任何信息,所以在这里发帖。
感谢您对此的帮助。
谢谢
Comprehensive user permissions and entitlements system for sails.js and Waterline. Supports user authentication with passport.js, role-based permissioning, object ownership, and row-level security.
一个简单的方法是为每个访问级别创建一个策略。
policies/level01.js
policies/level02.js
等。 . .
您的政策文件将检查他们的 session/token 以确保他们符合该政策的标准。
policies/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');
}
};
此致
一年半后,如果有人遇到这个问题,sails-must 似乎是一个很好的解决方案。
RabbitController: {
nurture: must().be.a('rabbit').mother,
feed: [must().be.nice.to('rabbits'), must().have('rabbit').food]
},
免责声明:我自己没有用过。
我一直在做一个项目,我需要根据 rights/levels 对 sails.js
中用户的访问权限来创建和分配策略每个用户都可以访问他级别以下的所有级别,比如admin有9级,他可以访问9级以下的所有级别
目前在 sails 中所有策略都存储在
api/policies
文件夹并分配给
中的控制器config/policies.js
module.exports.policies = {
UserController: {
"create": ['canCreate'],
"list": ['canRead'],
"show": ['canRead'],
},
AuthController: {
'*': true,
}};
我的问题是如何根据来自数据库的访问级别制定动态策略
我用谷歌搜索了它,但在 sails.js 中没有找到关于如何创建动态策略的任何信息,所以在这里发帖。
感谢您对此的帮助。
谢谢
Comprehensive user permissions and entitlements system for sails.js and Waterline. Supports user authentication with passport.js, role-based permissioning, object ownership, and row-level security.
一个简单的方法是为每个访问级别创建一个策略。
policies/level01.js policies/level02.js 等。 . .
您的政策文件将检查他们的 session/token 以确保他们符合该政策的标准。
policies/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');
}
};
此致
一年半后,如果有人遇到这个问题,sails-must 似乎是一个很好的解决方案。
RabbitController: {
nurture: must().be.a('rabbit').mother,
feed: [must().be.nice.to('rabbits'), must().have('rabbit').food]
},
免责声明:我自己没有用过。