Asp.net

如何在 ASP.NET MVC 中手動設置使用者角色?

  • August 19, 2009

我正在進行的這個項目需要我保留一個本地管理員使用者數據庫,並為普通使用者使用一個外部數據庫。在 admin db 中通過身份驗證的任何人都應分配“admin”角色,通過其他 db 進行身份驗證的任何人將始終分配“user”角色。

我可以手動分配這些角色嗎?我不需要角色提供者或任何東西的複雜性,因為我只使用這兩個角色,這兩個角色總是基於他們認證的數據庫。

如果您可以提供範常式式碼或指向某些文件的連結,那將是一個巨大的幫助。謝謝!

編輯:

目前我沒有使用角色提供者並且創建一個似乎很麻煩。我知道它不是“最佳實踐”,但我只需要在登錄期間分配 2 個角色中的 1 個(這永遠不會改變)。在數據庫中儲存角色資訊也是沒有意義的,因為使用者已經被他們的角色分成了 2 個數據庫。

這是一些虛擬碼:

if (AdminDB.ValidateUser(username,password)==true) {
    SetAuthCookie(username);
    AssociateUserWithRole(username, 'admin');
} elseif (UserDB.ValidateUser(username,password)==true) {
    SetAuthCookie(username);
    AssociateUserWithRole(username, 'user');
} else {
    // Login failed.
}

我不知道它的“ThisSession.AssociateUserWithRole”部分。基本上,使用者經過身份驗證後,我需要告訴 .NET 使用者屬於哪個角色。

實現角色提供者並不是特別難——特別是如果您只實現角色檢查,而不是角色管理。只需實現您需要的那些部分,然後讓其餘部分拋出 NotImplementedExceptions。如果您只有一個應用程序,您也不必太在意該部分。請注意,您需要的部分將取決於框架如何使用它,而不是您將如何使用它。我認為例如,即使您只想檢查它們是否處於特定角色,您也需要實現返回所有使用者角色的位。

也就是說,您可以省略整個 RoleProvider 並在 Session 中完成所有事情。在這種情況下,您將實現自己的AuthorizeAttribute並將其身份驗證和角色檢查位替換為您自己的。一旦通過身份驗證,將使用者的角色儲存在會話中,並使用您的屬性和提供給您裝飾它的方法/類的屬性的參數在那裡檢查它。

引用自:https://stackoverflow.com/questions/1297534