我正在使用 MongoDB 和 Go 創(chuàng)建一個 Web 應(yīng)用程序,其中包括基于角色的訪問控制。我將有關(guān)此的信息存儲在 2 個集合中,permissions并且roles.這就是這兩個集合的樣子。權(quán)限{ "operation": "create", "resource": "project"}{ "operation": "read", "resource": "project"}{ "operation": "update", "resource": "project"}{ "operation": "delete", "resource": "project"}{ "operation": "create", "resource": "user"}resourceoperation是執(zhí)行an 的對象。所以如果有一些操作不能在某些資源上執(zhí)行,那么,我不需要存儲它。例如,只能創(chuàng)建用戶,因此只create user需要存儲。目前在應(yīng)用程序范圍內(nèi)只有 4 個操作(創(chuàng)建、讀取、更新、刪除),但可能會增加,比如upload可能會出現(xiàn)。角色{ "role": "admin", "display_name": "Administrator", "permissions": [ { "operation": "create", "resource": "project" }, { "operation": "read", "resource": "project" }, { "operation": "update", "resource": "project" }, { "operation": "delete", "resource": "project" } ]}角色包含角色,要在 UI 上顯示的角色名稱以及該角色擁有的權(quán)限集。我需要使用特定格式的 REST API 將此信息發(fā)送到 UI,這將描述特定角色是否可以使用標志對資源執(zhí)行操作,以及對資源的checked特定操作是否可通過使用進行編輯國旗isEditable。例如,權(quán)限集合不包含對資源用戶的刪除操作,因此它不應(yīng)是可編輯的,因此標志設(shè)置為 false。同樣可以創(chuàng)建用戶,因此將其設(shè)置為 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 聚合來執(zhí)行此操作?或者我是否需要在我的架構(gòu)中進行修改,如果是,那么我應(yīng)該進行哪些修改。
1 回答

SMILET
TA貢獻1796條經(jīng)驗 獲得超4個贊
我能夠通過 3 個步驟解決問題:
包括每個角色的所有權(quán)限并添加一個名為
checked
. 這增加了數(shù)據(jù)冗余,但這不是一個大問題。在集合中做一個
group by
現(xiàn)場。resource
roles
在服務(wù)器端
privileges
為每個resource
設(shè)置為 false 的人填充缺失值。isEditable
我不得不在服務(wù)器端遍歷數(shù)據(jù),但這是我能想到的最有效的方法。
- 1 回答
- 0 關(guān)注
- 193 瀏覽
添加回答
舉報
0/150
提交
取消