suo nulla legati alle rotte, è possibile limitare l'accesso azione te stesso con filtri, cioè
class MyController < ApplicationController
before_filter :check_access
def secure_action_a
end
def secure_action_b
end
private
def check_access
case params[:action]
when 'secure_action_a':
redirect_to root_path, error: "Not Allowed" unless current_user.role == 'admin'
when 'secure_action_b':
redirect_to root_path, error: "Not Allowed" unless current_user.role == 'user'
end
end
end
e anche sul un'azione, devi verificare che l'utente abbia accesso alla risorsa, quindi supponiamo che tu abbia un'azione che mostri una transazione all'utente e che possa vedere le sue transazioni solo se scrivi un codice come:
def transaction
@transaction = Transaction.find(params[:id])
end
quindi hai un grosso problema, perché chiunque può iniziare a scrivere richieste come "http://mywebsite.com/transaction/23" e vedere la transazione perché non ci sono filtri sull'utente corrente, quindi di solito assicurati che il utente possiede la risorsa
def transaction
@transaction = current_user.transactions.find(params[:id])
end
o uno
def transaction
@transaction = Transaction.where(user_id: current_user.id, id: params[:id])
end
successivamente si può gemme avanzate come cancan per controllare l'accesso alle risorse
infine, assicuratevi di leggere la rails security guide
Non ha nulla a che fare con i problemi di routing, è un problema di autorizzazioni ed è qualcosa che devi gestire da solo. Forse usando qualcosa come Cancan? github.com/ryanb/cancan puoi controllare se un ruolo ha il permesso di modificare qualcosa in un filtro precedente e, in caso contrario, reindirli e dare loro un feedback –