В общем случае используйте плагин или драгоценный камень (в произвольном порядке) CanCan , Клиренс или один из других здесь . Что бы это ни стоило, я успешно использовал acl9 в прошлом.
Большинство из этих решений реализуют контроль авторизации на уровне контроллера / представления и таким образом контролируют доступ к конкретным экземплярам моделей (строкам AKA в базе данных).
Также см. этот вопрос , который охватывает тему, с точки зрения которой лучше всего.
Наконец, если вы хотите свернуть свои собственные, самое простое решение - присоединиться от model1
и model2
к company
и user
в ваших запросах. Из вашего описания, model1
и model2
имеют столбец company_id
, а company
имеет столбец user_id
. В зависимости от того, как у вас установлены ассоциации в ваших моделях, вы можете сделать что-то вроде:
Model1.joins(:company => :user).where(:users => {:id => 1})
или (при условии соответствующей структуры аутентификации):
Model1.joins(:company => :user).where(:users => {:id => current_user.id})