3

我對我的頭上坦白地說明了實體級授權的要求。我希望得到關於這個權限結構的一些指導,我如何在.NET 4.5中實現它,以及是否有辦法改進它。分層數據方案中的實體級訪問控制

這裏有雲:


我有一組結構化數據如下:

enter image description here

  • 一個Fleet是零個或多個集合Cars
  • 一個Fleet可以包含其他Fleets

艦隊以後可以重新組織和移動周圍組織的目的。

我必須與系統中的權限,身兼數職,涉及到這些實體:

  • 業主:可以從艦隊
  • 經理添加或刪除汽車:指定司機汽車
  • 驅動程序:允許簡單驅動汽車
  • 機械師:被允許修理汽車

授權邏輯允許User在系統中被授予到任何一個Fleet或與一個或多個角色一個Car訪問。

這裏有一些方案,以幫助解釋:

  1. 如果我承認User吉姆訪問Fleet#5Driver的角色,他被允許下驅動艦隊#2的任何汽車。由此產生的權限允許他駕駛汽車#4,5,6
  2. 如果我授予用戶Maura作爲Mechanic訪問Car #1,最終的權限允許她只修理1號車。
  3. 如果我授予用戶薩拉訪問艦隊#2與角色OwnerMechanic,她被允許汽車中添加或刪除她被允許修理汽車#1機隊#2,4,5 , 2,3,4,5,6。
  4. 如果我授予用戶傑里米訪問船隊#1作爲Owner艦隊#6作爲Driver,得到的權限,讓他的汽車添加和刪除所有車隊驅動汽車#7, 8.他不能開車超過#7和8

什麼是一個好方法,這個實體級授權以外的任何其他汽車?

如果很重要,我們使用.NET 4.5.1和EF6 Code First,構建於ASP.net Boilerplate之上。

回答

0

要實現細粒度的授權讓我想起了訪問控制的對象(助理文書主任 - 這是想要的)和訪問請求對象(的ARO - 這是想要的東西)在CakePHP's Access Control List (ACL) description有一些變化:

這裏它簡而言之:

你有ACO(車隊和汽車),將由ARO(所有者,經理,司機,機械師)要求。如果您想知道請求者是否有權訪問某個對象,則會找到該對象的路徑(Can John access "Car #3"?:從根目錄找到「Car#3」的路徑:Fleet #1 > Fleet #2 > Car #3),然後爲每個節點分配默認權限「拒絕」但如果該節點位於請求者允許的節點列表中,則將其切換爲「允許」。如果最後一個節點以「允許」結束,那麼......允許,否則拒絕。

首先理解邏輯是關鍵。其次,以任何語言實施。

我希望它指出你在正確的方向。

乾杯,