クレームを使用してユーザーに関するステートメントを作成できることを理解しています。
var claims = new List<Claim>();
claims.Add(new Claim(ClaimTypes.Name, "Peter"));
claims.Add(new Claim(ClaimTypes.Email, "[email protected]"));
しかし、「ロールベース」のクレームをどのように保存すればよいですか?例えば:
ユーザーはスーパー管理者です。
claims.Add(new Claim("IsSuperAdmin, "true"));
値パラメーター「true」は完全に冗長に感じられます。クレームを使用してこのステートメントを他にどのように表現できますか?
これは、フレームワークによって既に行われています。ユーザーがログインすると、すべてのユーザーロールがクレームとして追加され、クレームタイプは_ClaimTypes.Role
_になり、値はロール名になります。
そして、IPrincipal.IsInRole("SuperAdmin")
を実行すると、フレームワークは、タイプ_ClaimTypes.Role
_および値SuperAdmin
のクレームがユーザーに存在するかどうかを実際にチェックします。
したがって、特別なことをする必要はありません。ユーザーをロールに追加するだけです。
ClaimTypeを使用してロールを保存できます Role
claims.Add(new Claim(ClaimTypes.Role, "SuperAdmin"));
ClaimsType.Roleのタイプのクレームでロールを指定し、次に示すように、ClaimsIdentityでロールを含むクレームタイプを指定する必要があります。
_var claimsIdentity = new ClaimsIdentity(new[]
{
new Claim(ClaimTypes.Email, "[email protected]"),
new Claim(ClaimTypes.Name, "Peter"),
new Claim(ClaimTypes.Role, "SuperAdmin"),
},
"ApplicationCookie", ClaimTypes.Email, ClaimTypes.Role);
_
これにより、コントローラーで[Authorize(Roles = "SuperAdmin")]
属性を使用できるようになります。