gpt4 book ai didi

javascript - MongoDB + Node JS + 基于 Angular 色的访问控制 (RBAC)

转载 作者:IT老高 更新时间:2023-10-28 13:13:12 24 4
gpt4 key购买 nike

目前正在学习 MEAN 堆栈,正在开发一个简单的 TODO 应用程序,并希望为此实现基于 Angular 色的访问控制 (RBAC)。如何在 MongoDB 上设置 Angular 色和权限。

我想要 3 个 Angular 色( Angular 色可能看起来很有趣,但这纯粹是为了学习):

  • 上帝
  • super 英雄
  • 男人

GOD - 类似于 super 管理员,可以在应用程序中做任何事情。 TODO 和其他用户的 C、R、U、D 权限。可以创建一个 TODO 并将其直接分配给任何 SUPER HERO 或 MAN。随时更新或删除 TODO 或用户。

super 英雄 - 类似于管理员,拥有对他的个人数据执行任何操作的超能力 - 用于 TODO 的 C、R、U、D。无法创建任何用户。只能阅读和添加由上帝创建并分配给他/她的 TODO 的评论。

MAN - 只能阅读和添加评论到分配给他/她的 TODO。

总结一下:

GOD - C,R,U,D [全局级别]
super 英雄 - C,R,U,D [私有(private)] + R,U [分配给他]
MAN - R,U [分配给他]

我知道我需要拥有用户和 Angular 色集合。 ROLES 反过来应该有权限等。我如何将它们全部连接起来?

最佳答案

我喜欢给 Angular 色起名字 - GOD、SUPER HERO 和 MAN,易于理解。

由于您使用的是 MEAN 堆栈,并且大部分路由验证都发生在 node 上,因此我希望 Angular 色表保持简单。

Angular 色:

{
_id : 1,
name : GOD,
golbalPerms : true
},
{
_id : 2,
name : SUPER HERO,
privatePerms : true
},
{
_id : 3,
name : MAN
}

用户:

{
_id : 111,
name : Jesus,
roleId : 1
},
{
_id : 222,
name : BatMan,
roleId : 2
},
{
_id : 333,
name : Jack,
roleId : 3
}

当用户登录并将 user 对象发送回客户端时,请确保将 roleId 替换为 DB 中相应的 role 对象。

在 Node JS 上编写代码:

通过完全了解您的用例,我们可以将它们分为以下方法 -

  • 创建用户

  • 创建待办事项

  • 删除待办事项

  • ReadTodo

  • 更新待办事项
  • CommentTodo

  • 分配待办事项

让我们一步一步来,CreateUser

路线代码片段:

app.all('/users', users.requiresLogin);

// Users Routes
app.route('/users')
.post(users.hasPerms('globalPerms'), users.create);

在您的 Controller 中,您可以根据输入 globalPerms 进行验证,如果验证允许通过调用 next() 来创建用户,否则 return对应的错误信息。

现在CreateTodo && DeleteTodo:

他们几乎都用一个小技巧在相同的逻辑上工作。

路线代码片段:

app.all('/todos', users.requiresLogin);

// Users Routes
app.route('/todos')
.post(users.hasPerms('globalPerms','privatePerms'), todos.create);
.delete(users.hasPerms('globalPerms','privatePerms'), todos.delete);

对于创建 Todo,globalPermsGODprivatePermsSUPER HERO 一起使用,两者可以允许。

这里的技巧将在 todos.delete 方法中,只要确保 user.id === todos.createById 否则 SUPER HERO 可能会继续删除 GOD 创建的 Todos .

ReadTodo:

当一个 TODO 被创建时,它应该存储一个 createById code> 和 assignedBy 也应该被记录下来。

这使得许多其他操作变得容易处理。

user.role.globalPerms - 给GOD所有TODO的数据。

user.role.privatePerms - 提供由他/她创建或分配给他/她的 TODO。

user.role.globalPerms === undefined && user.role.privatePerms === undefined - 它的 MAN 并给出只分配给他的 TODO。

UpdateTodo 和 CommentTodo:

这是 ReadTODO DIY 所做的完全复制

最后一个,AssignTodo:

简单的一个,loggedInUser.id === todos.createdById 然后他可以分配给任何人。

这里要记住两件事:

  1. 由于分配部分主要发生在您的 UI (Angular) 前端,我给出了检查 loggedInUser.id === todos.createdById 的方法。以任何方式登录的用户将通过读取操作查看所有 TODO,并可以将其分配给他/她喜欢的任何人。

  2. 确保 super 英雄只能将待办事项分配给自己或其他 super 英雄或男人,但不能分配给上帝。如何在 UI 前面显示分配给选项超出了这个问题的范围。这只是一个提示。

希望这很清楚。

注意:没有必要在 Angular 色集合中向 MAN 授予权限,并且我们管理所有可能的操作。

关于javascript - MongoDB + Node JS + 基于 Angular 色的访问控制 (RBAC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39746718/

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