Есть ли альтернативное решение для добавления User.where (organisation_id: current_user.organisation_id) в каждый метод users_controller? - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь это сделать, потому что приложения будут использоваться несколькими организациями.Поэтому я хочу, чтобы каждый пользователь видел только данные, соответствующие его организации, которые я могу добавить .where (organisation_id: current_user.organisations_id) в каждом методе каждого контроллера, но это будет много изменений.Есть ли лучшие решения?Спасибо:)

1 Ответ

0 голосов
/ 18 апреля 2019

Подобное более общее решение использует accessible_by(current_ability) из cancancan gem (или другого решения для авторизации, например, pundit и т. Д.) Для тонкой настройки (под капотом он будет делать то же самое where(organization...):

способность.rb:

can :manage, SomeModelName, organization_id: user.organization_id
can :read, SomeOtherModel, user_id: user.id

этот подход лучше, чем возможности жесткого кода в вашем коде, потому что при изменении правил доступа вам не придется снова просматривать весь код, чтобы изменить их.

Другоеспособ: На самом деле, вы можете сэкономить, изменяя все запросы с помощью default_scope и нарушая принципы mvc, перенося current_user в область действия модели, но я советую против этого - позже это может стать очень трудным для работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...