问题描述
|
我在Web应用程序上有3种不同类型的用户(具有不同的角色)进行交互,他们都执行某些任务-有些可以完全相同,例如创建报价,其他报价对于该特定用户而言可能是唯一的,例如签署报价。
为了更加清晰,三种用户类型:客户,供应商,客户。
客户或客户可以创建报价,但是只有客户可以签署报价。
如何确保我的应用程序允许客户访问客户专用控制器,而供应商则可以访问供应商特定的控制器或区域。通过自定义属性?是否将用户类型存储在Cookie中?这样安全吗?或会话状态?有人登录到系统后,我会发回一个LoggedOnDTO对象,在该对象上存储用户名,用户ID和用户类型。
注意:我从创建用户的方式离开了asp.net构建,我拥有自己的自定义表以及用于登录系统的自定义机制。我有一个注册的Model 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\"));
}
创建cookie时,我可以简单地存储\“ ClientUser \”,\“供应商\”或它们在cookie中的作用。
然后,我可以创建一个属性并读取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);
}
}
在我的基本控制器下注册属性,我有一个简单的工作解决方案?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)