我正在尝试执行此操作,因为这些应用程序将由多个组织使用。因此,我希望每个用户只能看到与其组织相对应的数据,我可以在每个控制器的每个方法中添加.where(organization_id:current_user.organisations_id),但这会带来很多变化。 有更好的解决方案吗? 谢谢:)
答案 0 :(得分:0)
类似的更通用的解决方案是使用cancancan gem的accessible_by(current_ability)
(或其他授权的gem解决方案,例如pundit等)进行微调(在引擎盖下,它会执行相同的where(organization...
):
ability.rb:
can :manage, SomeModelName, organization_id: user.organization_id
can :read, SomeOtherModel, user_id: user.id
此方法比代码中的硬编码功能更好,因为当访问规则更改时-您不必再次遍历所有代码来更改它们。
其他方式:
实际上,您可以通过default_scope
来更改所有查询,并通过将current_user
引入模型范围来违反mvc原理,但是我建议您不要这样做-以后使用它会变得非常困难。>