Adicionando declarações de função - devo usar o IClaimsTransformer
Gostaríamos de adicionar muitas reivindicações de função ao principal atual (usamos oAuthorize(Roles)
atributo) e encontrou oIClaimsTransformer
que parece um ajuste perfeito.
Nós o registramos assim
app.UseClaimsTransformation(new ClaimsTransformationOptions
{
Transformer = new GetRolesFromDatabaseClaimsTransformer(new RoleManager2(Configuration.GetConnectionString("ourcoolapp")))
});
E a transformação é assim:
public Task<ClaimsPrincipal> TransformAsync(ClaimsTransformationContext context)
{
// A hacky way to not load on all requests. Better ideas?
if (!context.Context.Request.Path.Value.Contains("api/"))
{
return Task.FromResult(context.Principal);
}
var roleClaims = RoleManager.GetRolesForUser(context.Principal.Identity.Name).Select(roleName => new Claim("role", roleName));
var claims = new List<Claim> { };
var identity = context.Principal.Identity as ClaimsIdentity;
claims.AddRange(identity.Claims);
claims.AddRange(roleClaims);
var userIdentity = new ClaimsIdentity(claims, "local");
var userPrinicpal = new ClaimsPrincipal(userIdentity);
return Task.FromResult(userPrinicpal);
}
Pergunta: Existem maneiras alternativas ou mais inteligentes de adicionar as reivindicações de função?
obrigado
Larsi