【问题标题】:What's a good way to validate access to models in controller specs?验证对控制器规范中模型的访问的好方法是什么?
【发布时间】:2016-02-10 02:13:28
【问题描述】:

我有Users,它创建了HomeRepairTickets

Firms 可以为他们感兴趣的HomeRepairTickets 创建TicketBids。

我的控制器规范是否应该确保Firms 只能对他们有权访问的HomeRepairTickets 出价?并确保他们只能updateHomeRepairTickets 他们创建?

或者是否有更好的方法来测试适当的身份验证(例如,id 匹配或 authentication_token 匹配)

我正在使用rspec

【问题讨论】:

    标签: ruby-on-rails authorization tdd rspec-rails


    【解决方案1】:

    您应该使用外部授权/基于属性的访问控制 ()。

    ABAC 是 NIST 定义的授权模型,可让您根据属性和策略来描述授权要求。根据您的问题,您可能希望按照以下方式实施政策

    A user can view a ticket if the ticket belongs to the same firm as the user.
    

    使用 ABAC,您可以拥有任意数量的策略。有一个名为 XACML 的标准实现了 ABAC,但我不相信 Ruby 中有任何东西可以实现 XACML。

    您最好的选择是为您提供类似功能的 CanCanCan gem。看看here

    【讨论】:

      【解决方案2】:

      您的问题的简短回答是“是”。

      “公司只能对他们有权访问的 HomeRepairTickets 进行投标”和“公司只能更新他们创建的 HomeRepairTickets”是很好的功能要求(也称为系统行为)。您绝对应该在这个级别进行测试。

      现在,您可能会决定在开发过程中在较低级别进行测试(例如,令牌/ID 匹配等),但最好还是回到测试您的高级需求并确保您的系统符合要求乖巧。

      您的身份验证是否存在于控制器中是另一个话题。就像您选择表示身份验证逻辑的方式一样。但是,这都是好东西。

      【讨论】:

        猜你喜欢
        • 2019-06-27
        • 1970-01-01
        • 1970-01-01
        • 2013-02-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-22
        • 1970-01-01
        相关资源
        最近更新 更多