私は単純なサンドボックスプロジェクトを持っています.net Core Identityの仕組みをよりよく理解するために使用していますが、私は誰かが説明できるように少し矛盾しています。このプロジェクトはEntity Frameworkを使用しています。アイデンティティのロールが設定されていません
https://medium.com/@goodealsnow/asp-net-core-identity-3-0-6018fc151b4#.2env44446私はこの awesome awesomeプロジェクトを設定するのに役立つ記事を使用しました。ユーザクラスは次のとおりです。
public class User : IdentityUser<int>
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string TempPassword { get; set; }
}
私は3人のユーザーと3つの役割、各役割に1人のユーザー、「所有者」、「管理者」、および「ユーザー」とデシベルを播種しました。私は
auth.AddPolicy("Owner", policy =>
{
policy.RequireAuthenticatedUser();
policy.RequireRole("Owner");
});
auth.AddPolicy("Admin", policy =>
{
policy.RequireAuthenticatedUser();
policy.RequireRole("Admin", "Owner");
});
auth.AddPolicy("User", policy =>
{
policy.RequireAuthenticatedUser();
});
ので[Authorize("Admin")]
仕事のように私の属性は素晴らしい、私の行動のためのいくつかのポリシーを追加しました。私もそう
public static class PrincipalExtensions
{
public static bool IsOwner(this ClaimsPrincipal principal)
{
return principal.IsInRole("Owner");
}
public static bool IsAdmin(this ClaimsPrincipal principal)
{
return principal.IsInRole("Admin") || principal.IsInRole("Owner");
}
public static bool IsUser(this ClaimsPrincipal principal)
{
return principal.Identity.IsAuthenticated;
}
}
ので、私はif(User.IsAdmin())
を行うことができ、これは同様に完璧に動作など、いくつかの主要な機能拡張を追加しました。それは奇妙な取得する場所ここで
は、私は次のコードをステップ実行した場合、私は混乱の結果を得る...
です。
var user = await _userManager.GetUserAsync(User);
var userRoles = await _userManager.GetRolesAsync(user);
await _userManager.AddToRoleAsync(user, "Owner");
最初の行には私にUser
オブジェクトがあります。そのオブジェクトにはロール(user.Roles
)のコレクションがありますが、ユーザーはにロールがありますが、空(Count = 0)と表示されます。
2行目は、ユーザーのRoles
を取得し、正しく入力されます。
3番目の行がユーザーに「所有者」ロールを追加し、正しく機能する(dbが更新されます)だけでなく、ローカル変数user
が突然この役割をuser.Roles
に持っています!ユーザーの他の役割はまったく表示されないことに注意してください。
私は基本的に2つの質問があります:1. user
オブジェクトの先頭にはuser.Roles
が含まれていないのはなぜですか? 2.役割を追加した後に突然同期されるのはなぜですか?
何か助けていただければ幸いです。
リンクありがとうございます。最初は、「なぜそれをオブジェクトに入れるのではなく、なぜそれをオブジェクトに置くのですか」と言うことになりましたが、そのページのバックログセクションには、それが来ると言います。 – nurdyguy
ええ、最高の、 'ユーザー。Roles'は読み込み専用ですので、自分でも読み込むことはできません! – nurdyguy