Путь направляющих структурировать администраторских/пользователей/общественность контроллеры

Фиктивное приложение для направляющих имеет следующие ресурсы:

Photographers
Images
Comments

A Photographer имеет многих Images, это имеет многих Comments

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

Интерфейс администрирования доступен и может отредактировать и изображения, фотографов и комментарии.

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

Мой вопрос: Что путь направляющих структурировать контроллеры? Я думал о движении с пространствами имен для каждой 'роли' (общественность, учетная запись, администратор) как это:

# For administrator
Admin::PhotographersController
Admin::ImagesController
Admin::CommentsController

# For a logged in photographer
AccountController (?)
Account::ImagesController
Account::CommentsController

# For public
PhotographersController
ImagesController
CommentsController

Однако - некоторые методы этих контроллеров накладываются. Действительно ли это - лучший способ, даже при том, что это не тот DRY?

Спасибо!

5
задан John Topley 6 July 2010 в 14:24
поделиться

2 ответа

Если они пересекаются, вы можете расширить базовые контроллеры в пространства имен учетной записи/админа. Например, вы делаете свой ImagesController, который предназначен для действий, которые могут видеть все. Он расширяет ApplicationController, как обычно. Затем вы делаете свою администраторскую версию ImageController, и она расширяет ImagesController. Затем вы добавляете/переопределяете методы в версии для администратора для требуемого различного поведения, или это может быть просто добавление пары фильтров before, таких как require_admin, например, который проверяет, что текущий_пользователь является пользователем-администратором, и перенаправляет его, если нет.

3
ответ дан 14 December 2019 в 18:55
поделиться

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

resources :photos, :only => [:index, :show] # offer only index and show actions to public 

scope "/admin" do
  resources :photos # full access for logged in users
end

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

Другим способом может быть уникальный макет, без разделов /admin/ и с возможностью редактирования для зарегистрированных пользователей. так что если вы зарегистрированы и являетесь владельцем какой-то фотографии, разрешите редактирование и покажите контекстные ссылки. это дело вкуса :P

.
2
ответ дан 14 December 2019 в 18:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: