我Users
创建了HomeRepairTickets
。
Firms
可以为他们感兴趣的TicketBid
创建HomeRepairTicket
个。
我的控制器规格是否应该确保Firm
只能对他们有权访问的HomeRepairTicket
出价?并确保他们只能update
HomeRepairTicket
他们创建的?
或者是否有更好的方法来测试适当的身份验证(例如,id匹配或authentication_token匹配)
我正在使用rspec
。
答案 0 :(得分:0)
您应该使用外部授权/基于属性的访问控制(abac)。
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。
答案 1 :(得分:0)
对你的问题的简短回答是'是'。
“公司只能对他们有权访问的HomeRepairTickets出价”和“公司只能更新他们创建的HomeRepairTickets”是很好的功能要求(也就是系统行为)。你绝对应该在这个级别进行测试。
现在,您可能决定在开发过程中进行较低级别的测试(例如,令牌/ ID匹配等),但回到测试您的高级要求并确保您的系统是乖巧。
您的身份验证是否存在于控制器中是另一个主题。与您选择表示身份验证逻辑的方式相同。但是,这都是好事。