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

questionAnswers(1)

yourAnswerToTheQuestion