1

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ます。

何が変更または間違っている可能性がありますか?

4

0 に答える 0