私の Mojolicious アプリケーションには、いくつかのカスタム認証メカニズムがあり、次のルーティング条件で実装していますauth_permission
。
$app->add_condition(auth_permission => sub {
return is_user_allowed(...) ? 1 : 0;
});
したがって、私のルートは次のようになります。
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(...);
to()
句は正しく処理されます。GET /objects
オブジェクト リストが表示され、GET /objects/delete/42
オブジェクト 42 が削除されます。
問題はview objects
、2 番目のルートでパーミッションをチェックする必要があるにもかかわらず、両方のリクエストでパーミッションがチェックされることdelete objects
です。
その理由/objects/delete/42
は、以下のパスにあるよう/objects
です。/prefs
他のルートと共通のベースを持たないルートでは、同様の問題は発生しません。
私の現在の回避策は、 のルールを のルールの/objects
下に配置することです/objects/delete/:id
が、それは a) 洗練されておらず、b) 別の開発者がファイルを編集すると壊れる可能性があります。この場合に見られるネスト動作を明示的に無効にすることはできますか?