如何测试控制器以确保授权过滤器以正确的角色应用于它?

Posted

技术标签:

【中文标题】如何测试控制器以确保授权过滤器以正确的角色应用于它?【英文标题】:How do I test a controller to ensure that the authorize filter is applied to it with the correct role? 【发布时间】:2012-05-31 22:08:01 【问题描述】:

我的站点的管理部分有一个控制器,它装饰有授权过滤器,角色设置为管理员。

[Authorize(Roles = "Admin")]
public class SubscriberController : Controller

这很好用,但我想创建一个单元测试以确保不删除过滤器。到目前为止,我已经验证了 Authorize 过滤器是否存在。

        typeof(SubscriberController).Should()
            .BeDecoratedWith<AuthorizeAttribute>(
                "Subscriber controller users must be admins");

如何验证 Roles 参数?我正在使用 Fluent Assertion 1.7.1.1。

现在可以在 Fluent Assertion v2 中使用:

    typeof(SubscriberController).Should()
        .BeDecoratedWith<AuthorizeAttribute>(a => a.Roles.Contains("Admin"),
            "Subscriber controller users must be admins");

【问题讨论】:

【参考方案1】:

现在看来不可能了 - Testing Arguments of Attributes

您可以打开这个帖子并询问进度。

【讨论】:

感谢您的回答...可惜它尚未实施,不幸的是,仅验证访问者已获得授权还不够好,不希望客户更改自己的订阅。 我们应该能够为它想出一个语法。我将在 2.0.0 的积压工作中创建一个项目。 谢谢丹尼斯,那太好了。它将填补 ASP.NET MVC 自动化测试中的一个很大的漏洞,而这个漏洞只能通过全栈集成测试来克服。 2.0 公测版fluentassertions.codeplex.com/releases/view/82423

以上是关于如何测试控制器以确保授权过滤器以正确的角色应用于它?的主要内容,如果未能解决你的问题,请参考以下文章

在赛普拉斯测试中加载页面后,如何可靠地等待 XHR 请求?

如何配置一个网站,该网站对 YouTube 凭据进行身份验证以供控制台应用程序使用?

授权后通过用户角色重定向到特定页面

Asp.Net Core Web API 5.0 和 Angular 中基于自定义角色的授权

OAuth2.0 基础介绍

如何在 AngularJS 中处理基于角色的授权?