Asp.net mvc 用于MVC.NET的CanCan gem
我正在寻找NuGet包,它提供了与rails()中的CanCan gem类似的功能 有人知道提供类似功能的插件吗?还是一种简单的实现方法Asp.net mvc 用于MVC.NET的CanCan gem,asp.net-mvc,permissions,cancan,Asp.net Mvc,Permissions,Cancan,我正在寻找NuGet包,它提供了与rails()中的CanCan gem类似的功能 有人知道提供类似功能的插件吗?还是一种简单的实现方法 谢谢在.NET中,您应该使用和授权属性。我最后看到它的功能与CanCan非常相似 比如说 ClaimsPrincipalPermission.CheckAccess("Customer","Add"); 将检查用户是否具有添加客户的权限 我们正在测试 基本上是基于声明的.Net授权 通过MVC5和一个ASP.Net声明,经过长时间的搜索,我发现这些文章非常有
谢谢在.NET中,您应该使用和
授权
属性。我最后看到它的功能与CanCan非常相似
比如说
ClaimsPrincipalPermission.CheckAccess("Customer","Add");
将检查用户是否具有添加客户的权限
我们正在测试
基本上是基于声明的.Net授权
通过MVC5和一个ASP.Net声明,经过长时间的搜索,我发现这些文章非常有用:
更新
微软2013年推出的最新版本:
样本:
我更喜欢CodeProject教程中使用的代码,它基于Thinktecture guys的框架,源代码位于:
请记住,从持久性的角度来看,CodeProject文章已经过时了。
现在MembershipReboot支持EntityFramework、MongoDB和RavenDB作为数据存储。最近,我搜索了一些关于基于活动的授权的内容,发现了一些有趣的教程,介绍了如何实现它: 我还发现了这个图书馆,看起来很酷!这是我希望找到的东西 查看ASP.NET核心文档。这有点像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, Model, Operations.Edit))
{
<p><a class="btn btn-default" role="button"
href="@Url.Action("Edit", "Document", new { id = Model.Id })">Edit</a></p>
}
@if(等待AuthorizationService.authorizationasync(用户、模型、操作、编辑))
{
}
我不是投票人,但我认为这是因为会员资格提供了角色权限,而不是活动权限。也许我错了,但是对于Cancan,我可以通过在能力文件中定义“能力”来限制执行特定操作的访问。假设我有一个图片资源和用户,一个用户想要编辑图片-我需要让他在会员提供商中担任编辑角色吗?使用cancan,我可以简单地添加代码:“用户拥有编辑图片资源的权限(如果他拥有该资源)”,这种逻辑可以在customAuthorize
属性中实现。您是否找到基于活动的授权的良好实现?不,很遗憾,我没有。我最后编写了一个自定义授权属性。如果你找到一个很好的实现方法,请告诉我。
@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>
}