我正在使用 MongoDB 和 Go 创建一个 Web 应用程序,其中包括基于角色的访问控制。我将有关此的信息存储在 2 个集合中,permissions并且roles.这就是这两个集合的样子。权限{ "operation": "create", "resource": "project"}{ "operation": "read", "resource": "project"}{ "operation": "update", "resource": "project"}{ "operation": "delete", "resource": "project"}{ "operation": "create", "resource": "user"}resourceoperation是执行an 的对象。所以如果有一些操作不能在某些资源上执行,那么,我不需要存储它。例如,只能创建用户,因此只create user需要存储。目前在应用程序范围内只有 4 个操作(创建、读取、更新、删除),但可能会增加,比如upload可能会出现。角色{ "role": "admin", "display_name": "Administrator", "permissions": [ { "operation": "create", "resource": "project" }, { "operation": "read", "resource": "project" }, { "operation": "update", "resource": "project" }, { "operation": "delete", "resource": "project" } ]}角色包含角色,要在 UI 上显示的角色名称以及该角色拥有的权限集。我需要使用特定格式的 REST API 将此信息发送到 UI,这将描述特定角色是否可以使用标志对资源执行操作,以及对资源的checked特定操作是否可通过使用进行编辑国旗isEditable。例如,权限集合不包含对资源用户的删除操作,因此它不应是可编辑的,因此标志设置为 false。同样可以创建用户,因此将其设置为 true。 { display_name: "System Administrator", role: "admin", permissions: [ { resource: "user", privilages: { create: { checked: false, isEditable: true }, delete: { checked: false, isEditable: false }, update: { checked: false, isEditable: false }, read: { checked: false, isEditable: false } } }, { resource: "project", privilages: { create: { checked: true, isEditable: true }, delete: { checked: true, isEditable: true }, update: { checked: true, isEditable: true }, read: { checked: true, isEditable: true } } } ]}是否可以使用 mongo 聚合来执行此操作?或者我是否需要在我的架构中进行修改,如果是,那么我应该进行哪些修改。
1 回答
![?](http://img1.sycdn.imooc.com/5333a0aa000121d702000200-100-100.jpg)
SMILET
TA贡献1796条经验 获得超4个赞
我能够通过 3 个步骤解决问题:
包括每个角色的所有权限并添加一个名为
checked
. 这增加了数据冗余,但这不是一个大问题。在集合中做一个
group by
现场。resource
roles
在服务器端
privileges
为每个resource
设置为 false 的人填充缺失值。isEditable
我不得不在服务器端遍历数据,但这是我能想到的最有效的方法。
- 1 回答
- 0 关注
- 157 浏览
添加回答
举报
0/150
提交
取消