2

我一直在写关于Fluent Security配置的测试。尽管我可以编写测试来验证控制器操作方法是否应用了特定的策略,例如流利的安全单元测试

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

但是,我在寻找的是,如果我可以编写角色特定的测试。

例如,如果我有只给HomeController的指数()管理员角色的访问,我想测试类似

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

我不觉得在FLuentSecurity.TestHelper净任何实例,或任何扩展,可以帮助我做到这一点。有什么想法吗?

回答

2

的具有延伸具有过载,需要一个断言:

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

正如你可以看到RequireRolePolicy暴露了RolesRequired属性,您可以测试反对。

如果您发现自己正在为特定角色做很多检查,我建议您创建一个自定义策略,然后检查该策略。在github上的示例应用程序中有一个示例(一个AdministratorPolicy):https://github.com/kristofferahl/FluentSecurity/blob/master/FluentSecurity.SampleApplication/AdministratorPolicy.cs

+0

谢谢。有效。 – Renu

+0

很高兴听到它!请不要忘记接受这个问题的答案。 –

0

虽然我得到了这个工作,但发现对Fluent Security有严重限制。 它不能区分两个同名的动作方法!

例如

public ActionResult Edit(int id){} 

[HttpPost] 
public ActionResult Edit(SomeCommand command){} 
如果我想给访问客户的编辑(GET)和Edit(邮政)管理员用户

,因为它确定这两种方法无法通过流利的安全性做作为一个。我不会推荐这个库,因为这是一个严重的限制!

+0

很抱歉,您发现FluentSecurity在某些区域缺乏,但此答案与您的原始问题无关。请删除这个答案! 至于你错过的功能,我们一直在进行改进,如果你在github上发布一个问题,我们将尽我们所能来支持你的请求。 –