我正在使用 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 個步驟解決問題:
包括每個角色的所有權限并添加一個名為
checked
. 這增加了數據冗余,但這不是一個大問題。在集合中做一個
group by
現場。resource
roles
在服務器端
privileges
為每個resource
設置為 false 的人填充缺失值。isEditable
我不得不在服務器端遍歷數據,但這是我能想到的最有效的方法。
- 1 回答
- 0 關注
- 181 瀏覽
添加回答
舉報
0/150
提交
取消