Agregar reclamos de roles: ¿debo usar IClaimsTransformer?
Nos gustaría agregar muchos reclamos de roles al director actual (utilizamos elAuthorize(Roles)
atributo), y encontré elIClaimsTransformer
eso parece un ajuste perfecto.
Lo hemos registrado así
app.UseClaimsTransformation(new ClaimsTransformationOptions
{
Transformer = new GetRolesFromDatabaseClaimsTransformer(new RoleManager2(Configuration.GetConnectionString("ourcoolapp")))
});
Y la transformación es así:
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);
}
Pregunta: ¿Existen formas alternativas o más inteligentes de agregar las declaraciones de roles?
Gracias
Larsi