#ruby-on-rails
#ruby-on-rails
Вопрос:
Я пытаюсь это сделать, потому что приложения будут использоваться несколькими организациями. Поэтому я хочу, чтобы каждый пользователь видел только данные, соответствующие его организации, которые я могу добавить .where(organization_id: current_user.organizations_id) в каждом методе в каждом контроллере, но это будет много изменений. Есть ли лучшие решения? Спасибо 🙂
Ответ №1:
Аналогичное более общее решение использует accessible_by(current_ability)
cancancan gem (или другое решение для авторизации, такое как pundit и т. Д.) Для точной настройки (под капотом он будет делать то же where(organization...
самое):
ability.rb:
can :manage, SomeModelName, organization_id: user.organization_id
can :read, SomeOtherModel, user_id: user.id
этот подход лучше, чем возможности жесткого кодирования в вашем коде, потому что при изменении правил доступа вам не придется снова просматривать весь ваш код, чтобы изменить их.
Другой способ: фактически, вы можете избавить себя от изменения всех запросов с помощью default_scope
и нарушения принципов mvc, перейдя current_user
к области видимости модели, но я не советую этого делать — позже с этим может стать очень сложно работать.