2010-08-05 27 views
1

我想在我們創建的Web應用上實現角色和權限,我正在使用System.Web.Security.SqlRoleProvider來實現此目的。 我的問題是,每個客戶端都希望能夠配置誰可以或不可以在系統中執行操作,並且沒有兩個客戶端需要相同的操作,因此創建基本的Admin,User,Manager角色來覆蓋所有這些都不夠。在c#web應用程序中實現多個角色和權限的最佳方式?

我所建議,每個屏幕所要做的就是創建角色如下

Screen1Create, Screen1Update, Screen1Delete, Screen1Read 
Screen2Create, Screen2Update, Screen2Delete, Screen2Read 

等。

然後,我會允許客戶選擇每個用戶的角色,這將是存儲在cookie中,當用戶登錄。

然後我可以讀取cookie並使用user.isinrole檢查,如果每個方法可以由當前用戶調用。

我意識到有一個cookie的大小約束,我需要知道。除此之外,這聽起來是否可行,是否有更好的方法來做到這一點?

非常感謝您的任何意見。

回答

0

請記住,cookie是用戶提供的輸入,因此如果要將用戶的權限存儲在cookie中,則必須使用密鑰散列函數(例如HMAC-SHA256)來確保用戶不授予他們自己額外的權限或者,如果您將所有權限存儲在數據庫中,則它將在客戶端計算機中保持不變,並且每次您希望使用它時都不需要驗證其完整性。

2

真的,如果你想自己編寫這個程序到cookie級別,你就有可能打開安全漏洞。做到這一點的方法是將表單身份驗證與基於角色的授權相結合。 Asp.net將爲用戶提供防篡改cookie。

如果實現了角色,你可以很容易標記方法:看

[PrincipalPermission(SecurityAction.Demand, Role="Screen1Create")] 

或使用代碼,如果有人在一個特定的角色。

大量的信息: http://weblogs.asp.net/scottgu/archive/2006/02/24/ASP.NET-2.0-Membership_2C00_-Roles_2C00_-Forms-Authentication_2C00_-and-Security-Resources-.aspx

+0

感謝您的鏈接。 是的這是我設想實施角色/權限檢查的方式。我想最小化我點擊數據庫的次數,所以我想使用加密的cookie。此cookie中的值將在登錄時添加。 您認爲這是獲得需要的權限級別靈活性的最佳方式嗎? – user411810 2010-08-05 11:36:49

+0

是的,這絕對是最好的方式。設置也很簡單:只需使用principalpermission屬性標記方法,以確保沒有人不應該調用它(他們會得到安全異常)。然後,只需檢查某人的角色即可禁用按鈕。 角色存儲在HttpContext.Current.User中,因此您不必在每個請求中都訪問數據庫。 基於表單的角色認證示例:http://www.codeproject.com/KB/web-security/formsroleauth.aspx – Arnoud 2010-08-05 11:49:17

相關問題