MVC2 ::我如何*使用*自定义IIdentity类?

我试图从web服务中存储一整套有关用户的信息。 由于这是关于当前通过身份验证的用户的信息,我认为将这些信息存储在自定义IIdentity实现中是有意义的。

自定义MagicMembershipProvider.GetUser(string id, bool userIsOnline)调用webservice并返回一个MagicMembershipUser实例,其中填充了所有字段(部门,电话号码,其他员工信息)。

自定义成员资格提供程序和自定义成员资格用户都正常工作

将成员资格用户信息放入可在每个控制器中访问的IPrincipal User对象的最佳方式是什么以及哪里?

我一直试图围绕MVC2应用程序中IIdentity,IPrincipal和Role授权的安全程序流程 - 但我真的在这里苦苦挣扎,可以使用一些指导。 有关于部件的Internet Ton文章,但对整体而言并不多。

编辑

我迄今为止的最佳猜测是在FormsAuthenticationService分配HttpContext.Current.User

public void SignIn(string userName, bool createPersistentCookie)
{
  if (String.IsNullOrEmpty(userName)) 
    throw new ArgumentException("Value cannot be null or empty.", "userName");

  try
  {
    FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
    MagicMembershipUser magicUser = _provider.GetUser("", false) 
      as MagicMembershipUser;
    MagicIdentity identity = new MagicIdentity(userName, magicUser);
    GenericPrincipal principal = new GenericPrincipal(identity, null);

    HttpContext.Current.User = principal;
  }
  catch (Exception)
  {
    throw;
  }

    }

将成员资格用户信息放入可在每个控制器中访问的IPrincipal用户对象的最佳方式是什么以及哪里?

在自定义[Authorize]过滤器实现中。 您可以重写AuthorizeCore方法并调用基本方法,如果它返回true,则查询您的成员资格提供程序并将自定义魔法标识注入上下文中。

例:

public class MagicAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var isAuthorized = base.AuthorizeCore(httpContext);
        if (isAuthorized)
        {
            var username = httpContext.User.Identity.Name;
            var magicUser = _provider.GetUser(username, false) as MagicMembershipUser;
            var identity = new MagicIdentity(username, magicUser);
            var principal = new GenericPrincipal(identity, null);
            httpContext.User = principal;
        }
        return isAuthorized;
    }
}

现在剩下的就是用[MagicAuthorize]属性来装饰你的基础控制器。

链接地址: http://www.djcxy.com/p/48155.html

上一篇: MVC2 :: How do I *USE* a Custom IIdentity Class?

下一篇: MembershipProvider, IPrincipal, IIdentity?