我有3種不同類型的用戶(具有不同的角色)在我的web應用程序上進行交互,他們都執行一些任務 - 有些可以完全相同,例如,創建一個報價,其他人可以是該特定用戶唯一的,例如簽署報價。在asp.net中處理不同類型的用戶mvc
爲了更加清晰,有3種類型的用戶:客戶,供應商,客戶。
客戶或客戶可以創建報價,但只有客戶可以簽署報價。
如何確保我的應用程序允許客戶訪問客戶speficic控制器和供應商訪問供應商特定的控制器或區域。通過自定義屬性?我是否將用戶類型存儲在cookie中?這安全嗎?或會話狀態?只要有人登錄到系統,我發回一個LoggedOnDTO對象,我在其上存儲了用戶名,用戶ID和用戶類型......
注意:我離開了asp.net構建用戶的方式,我有我自己的自定義表與我的自定義機制登錄到系統。我有一個註冊的模型Bindiner,看起來爲前綴和我在一個強類型對象的每個動作發送...
示例代碼:
[HttpGet]
public ActionResult AddComment(int quoteid, ClientUserDTO loggedonclientuser)
{
}
[HttpGet]
public ActionResult AddCommentSupplier(int quoteid, Supplier loggedonsuppluser)
{
}
編輯:此方法由於某種原因似乎很簡單得多...有什麼問題嗎?任何可能的安全問題?線程?
我的會話控制器是:
if (_authService.isValidUser(model))
{
var data = _authService.GetAuthenticationCookieDetails(model);
AuthenticateCookie.AddDetailsToCookie(data);
return Redirect(Url.Action("Index", "Activity"));
}
當我創建我的餅乾......我可以簡單的店「ClientUser」,「供應商」或什麼角色他們是餅乾裏。
然後我可以創建一個屬性並讀取cookie數據以查看它們是否是有效的用戶,例如
public class ClientAuthorizationAttribute : AuthorizeAttribute
{
public bool AlwaysAllowLocalRequests = false;
protected override bool AuthorizeCore(System.Web.HttpContextBase httpContext)
{
if (AlwaysAllowLocalRequests && httpContext.Request.IsLocal)
{
bool authorized = false;
var result = UserDetails.GetTypeFromTicket(httpContext.User.Identity as FormsIdentity);
if (result.Equals("client", StringComparison.OrdinalIgnoreCase))
{
authorized = true;
}
//throw no access exception?
return authorized;
}
return base.AuthorizeCore(httpContext);
}
}
在我的基礎控制器下注冊屬性,我有一個簡單的工作解決方案?
+1是的,這是最好的辦法,一旦你看到一些代碼非常容易。 – 2011-05-31 15:23:06
謝謝...我將在週一看看這個,並接受你的答案,然後如果它是好的... – Haroon 2011-06-02 11:23:14
如果您需要關於此主題的一些信息,請告訴我。 – Jonathan 2011-06-03 08:06:13