applicazione My Mojolicious ha qualche meccanismo di autenticazione personalizzato, che implemento in una condizione di routing chiamata auth_permission
:Perché Mojolicious annida i miei percorsi?
$app->add_condition(auth_permission => sub {
return is_user_allowed(...) ? 1 : 0;
});
Così i miei percorsi simile a questa:
my $r = $app->routes;
$r->get('/prefs')
# no permission necessary here
->to(...);
$r->get('/objects')
->over(auth_permission => 'view objects')
->to(...);
$r->get('/objects/delete/:id')
->over(auth_permission => 'delete objects')
->to(...);
I to()
clausole sono gestiti correttamente: GET /objects
mi fornisce l'elenco degli oggetti e GET /objects/delete/42
elimina l'oggetto 42.
Il problema è che il permesso view objects
viene verificato per entrambe le richieste, anche se il secondo percorso deve verificare l'autorizzazione delete objects
.
Il motivo sembra essere che /objects/delete/42
è un percorso inferiore a /objects
. Lo stesso problema non si verifica con la route /prefs
, che non ha una base comune con le altre route.
mia soluzione attuale è quella di posizionare la regola per /objects
sotto quello per /objects/delete/:id
, ma questa è una) unelegant ed è b) andando a rompere quando un altro sviluppatore modifica il file. Posso disattivare esplicitamente il comportamento di nidificazione visto in questo caso?
Questo comportamento mi sembra abbastanza semplice. E la tua cosiddetta soluzione alternativa è una conseguenza logica di come Mojolicious abbina le rotte. IMO hai risposto alla tua domanda. –