我有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