CanCan gem用于MVC .NET

9

我正在寻找一个 NuGet 包,提供类似于 Rails 中 CanCan gem 的功能 (https://github.com/ryanb/cancan)。

有人知道有哪些插件提供了类似的功能吗?或者有简单的实现方式吗?

谢谢


1
你曾经找到过一个好的基于活动的授权实现吗? - GraemeMiller
不幸的是,我没有。最终我编写了一个自定义的Authorize属性。如果你找到了一个好的实现,请告诉我。 - Karan
5个回答

3


1

0

2
我不是那个点踩的人,但我认为这个被点踩的原因是Membership提供了角色权限,而不是活动权限。也许我错了,但是使用Cancan,我可以通过在ability文件中定义做某事的“能力”来限制执行某个操作的访问权限。比如说,如果我有一个图片资源和用户,其中一个用户想要编辑这张图片,我需要用Membership提供者将他放入编辑角色中吗?但是使用Cancan,我只需添加代码即可:“如果用户拥有该图片资源,则允许用户编辑该图片资源”。 - Karan
这种逻辑可以在自定义的“Authorize”属性中实现。 - Jakub Konecki

0

请查看 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>
   }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接