第7章 コンテンツの制限

本章では、デベロッパーポータルのコンテンツを一部のユーザーにしか見えないようにする方法を説明します。

デベロッパーポータルの一部のページについて、ページの一部またはあるメニュー項目を、特定の開発者グループだけがアクセスできるように設定しなければならない場合があります。いずれの場合も、以下で紹介する 2 つの手法により目的を達成することが可能です。

7.1. ページの制限

制限付きのセクションを作成する場合、各セクションをユーザーの論理グループにマッピングさせると便利です。以下の例では、「partners」という開発者グループがあると仮定します。

アクセスを制限するすべてのページまたはページのグループについて、デベロッパーポータルで新しいセクションを作成します。「public」ステータスフィールドのチェックボックスの選択を解除します。次に、このセクション内に必要なすべてのページをドラッグアンドドロップします。

New private secton

グループを作成して、作成したセクションへのアクセス権限を付与します。

New group

これで、このセクションへのアクセス権限をユーザーの一部に付与するときには、このグループに割り当てるだけで済みます。そのためには、該当するアカウントの詳細ページから「Group Permissions」に移動します。 移動したら、許可するセクションのチェックボックスを選択します。

Group permissions

7.2. コンテンツブロックの制限

Liquid タグを使用すると、デベロッパーポータルを自由にカスタマイズすることができます。本章の用途に Liquid タグを使用して、条件に基づきページの一部を表示/非表示にします。3scale では、アカウント、アプリケーション、およびユーザーにカスタムフィールドを作成できます。これを利用して、API プロバイダーに役立つ情報を格納できます。ここでは、すべてのアカウントにアタッチされるカスタムフィールドを作成し、これを使ってそのアカウントがパートナーかそうでないかを識別します。Audience > Account > Field Definitions の順に移動して、このフィールドを作成することができます。Account セクションにフィールドを追加してそれを非表示として設定すると、サインアップページやポータルのどのページにも表示されなくなります。

Group permissions

カスタムフィールドを設定すると、以下のスニペットに示すように条件でラップすることで、パートナーに特別なコンテンツを表示できるようになります。

{{ if current_account.extra_fields.partner == 'true' }}
  // content only accessible to partners
{{ endif }}

また、その方が適切であれば、逆のロジックを使用します。

{{ unless current_account.extra_fields.partner == 'true' }}
  // content forbidden for partners
{{ endunless }}

これ以降、この非表示コンテンツをユーザーに表示する場合には、該当ユーザーのアカウント詳細ページで partner フィールドに「true」と入力するだけです。

7.3. 追加フィールドの設定の自動化

開発者に制限付きコンテンツへのアクセス権限を付与する場合があります。たとえば、アプリケーションプランをアップグレードした場合などです。

Account Management API と Webhook を組み合わせて使用して、このプロセスを簡素化します。Account Management API は、管理ポータルにある 3scale ActiveDocs に含まれています。

  1. ウィンドウの右上にある Documentation (疑問符 (?)) をクリックします。
  2. 3scale API Docs を選択します。
  3. Webhook 要求によって送信されたメッセージをチェックして、制限付きコンテンツにアクセスする開発者の新しいプランを取得します。
  4. 開発者の新しいプランに基づいて、partner フィールドを更新する API を呼び出すことで、プライベートコンテンツへのアクセス権限を付与することができます。

7.4. ユーザーログインの要求

コンテンツへのアクセスを制限する上述の 2 つの手法に加えて、ユーザーにログインを要求するという別の有用な手法があります。

これは、Liquid タグを使用して非常に簡単に実施することができます。ログインしたユーザーのみが利用できるコンテンツを、以下の条件内にラップするだけです。

{{ if current_user }}
  // only visible if the user is logged in
{{ endif }}