我正在使用 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 聚合来执行此操作?或者我是否需要在我的架构中进行修改,如果是,那么我应该进行哪些修改。
SMILET
相关分类