6

私の 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) 別の開発者がファイルを編集すると壊れる可能性があります。この場合に見られるネスト動作を明示的に無効にすることはできますか?

4

1 に答える 1

1

Mojolicious のドキュメントは、短いルートを処理するオブジェクトから拡張ルートを構築する必要があることを示しているようです。ドキュメントのネストされたルートのセクションを参照してください。

これは、$objects ルートと、そこから派生した $o​​bjects_delete ルートがあることを意味します。順序付けの問題を排除します (短いルートを最初に宣言する必要があること以外)。

于 2012-12-03T02:17:43.563 に答える