【问题标题】:fluent security unit testing流畅的安全单元测试
【发布时间】:2012-05-22 15:19:28
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: asp.net-mvc unit-testing authentication authorization fluent-security


    【解决方案1】:

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

    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

    【讨论】:

    • 很高兴听到这个消息!请不要忘记接受这个作为问题的答案。
    【解决方案2】:

    虽然我完成了这项工作,但发现 Fluent Security 存在严重限制。 无法区分同名的两个动作方法!!

    例如

    public ActionResult Edit(int id){}
    

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

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

    【讨论】:

    • 很抱歉您发现 FluentSecurity 在某些方面缺乏,但这个答案与您的原始问题无关。请删除此答案!至于您缺少的功能,我们一直在努力改进,如果您在 github 上发布问题,我们将尽力支持您的请求。
    猜你喜欢
    • 2013-03-19
    • 1970-01-01
    • 2015-11-14
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多