我正在寻找NuGet包,它提供与rails(https://github.com/ryanb/cancan)中的CanCan gem类似的功能。
有没有人知道提供类似功能的插件?或者实现这个的简单方法?
由于
答案 0 :(得分:3)
我最终看到了http://www.develop.com/wifclaimsbasedauthorizationone它的功能与CanCan一样。
例如
ClaimsPrincipalPermission.CheckAccess("Customer","Add");
检查用户是否有权添加客户。
我们正在测试http://thinktecture.github.com/Thinktecture.IdentityModel.45/
基本上基于声明的.Net授权
使用MVC5和一个ASP.Net声明直接进入.Net
的核心答案 1 :(得分:2)
经过长时间的长时间搜索,我发现这些文章很有用:
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
微软最新推出的2013年版本:http://blogs.msdn.com/b/webdev/archive/2013/06/27/introducing-asp-net-identity-membership-system-for-asp-net-applications.aspx
样品:
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作为数据存储。
答案 2 :(得分:1)
最近,我在搜索基于活动的授权,我发现了一些有趣的教程,如何实现它:https://mkarczewski.wordpress.com/2013/10/21/activity-based-authorization-in-modular-systems/
我也找到了这个库,看起来很酷!这是我希望找到的东西。 https://github.com/michelgrootjans/CanI/blob/master/README.md
答案 3 :(得分:0)
在.NET中,您应该使用 Membership Provider 和Authorize
属性。
答案 4 :(得分:0)
在ASP.NET Core文档中查看this page。它有点像cancan那样。
您可以像这样编写授权处理程序:
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>
}