我正在寻找提供与 Rails 中的 CanCan gem 类似的功能的 NuGet 包(https://github.com/ryanb/cancan)。
有谁知道提供类似功能的插件?或者一个简单的方法来实现这个?
谢谢
我正在寻找提供与 Rails 中的 CanCan gem 类似的功能的 NuGet 包(https://github.com/ryanb/cancan)。
有谁知道提供类似功能的插件?或者一个简单的方法来实现这个?
谢谢
我最终查看了http://www.develop.com/wifclaimsbasedauthorizationone,它的功能与 CanCan 非常相似。
例如
ClaimsPrincipalPermission.CheckAccess("Customer","Add");
将检查用户是否有权添加客户。
我们正在测试http://thinktecture.github.com/Thinktecture.IdentityModel.45/
基本上是基于声明的 .Net 授权
使用 MVC5 和 One ASP.Net Claims 直接融入 .Net 的核心
经过长时间的搜索,我发现这些文章很有用:
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
Microsoft 于 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 作为数据存储。
最近,我在搜索有关基于活动的授权的内容,发现了一些有趣的教程,如何实现它:https ://mkarczewski.wordpress.com/2013/10/21/activity-based-authorization-in-modular-systems/
我也找到了这个库,看起来很酷!这是东西,我希望能找到。https://github.com/michelgrootjans/CanI/blob/master/README.md
在 .NET 中,您应该使用Membership Provider和Authorize
属性。
在 ASP.NET Core 文档中查看此页面。它有点类似于 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>
}