我有一个多租户应用程序,公司有很多用户和许多客户。 我使用before_filters保护了视图和控制器,因此current_user只能查看属于该用户公司的客户端。这工作正常,未经授权的用户收到“您没有足够的权利执行此操作”消息。但是当用户更改URL时,例如“/ clients / 1 / edit”改为“clients / 2 / edit”,然后他可以编辑其他公司的客户。什么是保护这个的最好方法?
答案 0 :(得分:0)
扩展您的策略以保护clients
控制器 - 您需要检查每个操作的客户端记录的所有权,因为只有一些人应该能够访问某些客户端。
您应该能够继续使用您所拥有的任何解决方案。另一种方法是使用CanCan之类的东西来集中访问,并且可以使用户只能访问的更简单,更直接的调试(更重要的是,通过测试套件确认)他们应该有什么机会。
用于Rails的常见/流行授权宝石的Here is a list解决了用户访问资源的问题。
无论您最终选择哪种方法,我都无法强调覆盖安全访问和测试覆盖等内容的重要性。它永远不会完美(因为你可能会忘记测试一些东西),但它会降低你破坏已经存在的安全访问限制的可能性,方法是将你的安全相关测试保持为尽可能最新的。