c# - mvc - dotnet authorization
ASP.NET 5 Autorizar contra dos o más políticas (4)
¿Es posible aplicar la autorización contra dos o más políticas? Estoy usando ASP.NET 5, rc1.
[Authorize(Policy = "Limited,Full")]
public class FooBarController : Controller
{
// This code doesn''t work
}
Si no, ¿cómo puedo lograr esto sin usar políticas? Hay dos grupos de usuarios que pueden acceder a este controlador: "Completo" y "Limitado". Los usuarios pueden pertenecer a "Full" o "Limited", o ambos. Solo deben pertenecer a uno de los dos grupos para acceder a este controlador.
Net Core tiene una opción para tener múltiples AuthorizationHandlers que tengan el mismo tipo de Requerimiento de Autorización. Solo uno de estos debe tener éxito para pasar la autorización https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies?view=aspnetcore-2.1#why-would-i-want-multiple-handlers-for-a-requirement
No como tú quieres; Las políticas están diseñadas para ser acumulativas. Por ejemplo, si usa dos atributos separados, ambos deben pasar.
Tienes que evaluar las condiciones O dentro de una sola política. Pero no tiene que codificarlo como RUP dentro de un solo controlador. Puede tener un requisito que tiene más de un controlador. Si alguno de los manejadores marca el éxito, entonces se cumple el requisito. Ver el Paso 6 en mi Taller de Autorización .
Una vez que se configura una nueva política "LimitedOrFull" (asumiendo que coinciden con los nombres de los tipos de reclamaciones), cree un requisito como este:
options.AddPolicy("LimitedOrFull", policy =>
policy.RequireAssertion(context =>
context.User.HasClaim(c =>
(c.Type == "Limited" ||
c.Type == "Full"))));
intenta usar Role en su lugar
[Authorize(Role = "Limited,Full")]