2012-12-21 75 views
7

我必須開發一個用戶管理應用程序。我需要授權的數據級防爆用戶:ASP.Net中的數據級授權MVC 3

以銀行例如:

  1. 客戶 - 例如:Bank1的,池Bank2,區塊3,BANK4。
  2. 分行狀態 - 例如:STAT1,狀態2,狀態3,State4
  3. 分行區 - 例如:District1,District2,District3,District4
  4. 設施 - 檢查,直接借記,郵品訂購

當用戶登錄後,他只能看到一些客戶,一些州分行,一些地區分行依賴於在用戶管理應用程序中分配給他的分行,設施等。針對不同用戶的這些更改。

請任何人都可以幫助我這個級別的授權任何標準的工具可用,或者如果不是什麼將是良好的db模型呢?

+0

什麼你說的是基於實體的授權。 AFAIK,沒有任何工具可用,因爲創建通用的東西很困難。 –

回答

5

你需要實現自己的Authorization機制,你需要創建您存儲的用戶訪問級別控制表,(假設很多東西)是這樣的:

UserAuthorization (UserId, EntityId, EntityType) 

用戶ID:參考給用戶。

EntityId:您想要授予訪問權的元素的ID。

的EntityType:您希望授予訪問權限要素(客戶,國家,地區,設施)

+--------+----------+------------+ 
| UserId | EntityId | EntityType | 
+--------+----------+------------+ 
|  1 |  2 | CLIENT  | 
|  1 |  2 | STATE  | 
|  1 |  3 | DISTRICT | 
+--------+----------+------------+ 

您可以使用,並應使用整數來表示的EntityType的類型,我這樣寫的文字只是爲例。

1

您可以查看ClaimsPrincipal並使用基於聲明的授權。在.Net 4.5中集成了WIF。可以在這裏看到一個總結http://msdn.microsoft.com/en-us/library/ms729851.aspx

你可能必須要圍繞各個系統中的實體創建訪問控制列表。最終,您需要一種簡單的方法來唯一地定義我認爲使用GUID的實體。然後需要該GUID的聲明。您顯然可能會變得更復雜,並且需要讀取,寫入類型權限。如果您直接授予每個實體的訪問權限,您可能會收到很多索賠。

最後你想對個別實體被定義訪問權限?某種分組可能會更好?如果你可以管理你可以管理所有的國家銀行,如果你管理的地區,可以管理所有區分行等

我會嘗試對用戶分組到組,然後分配訪問權限的組。當您在NTFS管理文件,你很少發現自己授權訪問一個單獨的文件。

如果您授予某人的實體組首先做某種組檢查,如果他們沒有這樣的要求,然後做實體檢查。

可能需要做一些自定義的東西http://msdn.microsoft.com/en-us/library/system.security.claims.claimsauthorizationmanager.aspx。通過聲明,您要編輯銀行等,然後它會檢查您是否有權訪問該特定銀行。我認爲你必須在CheckAccess方法中爲ACL執行邏輯。

也看看http://thinktecture.github.com/Thinktecture.IdentityModel.45/

我還發現了下面的帖子http://leastprivilege.com/2012/06/24/approaches-to-server-side-authorization/ - 末讀Luceros建議。基本如上

+0

答案太含糊。他期望授權訪問個人實體。儘管我圍繞索賠編寫了十幾個應用程序,但我想不出一種簡單的方法來模擬這種細緻的授權索賠。如果你有一個聰明的想法,請只用更詳細的信息來擴展你的答案。 –

+0

關於在實體級別授權通常很容易。這將需要工作:) – GraemeMiller

+0

@GraemeMiller我同意實體級別的授權,增加了數據庫設計的複雜性,添加額外的連接/查詢來知道列表/編輯/視圖的哪些元素,您的存儲庫/ linq/EF /數據訪問代碼獲取有點凌亂和肥胖,但這是一個開發人員的生活=) – JOBG

0

感謝您的回覆。請查找示例數據。它可以達到三個/ n個等級。

User1d用戶名

USR1  John  
USR2  William 
USR3  Joseph 
USR4  Mathew 
USR5  George 

客戶端Id CLIENTNAME

CL1   Barclays 
CL2   LLoyds TSB 
CL3   Natwest 
CL4   Nationwide 
CL5   HSBC 

CountryId國家或地區名稱

CON1  England 
CON2  Wales 
CON3  Scotland 
CON4  Northern Ireland 

CountryId CityId CITYNAME

CON1  CTY1  Liverpool 
CON1  CTY2  Waterloo 
CON1  CTY3  Piccadilly 
CON2  CTY4  Cardiff 
CON2  CTY5  Ammanford 
CON2  CTY6  Abergele 
CON3  CTY7  Glasgow 
CON3  CTY8  Edinburgh 
CON3  CTY9  Aberdeen 
CON4  CTY10  Belfast 
CON4  CTY11  Hannahstown 
CON4  CTY12  Springfield 

CountryId CityId BranchId BRANCHNAME

CON1  CTY1  BRC1  Branch1 
CON1  CTY1  BRC2  Branch2 
CON1  CTY1  BRC3  Branch3 
CON2  CTY4  BRC4  Branch4 
CON2  CTY4  BRC5  Branch5 
CON2  CTY4  BRC6  Branch6 

用戶ID客戶端Id CountryId CityId BranchId

USR1  CL1   CON1  CTY1  BRC1   
USR1  CL1   CON1  CTY1  BRC2   
USR2  CL2   CON1  CTY1  BRC1 
USR2  CL2   CON1  CTY1  BRC2