0

アプリを mvc4 asp.net4 から .net4.5 に更新していますが、ユーザー ロールが機能していません。

現在、私はこのコードを使用しています

protected void Application_AuthenticateRequest(Object sender, EventArgs e)
    {
        HttpCookie authCookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName];
        if (authCookie != null)
        {
            FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
            string[] roles = authTicket.UserData.Split(new Char[] { ',' });
            GenericPrincipal userPrincipal = new GenericPrincipal(new GenericIdentity(authTicket.Name), roles);
            Context.User = userPrincipal;
 //Or
//HttpContext.Current.User = userPrincipal;
        }
    }

上記の助けを借りて現在のユーザーにロールを追加し、コントローラー [Authorize(Roles = "Admin, Guest")] または User.IsInRole("Admin") でユーザーロールを確認できます

しかし、私のコードはMVC4 ASP.Net 4.5では機能しません

Role Provider を使用したくありません。たとえば、Roles.CreateRole または Roles.AddUserToRole の場合

誰かがこれで私を助けてくれませんか ありがとう

4

2 に答える 2

0

MVC 4 .NET 4.0 でも問題を再現できます。.NET 4.0 で再現しない理由がわかりません。

Application_AuthenticateRequest でプリンシパルを置き換えても、そのように見えます。プリンシパルは、単純なメンバーシップ コードによって最終的に System.Web.Security.RolePrincipal に置き換えられます。私は、RolePrincipal がデータベースにクエリを実行してユーザーのロール データを取得すると考えています。RoleProvider を使用しないため、RolePrincipal にはロール データが含まれず、以前のプリンシパルからロール データが削除されます。

可能な回避策は、Application_AuthenticateRequest を Application_AuthorizeRequest に変更することです。これは、単純なメンバーシップ セット RolePrincipal の後に発生します。ところで、HttpContext.User と Thread.CurrentPrincipal の両方を同じユーザーに設定する必要があります。

上記の回避策が有効かどうかをお知らせください。

于 2013-11-05T18:25:27.773 に答える