Asp.net mvc 流畅的安全单元测试

Asp.net mvc 流畅的安全单元测试,asp.net-mvc,unit-testing,authentication,authorization,fluent-security,Asp.net Mvc,Unit Testing,Authentication,Authorization,Fluent Security,我最近一直在写一些关于我流畅的安全配置的测试。虽然我可以编写测试来验证控制器操作方法是否应用了特定的策略,例如 expectations.Expect<HomeController>(x=>x.Index()).Has<IgnorePolicy>(); expections.Expect(x=>x.Index()).Has(); 然而,我正在寻找的是,如果我可以编写特定于角色的测试 e、 g如果我只授予管理员角色对HomeController的Index()的访

我最近一直在写一些关于我流畅的安全配置的测试。虽然我可以编写测试来验证控制器操作方法是否应用了特定的策略,例如

expectations.Expect<HomeController>(x=>x.Index()).Has<IgnorePolicy>();
expections.Expect(x=>x.Index()).Has();
然而,我正在寻找的是,如果我可以编写特定于角色的测试

e、 g如果我只授予管理员角色对HomeController的Index()的访问权,我想测试如下内容

expectations.Expect<HomeController>(x=>x.Index()).Has<RequireRolePolicy>().For("Admin");
expections.Expect(x=>x.Index()).Has().For(“Admin”);

我在网上找不到任何例子,也没有在FLuentSecurity.TestHelper中找到任何可以帮助我实现这一点的扩展。有什么想法吗?

Has扩展名有一个重载,它接受一个谓词:

expectations.Expect<HomeController>(x => x.Index())
    .Has<RequireRolePolicy>(policy => policy.RolesRequired.Contains("Admin"));
expections.Expect(x=>x.Index())
.Has(policy=>policy.RolesRequired.Contains(“Admin”));
如您所见,RequireRolePolicy公开了一个RoleRequired属性,您可以对其进行测试


如果您发现自己对一组特定的角色进行了大量检查,我建议您创建一个自定义策略,只需检查该策略即可。github上的示例应用程序中有这样一个例子(管理员策略):

虽然我成功地做到了这一点,但发现Fluent安全性受到了严重限制。 无法区分同名的两种操作方法

e、 g


如果我想让管理员用户在编辑(Get)和编辑(Post)时访问Guest,我不能通过Fluent Security实现,因为它将两种方法都标识为一种。我不会推荐这个库,因为这是一个严重的限制

很高兴听到这个消息!请不要忘记接受这个问题的答案。很抱歉,您发现某些领域缺乏FluentSecurity,但这个答案与您原来的问题无关。请删除此答案!至于您缺少的功能,我们一直在努力改进,如果您在github上发布问题,我们将尽力支持您的请求。
public ActionResult Edit(int id){}
[HttpPost]
public ActionResult Edit(SomeCommand command){}