Существует ли наилучший подход к реализации ролей пользователей при использовании маршрутов ресурсов RESTful?
Скажите, у меня есть следующие ресурсы:
User has_many Tickets
Event has_many Tickets
Ticket belongs_to Person, Event
А потом, скажем, у меня есть два типа пользователей: клиенты и агенты. Оба будут входить в систему, но с различным доступом к ресурсам и функциональностью в зависимости от их ролей. Например:
Клиенты могут получить доступ:
- Индекс событий, шоу
- Индекс билета (определяется пользователем), показать, купить / создать, вернуть / удалить
- Персона создает, показывает, обновляет
Агенты могут получить доступ:
- Индекс событий, показать, создать, обновить, удалить
- Индекс билетов, показать, продать / создать, обновить, вернуть / удалить
- Индекс личности, показать, создать, обновить, удалить
Какой из 4 основных подходов ниже будет чище и гибче?
Отдельные контроллеры в папках ролей и ресурсы в пространствах имен, например:
namespace "agent" do
resources :events, :tickets, :people
end
namespace "customer" do
resources :events, :tickets, :people
end
Отдельные контроллеры по ролям, например:
AgentController
def sell_ticket, etc
CustomerController
def buy_ticket, etc
Общие контроллеры с отдельными действиями, где это необходимо, например:
TicketController
before_filter :customer_access, :only => :buy
before_filter :agent_access, :except => :buy
def buy #accessed by customer to create ticket
def sell #accessed by agent to create ticket
Общие действия с условными выражениями, например:
TicketController
def create
if @role == :customer
#buy ticket
elsif @role == :customer
#sell ticket
end
end