2012-06-20 3 views
9

Я ищу пакет NuGet, который обеспечивает аналогичную функциональность, как камень CanCan в рельсах (https://github.com/ryanb/cancan).CanCan gem для MVC .NET

Кто-нибудь знает плагин, который обеспечивает аналогичную функциональность? Или простой способ реализовать это?

Благодаря

+1

ли вам когда-либо найти хорошую реализацию авторизации на основе деятельности? – GraemeMiller

+0

нет, к сожалению, я этого не сделал. В результате я написал специальный атрибут Authorize. Дайте мне знать, если вы найдете хорошую реализацию. – Karan

ответ

0

В .NET вы должны использовать Membership Provider и Authorize атрибуты.

+0

Не могли бы вы объяснить, пожалуйста? –

+2

Я не являюсь нисходящим, но я думаю, что причина этого была ограничена тем, что членство предоставляет разрешение на роли, а не разрешения на активность. Возможно, я ошибаюсь, но с Cancan у меня была возможность ограничить доступ для выполнения определенного действия, указав «способность» что-то делать в файле возможностей. Скажем, у меня есть ресурс изображения и пользователи, и один пользователь хотел бы * редактировать * изображение - мне нужно было бы поставить его в роли редактирования с поставщиками членства? С cancan я могу просто добавить код, который говорит: «У пользователя есть разрешение на * редактирование * ресурса изображения, если он его владеет» – Karan

+0

Такая логика может быть реализована в пользовательском атрибуте «Авторизовать». –

3

В конце концов я посмотрел http://www.develop.com/wifclaimsbasedauthorizationone, он делает все, что делает CanCan.

Например

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

проверить бы имел ли пользователь разрешение на добавление клиентов.

Мы тестируем http://thinktecture.github.com/Thinktecture.IdentityModel.45/

В основном претензии на основе Авторизация для .Net

С MVC5 и один ASP.Net Иски выпекают прямо в ядро ​​.Net

3

После долгого долгих поисков я Установлено, что эти очерки полезные:

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

UPDATE
последние новости от Microsoft представила в 2013 году выпуска: http://blogs.msdn.com/b/webdev/archive/2013/06/27/introducing-asp-net-identity-membership-system-for-asp-net-applications.aspx
Samples:
https://stackoverflow.com/a/18751036/316343
https://github.com/rustd/AspnetIdentitySample http://msdn.microsoft.com/en-us/library/hh377151.aspx

Я предпочитаю один используемый в CodeProject учебник, который основан на рамках от Thinktecture, исходный код доступен по адресу:
https://github.com/brockallen/BrockAllen.MembershipReboot https://github.com/thinktecture/Thinktecture.IdentityModel.45

Только помните, что статья CodeProject устарела с точки инерционности зрения.
Теперь MembershipReboot поддерживает EntityFramework, MongoDB и RavenDB как хранилище данных.

1

Недавно я искал что-то о деятельности на основе разрешения, и я нашел интересный урок, как реализовать это: https://mkarczewski.wordpress.com/2013/10/21/activity-based-authorization-in-modular-systems/

Я также нашел эту библиотеку, и, кажется, очень здорово! Это то, чего я надеялся найти. https://github.com/michelgrootjans/CanI/blob/master/README.md

0

Оформить заявку this page в документации по основному компоненту ASP.NET. Его несколько похоже на то, что cancan делает.

Вы пишете Authorization Handler следующим образом:

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; 
     } 
    } 

Теперь вы можете использовать следующий код в контроллерах:

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

или в ваших просмотров:

@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> 
    } 
Смежные вопросы