Tag: acl

NodeJS Api框架build议,包括Graphql和ACL

我正在寻找一些NodeJS框架/软件包的build议。 小背景:我曾经在一个新手到专业级别写PHP代码。 主要使用Laravel和CodeIgniter。 由于工作变化和其他方面的原因,我在两年内没有碰过PHP。 在过去的半年中,我发现了NodeJS,我非常喜欢它,它的快速和不仅为Web创build项目,而且在桌面应用程序和移动设备上都使用相同语言的能力就是这样一个Plus。 我目前正在为我的新家工作一个家庭自动化工具,但我有点挣扎,因为我找不到一个适当的易于使用的框架(或软件包的组合)具有以下function。 (这只适用于后端,对于frondend,我将使用angular2,4,5(现在有angular度版本2)) 这是我目前的标准: 简单的API框架或简单的方法来实现模型。 访问控制(ACL) Graphql 我试过Loopback框架,我真的很喜欢它。 它检查我的列表的API框架和ACL,并且几乎可以映射到每个数据库,但是不支持Graphql。 我尝试添加一些额外的软件包(loopback-graphql-服务器,loopback-graphql和loopback-graphql-checkacl),但不幸的是我无法使它们正常工作,以太网ACL无法正常工作,或根本没有工作。 (我花了几个小时debuggingloopback-graphql-server来找出为什么我在graphql中得到一个访问被拒绝的消息时,它完全使用其余的API) 所以我正在寻找一些框架或包的组合,在这个框中工作。 任何build议都会有所帮助。

RoleMapping.USER或RoleMapping.ROLE&ACL

我正在使用回环框架 。 我不清楚什么时候将RoleMapping与静态angular色和ACL一起使用,在阅读这里和这里的文档之后。 我有一个启动脚本,在我的应用程序中插入一些主要的静态angular色(pipe理员,批准者,validation者等),并在ACL中使用这些angular色。 在我看来,当我声明用户angular色,我必须使用RoleMapping.USER : const approver = yield app.models.User.create({ email: 'approver@lorem.com', password: 'secret-apprpver-123', status: 'active', emailVerified: true }); const roleApprover = yield app.models.Role.findOne({ where: {name: 'approver'} }); yield app.models.RoleMapping.create({ principalId: approver.id, principalType: app.models.RoleMapping.USER, roleId: roleApprover.id }); 而在ACL中,我必须使用RoleMapping.ROLE : { "principalType": "ROLE", "accessType": "EXECUTE", "principalId": "approver", "permission": "ALLOW", "property": "setApprove" } 但是不是很清楚,每次我都要去debugging它,每次我都要pipe理新的angular色或新的ACL时,会有一些黑暗的魔法和祈祷。 有没有人可以解释我该怎么做?

如何跨多个模块访问节点acl?

我有一些麻烦了解如何使用mongoose模块使用节点ACL 。 只要一切都在一个文件中,我就可以很好地运行。 但是,如果我想将路由分解成单独的文件,我怎样才能访问其他模块中的acl实例? 我可以得到acl与下面的代码工作就好了。 它初始化,在数据库中创build集合,并向用户添加权限。 // App.js const mongoose = require('mongoose'); const node_acl = require('acl'); const User = require('./models/User'); mongoose.connect(/* connection string */); acl = new node_acl(new node_acl.mongodbBackend(mongoose.connection.db, '_acl')); acl.allow([ { roles: ['guest'], allows: [{ resources: 'login', permissions: 'get' }], }, { roles: ['admin'], allows: [{ resources: '/users', permissions: '*' }] } ]); var […]

LoopBack用户特定的数据过滤/访问

目前正在testing一堆框架以确定我公司未来使用的良好候选人,LoopBack通过几乎完美的需求吸引了我的注意力。 但是,我感觉到他们的ACL模型在某些情况下是相当有限的。 让我们看看以下用例:在合作旅游pipe理网站上,用户可以创build和/或join公共旅行。 我们假设以下API: /Travels列出用户拥有的所有旅行 /Travels/public列出所有公共旅行 /Travels/{id}/join使用给定的IDjoinTravel build立这样一个API是否需要重新发明轮子? 或者是一些中间件实施? 每个字段的ACL也是一样。 假设你有一些清单项目,一些手动添加,一些自动生成。 除了更改“完成”字段之外,是否只能在自动写入操作中阻止写入操作?

Node-acl方法“isAllowed”总是意外地返回false

我正在试图用mongodb实现node-acl,并表示允许控制每个文档,例如 用户查看所有文档 用户只能编辑/删除自己的文件。 我采取了这种方法: 当用户注册时,我使用后保存挂钩来创build一个用户并为其分配一个angular色: UserSchema.post('save', function(doc) { var roles = doc.roles || []; if (!roles.length) { roles = ['user']; } acl.addUserRoles(doc._id.toString(), roles, function(err) { console.log(err, 'added user'); }); }); 现在,用户已经在系统中创build,他们现在可以创build一个旅程。 像上面一样,我使用后保存挂钩将给定的权限添加给给定的用户在给定的资源: TripSchema.post('save', function(trip) { acl.allow(trip.user.toString(), '/trips/' + trip._id, '*', function(err) { }); }); 然后,我使用自定义的简单中间件function来检查给定的用户是否有权访问给定的资源: var middleware = function (req, res, next) { acl.isAllowed(req.user._id.toString(), req.path, […]

基于关系的节点js中的ACL

我试图在Node js中实现某种权限框架,使用sequelize作为ORM(与Postgres)。 经过几个小时的研究,我能find的与现有npm模块做的最接近的事情是使用acl和acl sequelize来支持我的堆栈。 问题是,它看起来像acl模块分配一个angular色,该angular色将获得一组权限到特定资源的所有实例 。 但是,我需要根据该用户的现有关系对实例进行权限许可。 作为一个例子,考虑一个简单论坛的权限系统。 它为每个angular色提供这些权限: // allow guests to view posts acl.allow("guest", "post", "view"); // allow registered users to view and create posts acl.allow("registered users", "post", ["view", "create"]); // allow administrators to perform any action on posts acl.allow("administrator", "post", "*"); 假设我也想为注册用户添加编辑他们自己post的function,并且用户与他们创build的所有post有关系。 有没有办法让这个模块做到这一点,或任何其他模块,可以在数据库/ ORM级别上支持这种行为? 如果没有,我必须实现一个自定义的,最好的方法来创build这样的东西。

“访问资源权限不足”:使用Mongoose + Express的ACL中间件

我正在尝试为基本路由validation设置ACL中间件 。 在这个例子中,我只是想确保用户(在这个例子中是我)拥有'pipe理员'权限。 我的路线如下所示: // define the home page route router.get('/', acl.middleware(1, '594a984a9815beb8219dca22', 'admin'), function (req, res) { acl.userRoles('594a984a9815beb8219dca22', function(err, roles){ res.send(roles) }) }) 用中间件,我得到的消息是: HttpError: Insufficient permissions to access resource 如果我在没有中间件的情况下运行这个路由,usersRole()函数确实会返回 ['admin'] 作为回应。 我不知道还有什么需要发生的ACL来承认我作为pipe理员。 我显然有'pipe理员'的angular色。 UPDATE 这是连接代码: var dbConn = mongoose.connect(configDB.url); // connect to our database acl = new acl(new acl.mongodbBackend(mongoose.connection.db)) 我的config.url是: module.exports = […]

在Node.js中支持MySQL的ACL

我正在使用Node.js与MySQL。 在npm中是否有一个支持node.js和MySQL的ACL库? 我没有find类似的问题在stackoverflow的答案。

如何将jwtauthentication与ACL混合

我已经能够使用JWT策略实施护照,并且运作良好。 我的jwt保护路线看起来像这样… app.get('/thingThatRequiresLogin/:id', passport.authenticate('jwt', { session: false }), thingThatRequiresLogin.findById); 现在我需要限制某些东西的访问权限,只有属于某个angular色的login用户。 我希望我可以这样expression: app.get('/thingThatRequiresLogin/:id', MAGIC, thingThatRequiresLogin.findById); 其中MAGIC = require logged-in users, but only those with role x or y node_acl似乎是一个很好的解决scheme,我理解了一点,但是我发现这在文档中… 我们可以保护这样的资源: app.put('/blogs/:id', acl.middleware(), function(req, res, next){…} 中间件将保护由req.url命名的资源,从req.session.userId中select用户,并检查req.method的权限,所以上面的代码就是这样的: 我如何将这与我的jwt策略混合? 我唯一的想法是放弃node_acl middleware ,而是添加acl检查代码到我的jwt策略。 但那是我遇到麻烦的地方。 我的jwtfunction如下所示: passport.use(new JwtStrategy(jwtOptions, function(jwt_payload, done) { User.findOne({id: jwt_payload.sub}, function(err, user) { if (err) { return […]

loopback-component-storage acl 401错误

容器模型看起来像这样: { "name": "container", "base": "Model", … "acls": [ { "principalType": "ROLE", "principalId": "$everyone", "permission": "DENY", "accessType": "*" }, { "principalType": "ROLE", "principalId": "admin", "permission": "ALLOW", "accessType": "WRITE" } ] } 当我发布图片时,它会返回一个401错误。 我确定我以“admin”用户身份login,因为我在json模型中使用相同的访问令牌和相同的acl发出两个请求。 对于第一个(不是容器)它是有效的,但对于容器不是。 容器ACL有问题吗? – – -编辑 – – – 从DEBUG开始= loopback:security:acl它返回: —ACL— model container property * principalType ROLE principalId $everyone accessType * permission […]