2012-06-20 20 views
9

Busco paquete NuGet que proporciona una funcionalidad similar a la gema CanCan en carriles (https://github.com/ryanb/cancan).joya CanCan para MVC NET

¿Alguien sabe de un plugin que proporciona una funcionalidad similar? O una forma simple de implementar esto?

Gracias

+1

¿Te ha ¿Alguna vez encontró una buena implementación de autorización basada en actividades? – GraemeMiller

+0

no, desafortunadamente no lo hice. Terminé escribiendo un atributo Autorizar personalizado. Avíseme si encuentra una buena implementación de la misma. – Karan

Respuesta

0

En .NET usted debe utilizar Membership Provider y Authorize atributos.

+0

¿Podría explicarse menos, por favor? –

+2

No soy el que menosprecia, pero creo que la razón por la que se votó negativamente fue porque la Membresía otorga permisos sobre las funciones, en lugar de permisos sobre una actividad. Tal vez estoy equivocado, pero con Cancan tuve la capacidad de restringir el acceso para realizar una determinada acción al definir la "capacidad" de hacer algo en el archivo de habilidades. Supongamos que tengo un recurso de imagen y usuarios, y a un usuario le gustaría * editar * la imagen. ¿Tendría que ponerlo en una función de edición con los proveedores de membresía? Con cancan puedo simplemente agregar un código que diga: "El usuario tiene permiso para * editar * un recurso de imagen si lo posee" – Karan

+0

Este tipo de lógica se puede implementar en el atributo personalizado 'Autorizar'. –

3

terminé mirando http://www.develop.com/wifclaimsbasedauthorizationone lo hace muy parecido a como lo hace CanCan.

Por ejemplo

ClaimsPrincipalPermission.CheckAccess("Customer","Add"); 

gustaría comprobar si el usuario tenía permiso para agregar clientes.

Estamos probando http://thinktecture.github.com/Thinktecture.IdentityModel.45/

Autorización Básicamente reclamaciones basadas en .Net

Con MVC5 y ASP.Net Una reclamaciones se cuece al horno a la derecha en el núcleo de .Net

3

Después de una larga búsqueda tiempo me se encuentran estos ensayos útiles:

http://msdn.microsoft.com/en-us/library/ff359101.aspx http://www.codeproject.com/Articles/639458/Claims-Based-Authentication-and-Authorization http://www.codetails.com/punitganshani/using-claims-identity-with-simplemembership-in-asp-net-mvc/20130525
http://leastprivilege.com/
http://www.postsharp.net/aspects/examples/security

ACTUALIZACIÓN
último de Microsoft introdujo en 2013 la liberación: http://blogs.msdn.com/b/webdev/archive/2013/06/27/introducing-asp-net-identity-membership-system-for-asp-net-applications.aspx
Muestras:
https://stackoverflow.com/a/18751036/316343
https://github.com/rustd/AspnetIdentitySample http://msdn.microsoft.com/en-us/library/hh377151.aspx

prefiero la utilizada en CodeProject tutorial que se basa en los marcos de Thinktecture chicos, el código fuente está disponible en:
https://github.com/brockallen/BrockAllen.MembershipReboot https://github.com/thinktecture/Thinktecture.IdentityModel.45

Sólo recuerda que el artículo CodeProject es obsoleta desde el punto de vista de la persistencia.
Ahora MembershipReboot ADO.NET Entity Framework apoyo, MongoDB y RavenDB como almacén de datos.

0

Salida this page en la documentación de ASP.NET Core. Es algo similar a lo que Cancan hace.

Usted escribir un controlador de autorización de este modo:

public class DocumentAuthorizationHandler : 
     AuthorizationHandler<OperationAuthorizationRequirement, Document> 
    { 
     public override Task HandleRequirementAsync(AuthorizationHandlerContext context, 
                OperationAuthorizationRequirement requirement, 
                Document resource) 
     { 
      // Validate the operation using the resource, the identity and 
      // the Name property value from the requirement. 

      return Task.CompletedTask; 
     } 
    } 

Ahora puede utilizar el siguiente código en los controladores:

if (await authorizationService.AuthorizeAsync(User, document, Operations.Read)) 
    { 
     return View(document); 
    } 
    else 
    { 
     return new ChallengeResult(); 
    } 

o en sus puntos de vista:

@if (await AuthorizationService.AuthorizeAsync(User, Model, Operations.Edit)) 
    { 
     <p><a class="btn btn-default" role="button" 
      href="@Url.Action("Edit", "Document", new { id = Model.Id })">Edit</a></p> 
    }