разрешить доступ к модели только конкретным пользователям - PullRequest
0 голосов
/ 17 декабря 2011

поэтому сначала моя структура модели:

компания имеет много пользователей, пользователь принадлежит компании

model1 принадлежит компании, компания имеет много model1

model2 принадлежиткомпании, у компании есть много model2

для индексного действия model1, я просто делаю что-то вроде

@model1 = current_user.company.model1s # i use devise for auth

в моем контроллере, я ставлю сначала

before_filter :authenticate_user!

проблема в том, что действие show (конечно) показывает каждому зарегистрированному пользователю каждую запись модели один.

Каков наилучший вариант ограничить записи model1 и model2 только пользователями, которые принадлежат компании, к которой принадлежат model1 и model2?

спасибо!

1 Ответ

1 голос
/ 17 декабря 2011

В общем случае используйте плагин или драгоценный камень (в произвольном порядке) 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})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...