亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Mongo 聚合嵌套數組,查找

Mongo 聚合嵌套數組,查找

Go
心有法竹 2023-06-19 14:02:21
我正在使用 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 回答

?
SMILET

TA貢獻1796條經驗 獲得超4個贊

我能夠通過 3 個步驟解決問題:

  1. 包括每個角色的所有權限并添加一個名為checked. 這增加了數據冗余,但這不是一個大問題。

  2. 在集合中做一個group by現場。resourceroles

  3. 在服務器端privileges為每個resource設置為 false 的人填充缺失值。isEditable

我不得不在服務器端遍歷數據,但這是我能想到的最有效的方法。


查看完整回答
反對 回復 2023-06-19
  • 1 回答
  • 0 關注
  • 181 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號