2011-08-14 8 views
0

黒板タイプのアプリケーションを想定します。 ProjectAとProjectBの2つのプロジェクトがあります。ユーザー 'nupul'(私)は両方のプロジェクトの一部です。 Aの場合は管理者、Bの場合は会員(管理者権限なし)ですRestlet:ユーザーがアクセスしている「プロジェクト」(グループ)に応じた役割の追加

/MySite/ProjectA/Itemsのリソースにアクセスする際は、ユーザーが管理者であるかどうかを確認したいと思います。

私は、それは単に要求から{projectName}パラメータをピッキング等DBに対してチェックし、転送(ユーザーリクエスト製造)識別子を使用して行うことができる知っている

マイ質問は '認証機関の間にEnrollerを使ってどのように役割を追加できますか'ということです。その段階で私は{projectName}パラメータにアクセスすることができません。グループ/レルムなどを使ってこの作業をする必要があるかどうかはわかりませんが、正直なところ、これを効果的に使う方法を理解するためには、ほんのちょっと待っていますか? (つまり、リクエストがリソースに転送される前に)

これらのグループ/レルムを作成することはできますが、リソースから正しい役割にアクセスするにはどうすればよいですか? Restletは、より現実的な例と、クラスの使用を示すより良い文書を真剣に持っている必要があります!!それは私を狂ってしまう!認証はこれほど難しくはありません! :)

+0

、それはあなたのお役に立てば幸い、私たちは、セキュリティの章を含む「Restletのアクションで」本を書いて仕上げています。また、オンラインユーザーガイドも定期的に強化していますが、実際には改善が必要な分野もあります。バージョン2.2では、セキュリティと永続性を含む現実的な例で新しいチュートリアルを書く予定です。私たちはまた、この正面の貢献者を歓迎します:) –

+0

@Jerome:私はいくつかの例を寄稿したいと思っている以上に多くのフレームワークを愛しています:)私は安定した解決策を得たらお知らせします。本にない場合、それは少なくともオンラインの例/チュートリアルの一部になることができます:) – PhD

+0

それは素晴らしいNupulのように聞こえる!ドキュメントの投稿手順については、このページをご覧ください:http://wiki.restlet.org/authors/399-restlet.html –

答えて

0

あなたが望むことをする方法は、アプリケーション内のプロジェクト名に基づいてルータを分割することです(メソッドcreateInboundRoot)。この場合、プロジェクト名はオーセンティケータを呼び出す前に評価されます。このようなアプローチを実現するためのいくつかの例は以下を参照してください。

public Restlet createInboundRoot() { 
    Router rootRouter = new Router(getContext()); 
    rootRouter.setDefaultMatchingMode(Template.MODE_STARTS_WITH); 

    rootRouter.attach("/{projectname}/", createApplicationForProject()); 
    return rootRouter; 
} 

private Restlet createApplicationForProject() { 
    Router router = new Router(getContext()); 

    ChallengeAuthenticator guard 
      = new ChallengeAuthenticator(getContext(), 
         ChallengeScheme.HTTP_BASIC, "realm"); 
    guard.setVerifier(verifier); 
    guard.setEnroler(enroler); 
    guard.setNext(router); 

    router.attach("items", ItemsServerResource.class); 
    return guard; 
} 

このようなアプローチを使用して、検証中にプロジェクト名変数の値にアクセスでき、認証処理でそれを使用することができます。

は、ドキュメントの欠如について ティエリ

+0

'Template.MODE_STARTS_WITH'を使用していますか?階層的なマッチングがあるので、デフォルトは 'BEST_MATCH'でしょうか? (思い出してはいけませんが)それが後者なら、それは間違ったマッチングにつながるでしょうか?これはきちんとした解決策であり、私はそれを考えなかったが、このアプローチを使うことの「波及効果」を知りたい。 – PhD

+0

私は階層的なw.r.tを意味する。 {myproject/items/{id}/options/{id}/part/{id} 'の後ろにある'/{projectName}/'の後ろに、myprojectのURLの各部分が返されるリソース... so私の上記の質問は、もしそれが 'MODE_STARTS_WITH'なら"それは重要ですか? " – PhD

関連する問題