无法访问自定义主体

时间:2015-10-26 16:09:34

标签: c# asp.net

我使用的是Windows身份验证和自定义角色。我已经扩展了WindowsPrincipal,因为我希望根据我添加的用户类添加有关用户的其他信息。当我运行应用程序时,它会看到分配给内置用户的CustomPrincipal,而不是附加的" user"物业我已添加。我确定我做的事情非常愚蠢,但这是我第一次进入C#ASP世界,真的很感激一些帮助。这是我的自定义主体和global.asax

自定义主体:

    public class CustomPrincipal : WindowsPrincipal
{
    List<string> _roles;
    private User thisUser = new User();


    public CustomPrincipal(WindowsIdentity identity)
        : base(identity)
    {
        _roles = new List<string>(Roles.GetRolesForUser());
        user = thisUser.getDarUser(identity.Name);

    }

    public User user { get; private set; }

    public override bool IsInRole(string role)
    {
        if (base.IsInRole(role) || _roles.Contains(role) || _roles.Contains("Admin") || _roles.Contains("Dev"))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

和Global.asax:

 protected void Application_AuthorizeRequest(object sender, EventArgs e)
    {
        if (User.Identity.IsAuthenticated)
        {
            IIdentity thisId = User.Identity;
            WindowsIdentity wi = (WindowsIdentity)thisId;
            CustomPrincipal cp = new CustomPrincipal(wi);
            HttpContext.Current.User = cp;
            Thread.CurrentPrincipal = cp;
        }
    }

再次感谢任何方向。

1 个答案:

答案 0 :(得分:1)

进一步研究一下,我发现失败的原因是我在视图中试图访问主体。感谢ASP.NET MVC - Set custom IIdentity or IPrincipal,虽然这与我的Windows Auth类型项目无关,但它确实引导我正确使用了我的主体。

我做错了什么:

@User.user.myproperty

更改为:

@((User as CustomPrinicpal).user.myproperty

希望这有助于另一个新手不会犯同样的错误