¿Hay un mejor enfoque consensuado para implementar roles de usuario cuando se utilizan rutas de recursos RESTful?Estructura de aplicación para recursos RESTful basados en roles
Decir que tengo los siguientes recursos:
User has_many Tickets
Event has_many Tickets
Ticket belongs_to Person, Event
y luego decir que tengo más de dos tipos de usuarios: los clientes y agentes. Ambos iniciarán sesión en el sistema, pero con acceso a diferentes recursos y funcionalidad en función de sus funciones. Por ejemplo:
los clientes pueden acceder a:
- índice de eventos, muestran
- índice de entradas (con ámbito por el usuario), espectáculo, comprar/crear, retorno/borrar
- persona crear, mostrar, actualización
Los agentes pueden acceder a:
- índice de eventos, mostrar, crear, actualizar, eliminar
- índice de entradas, mostrar, vender/crear, actualizar, reembolso/eliminar
- Índice persona, demostración, crear, actualizar, eliminar
¿Cuál de las 4 los enfoques generales a continuación serán más limpios y más flexibles?
controladores separados dentro de las carpetas de papel y los recursos en los espacios de nombres, por ejemplo:
namespace "agent" do
resources :events, :tickets, :people
end
namespace "customer" do
resources :events, :tickets, :people
end
controladores separados por papel, por ejemplo:
AgentController
def sell_ticket, etc
CustomerController
def buy_ticket, etc
controladores compartidos con acciones separadas cuando sea necesario, por ejemplo:
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
Acciones compartidas con declaraciones condicionales, p. Ej .:
TicketController
def create
if @role == :customer
#buy ticket
elsif @role == :customer
#sell ticket
end
end
El modelo no tiene conocimiento del usuario que se ha autenticado. Eso generalmente es administrado por el controlador. Además, OP está preguntando sobre la mejor manera de manejar la seguridad. Esto no se puede personalizar en vistas. ¿Qué hay de las conexiones API? ¿Cómo se aplica la seguridad para diferentes roles de usuario allí? No desea repetir el código, por lo que debe estar en un lugar central, es decir: controlador. Entonces, la pregunta es, ¿cómo puede administrar su controlador de forma sensata para agregar este tipo de control sobre los roles y permisos de los usuarios? –