在asp.net mvc中处理不同类型的用户

问题描述

| 我在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 (将#修改为@)