VS2012 でプロジェクトを MVC5 にアップグレードしたため、実装したカスタム プリンシパルが機能しなくなりました。
プリンシパル:
public class CustomPrincipal : IPrincipal
{
public Boolean IsInRole(String role)
{
return ((CustomIdentity)Identity).User.Roles.Any(r => r.Name == role);
}
public IIdentity Identity { get; private set; }
public CustomPrincipal(UserSession userSession)
{
Identity = new CustomIdentity(userSession);
}
}
カスタム ID:
public class CustomIdentity : IIdentity
{
public String Name { get; private set; }
public String AuthenticationType
{
get
{
return "CustomAuthentication";
}
}
public Boolean IsAuthenticated { get; private set; }
public User User { get; private set; }
public UserSession UserSession { get; private set; }
public CustomIdentity(UserSession userSession)
{
User = userSession.User;
UserSession = userSession;
Name = userSession.User.UserName;
IsAuthenticated = userSession.User.IsApproved && !userSession.User.IsDisabled && !userSession.User.IsLockedOut;
}
}
ユーザーの設定方法:
var principal = new CustomPrincipal(userSession);
HttpContext.Current.User = principal;
[Authorize(Roles = "Administrator")]
属性はもう機能しません。var a = HttpContext.User.IsInRole("Administrator");
ブレークポイントを配置すると、IsInRole
そこに到達することはありませんが、構築されたものが呼び出さHttpContext.Current.User
れ、オブジェクトが含まれていCustomPrincipal
ます。
何が変更または間違っている可能性がありますか?