5

ASP MVC5 RC では、役割システムが機能しませんでした。私のデータベースにはすべての必要なテーブルがあり、ロールが存在しますが、ユーザーがロールにいるかどうかを証明すると、常に false が返されます (SQL 例外などはありません)!?

IPrincipalどこかで役割システムを有効にする必要がありましたか?

テストコード:

AccountController accCont = new AccountController();

// check role exist : result = true
var roleExist = await accCont.IdentityManager.Roles.RoleExistsAsync("61c84919-72e2-4114-9520-83a3e5f09de1");

// try find role by name : result = role object
var role = await accCont.IdentityManager.Roles.FindRoleByNameAsync("ProjectAdministrator");

// check with AccountController instance :  result = true
var exist = await accCont.IdentityManager.Roles.IsUserInRoleAsync(User.Identity.GetUserId(), role.Id);

// check if current user is in role : result (both) = false????
var inRole = User.IsInRole(role.Id);
var inRole2 = User.IsInRole(role.Name);

また、名前空間のIIdentity.GetUserId()拡張メソッドのようなカスタム拡張を構築しようとしています。Microsoft.AspNet.Identity.Owin

namespace Microsoft.AspNet.Identity
{
   public static class IdentityExtensions
   {
       public static string IsUserInRole(this IIdentity identity)
       {
           if (identity == null)
           {
               throw new ArgumentNullException("identity");
           }
           ClaimsIdentity identity2 = identity as ClaimsIdentity;
           if (identity2 != null)
           {
               var result = identity2.FindFirstValue(IdentityConfig.Settings.GetAuthenticationOptions().RoleClaimType);

               return null; // later result
           }
           return null;
       }
   }
}

しかし、クレームタイプの結果RoleClaimTypeは常にnull:(私は本当にこれにこだわっています.

ご協力ありがとうございました!シュテフェン

4

2 に答える 2

2

User.IsInRole基本的に、現在サインインしているユーザーのクレームを調べています。サインイン ロジックはどのようなものですか? それが、ユーザー ID に変わる Cookie の作成を担当するものです。IsInRoleメソッドが正しく機能するには、Role クレームが適切に設定されている必要があります。

于 2013-09-30T19:35:36.043 に答える