gpt4 book ai didi

node.js - Node js中基于关系的ACL

转载 作者:搜寻专家 更新时间:2023-10-31 23:16:44 25 4
gpt4 key购买 nike

我正在尝试在 Node js 中实现某种权限框架,使用 sequelize 作为 ORM(使用 Postgres)。经过几个小时的研究,我能找到的最接近现有 npm 模块的方法是使用 acl。使用 acl sequelize 来支持我的堆栈。

问题是 acl 模块似乎分配了一个角色,该角色将获得一组对特定资源的所有实例 的权限。但是,我需要根据该用户的现有关系对实例进行许可。

例如,考虑一个简单论坛的许可系统。它为每个角色提供以下权限:

    // 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", "*");

假设我还想为注册用户添加编辑自己帖子的功能,并且用户与他们创建的所有帖子都有关系。

这个模块有没有办法做到这一点,或者任何其他模块可以在数据库/ORM 级别支持这种行为?

如果没有,我必须实现一个自定义的,那么创建这样的东西的最佳方法是什么。

最佳答案

有比较新的库CASL .我是这个图书馆的作者。并且可以很容易地实现您的用例:

const { AbilityBuilder } = require('casl')

const ability = AbilityBuilder.define((can, cannot) => {
can('read', 'all')
can(['update', 'delete'], 'Article', { author_id: loggedInUser.id })
})

上面的代码基本上说:- 任何人都可以阅读一切- 任何人都可以更新和删除 author_id 等于登录用户 id 的文章

稍后你可以做:

ability.can('delete', 'Post') 
//or
ability.can('update', post)
// where post variable is an instance of your Post model

还有一篇文章针对您的用例解释了如何将 CASL 与 MongoDB 和 Express 集成。

关于node.js - Node js中基于关系的ACL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38556732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com