remarks example cref c# asp.net-mvc

example - remarks c#



Múltiples atributos de autorización en el método (2)

Tengo problemas para especificar dos atributos de Autorización separados en un método de clase: se debe permitir el acceso al usuario si cualquiera de los dos atributos es verdadero.

La clase de Athorization se ve así:

[AttributeUsage(AttributeTargets.All, AllowMultiple = true)] public class AuthAttribute : AuthorizeAttribute { . . .

y la acción:

[Auth(Roles = AuthRole.SuperAdministrator)] [Auth(Roles = AuthRole.Administrator, Module = ModuleID.SomeModule)] public ActionResult Index() { return View(GetIndexViewModel()); }

¿Hay alguna manera de resolver esto o necesito repensar mi enfoque?

Esto debe ejecutarse en MVC2.


Hay una mejor manera de hacer esto en versiones posteriores de asp.net, puede hacer tanto OR como AND en roles. Esto se realiza a través de una convención, listando múltiples roles en una única Autorización que realizará un OR donde la adición de múltiples atributos de autorización llevará a cabo AND.

O ejemplo

[Authorize(Roles = "PowerUser,ControlPanelUser")]

Y ejemplo

[Authorize(Roles = "PowerUser")] [Authorize(Roles = "ControlPanelUser")]

Puede encontrar más información sobre esto en el siguiente enlace https://docs.microsoft.com/en-us/aspnet/core/security/authorization/roles


MVC procesa varias instancias de AuthorizeAttribute como si estuvieran unidas con AND . Si desea un comportamiento OR , deberá implementar su propia lógica para las comprobaciones. Preferiblemente, implemente AuthAttribute para tomar múltiples roles y realizar una comprobación propia con la lógica OR .

Otra solución es usar AuthorizeAttribute estándar e implementar un IPrincipal personalizado que implementará el bool IsInRole(string role) para proporcionar un comportamiento ''OR''.

Un ejemplo está aquí: https://.com/a/10754108/449906