我使用的是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;
}
}
再次感谢任何方向。
答案 0 :(得分:1)
进一步研究一下,我发现失败的原因是我在视图中试图访问主体。感谢ASP.NET MVC - Set custom IIdentity or IPrincipal,虽然这与我的Windows Auth类型项目无关,但它确实引导我正确使用了我的主体。
我做错了什么:
@User.user.myproperty
更改为:
@((User as CustomPrinicpal).user.myproperty
希望这有助于另一个新手不会犯同样的错误