web-dev-qa-db-ja.com

ASP.NET ID "ロールベース"クレーム

クレームを使用してユーザーに関するステートメントを作成できることを理解しています。

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」は完全に冗長に感じられます。クレームを使用してこのステートメントを他にどのように表現できますか?

18
Dave New

これは、フレームワークによって既に行われています。ユーザーがログインすると、すべてのユーザーロールがクレームとして追加され、クレームタイプは_ClaimTypes.Role_になり、値はロール名になります。

そして、IPrincipal.IsInRole("SuperAdmin")を実行すると、フレームワークは、タイプ_ClaimTypes.Role_および値SuperAdminのクレームがユーザーに存在するかどうかを実際にチェックします。

したがって、特別なことをする必要はありません。ユーザーをロールに追加するだけです。

27
trailmax

ClaimTypeを使用してロールを保存できます Role

claims.Add(new Claim(ClaimTypes.Role, "SuperAdmin"));
17
JCS

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")]属性を使用できるようになります。

2
Macey41