流畅的安全单元测试



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

expectations.Expect<HomeController>(x=>x.Index()).Has<IgnorePolicy>();

但是,我正在寻找的是,如果我能编写特定于角色的测试。

例如,如果我只授予管理员角色访问权限到HomeController的Index((,我想测试类似的东西

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

我在网上找不到任何示例,或者在 FLuentSecurity.TestHelper 中找到任何可以帮助我做到这一点的扩展。 有什么想法吗?

Has 扩展有一个采用谓词的重载:

expectations.Expect<HomeController>(x => x.Index())
    .Has<RequireRolePolicy>(policy => policy.RolesRequired.Contains("Admin"));

如您所见,RequireRolePolicy 公开了一个可以对其进行测试的 RolesRequired 属性。

如果您发现自己对一组特定的角色进行了大量检查,我建议您创建一个自定义策略,然后只检查该策略。在 github 上的示例应用程序中有一个示例(管理员策略(:https://github.com/kristofferahl/FluentSecurity/blob/master/FluentSecurity.SampleApplication/AdministratorPolicy.cs

虽然我得到了这个工作,但发现 Fluent Security 存在严重限制。它无法区分具有相同名称的两个操作方法!

例如

public ActionResult Edit(int id){}

[HttpPost]
public ActionResult Edit(SomeCommand command){}

如果我想在编辑(获取(和编辑(发布(时将来宾的访问权限授予管理员用户,我无法通过Fluent Security执行此操作,因为它将两种方法标识为一种方法。我不会推荐这个库,因为这是一个严重的限制!

最新更新