Rails: Current_user должен видеть записи только из своей группы. Как мне это сделать? - PullRequest
0 голосов
/ 14 сентября 2011

Как я могу структурировать свое приложение на Rails 3.x, чтобы вошедший в систему пользователь мог видеть только записи, связанные с группой, к которой он принадлежит?

Например, (Тема футбола)

Представьте себе эти модели:

Модель команды, представляющая каждую из 30 профессиональных футбольных команд.

Модель пользователя, использующая устройство для аутентификации.Каждый пользователь имеет ассоциацию team_id.

Модель игрока, представляющая каждого игрока в NFL: name: string, team_id: integer.

Каждый пользователь является главным тренером и должен иметь возможность тольковидеть своих игроков в плеерах # index.Rails знает об этом, потому что с главным тренером (пользователем), как и игроками, связан team_id.

Теперь, имея всего два контроллера (Team, Player), кажется, что довольно легко вручную вручную набрать индекс иCRUD-методы для отображения только связанных записей current_user.

def index
  @players = Player.where(current_user.team_id = ?, 'player.team_id')
end

Но представьте, что у вас было 6-10 контроллеров: билеты, сделки, сотрудники, контракты и т. Д. ..... (у всех есть связь team_id)

Существует ли глобальный способ для Rails отображать только записи, связанные с командой current_user?
И ... как Rails не позволяет пользователям вводить случайные идентификаторы в URL-адрес, чтобы найти записи, не связанные с его team_id.(Представьте, что тренер Redskins наберет http://www.thesite.com/players/224/edit) и сможет редактировать игрока Cowboys, у которого player_id = 224.

Спасибо.

Ответы [ 3 ]

2 голосов
/ 14 сентября 2011

Если все модели будут иметь атрибут team_id, вам нужно определить фильтр before в вашем Application Controller по следующим строкам:

def identify_team
  @team = current_user.team
end

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

def index
  @players = @team.players.all
end

Теоретически вы можете использовать контекст через current_user (current_user.team.players.all) в своих контроллерах, но это не будет считаться наилучшей практикой.

С уважением

Robin

0 голосов
/ 14 сентября 2011

попробуйте взглянуть на следующие railscasts , Райан Бейтс отлично объяснит этот материал.Также проверьте обучающий метод веб-сайт.Все эти ссылки дадут вам основу для ассоциаций и того, как настроить ассоциации баз данных между различными моделями, чтобы вы могли достичь того, что вы хотите.эти ссылки должны помочь вам начать:

Само-ссылочная ассоциация

Полиморфная ассоциация

Two Many-to-Множество

Флажки HABTM

Встроенная ассоциация

ActiveRecord :: Прохождение отношений

Запросы на активную запись в Rails 3

Многие ко многим ассоциациям в Ruby on Rails - Учебник по кодированию

0 голосов
/ 14 сентября 2011

Вы можете использовать Ассоциации для этого.Каждая таблица, которая когда-либо имела отношения с пользователем, может иметь ассоциации моделей также в рельсах.

Таким образом, через отношения current_user.players и т. Д. Вы можете получить такое.

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