> ## Documentation Index
> Fetch the complete documentation index at: https://translations.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Extension Hooks を使用して Delegated Administration Extension の動作をカスタマイズする方法を説明します。

# Delegated Administration: Extension Hooks

**Delegated Admin - Administrator** ロールが割り当てられているユーザーは、Delegated Administration extension の動作をカスタマイズするための各種 Extension Hooks とクエリを管理できます。

設定画面にアクセスするには、次の手順に従います。

1. Delegated Administration Dashboard にログインします。
2. 右上隅にある自分の名前をクリックします。ドロップダウンメニューが表示されたら、**Configure** オプションをクリックします。

リダイレクト先の **Configuration** ページで、Hooks とクエリを管理できます。

<div id="extension-hooks-context">
  ## Extension Hooks コンテキスト
</div>

コンテキスト (**ctx**) オブジェクトでは、現在のリクエストに関する各種ヘルパーと情報を利用できます。以下のメソッドとプロパティは、すべての Extension Hook で使用できます。

* ロギング
* キャッシュ
* カスタムデータ
* ペイロードとリクエスト
* リモート呼び出し

<div id="logging">
  ### ログ
</div>

Actions Real-time Logs (Actions Real-time Logs で確認できます) にメッセージを追加するには、**log** メソッドを呼び出します。

```javascript lines theme={null}
function(ctx, callback) {
  ctx.log('Logging action:', ctx.payload.action);
  return callback();
}
```

<div id="caching">
  ### キャッシュ
</div>

長い部署一覧のようなデータをキャッシュするには、context の **global** オブジェクトに保存できます。このオブジェクトは、Actions Real-Time Logs コンテナが再作成されるまで利用できます。

```javascript lines theme={null}
function(ctx, callback) {
  ctx.global.departments = [ 'IT', 'HR', 'Finance' ];
  return callback();
}
```

<div id="custom-data">
  ### カスタムデータ
</div>

拡張機能内にカスタムデータを保存できます。このフィールドに保存できるデータは最大 400 KB です。

```javascript lines theme={null}
var data = {
departments: [ 'IT', 'HR', 'Finance' ]
};

ctx.write(data)
.then(function() {
    // ...
})
.catch(function(err) {
    // ...
});
```

データを読み出すには:

```js lines theme={null}
ctx.read()
.then(function(data) {
    // ...
})
.catch(function(err) {
    // ...
});
```

<div id="payload-and-request">
  ### ペイロードとリクエスト
</div>

各 Extension Hook は、現在のペイロードまたはリクエストを、それぞれ固有の情報とともに公開します。リクエストには常に、Users Dashboard にログインしているユーザーに関する情報が含まれます。

```javascript lines theme={null}
function(ctx, callback) {
  ctx.log('Current User:', ctx.request.user);
  return callback();
}
```

<div id="remote-calls">
  ### リモート呼び出し
</div>

データを検証したりメンバーシップを読み込んだりするために外部サービス (API など) を呼び出す場合は、`request` モジュールを使用できます。

```javascript lines theme={null}
function(ctx, callback) {
var request = require('request');
    request('http://api.mycompany.com/departments', function (error, response, body) {
        if (error) {
        return callback(error);
        }

        // ...
    });
}
```

<div id="hook-contract">
  ### Hook の仕様
</div>

* `ctx`: コンテキストオブジェクト

  * `payload`: ペイロードオブジェクト

    * `action`: 現在実行中のアクション (例: `delete:user`)
    * `user`: アクションの実行対象となるユーザー
* `callback(error)`: アクセスが拒否された場合にエラーを返せるコールバック

<div id="sample-use">
  ### 使用例
</div>

Kelly は財務部門を管理しており、自身の部門内のユーザーにのみアクセスできる必要があります。

```javascript lines theme={null}
function(ctx, callback) {
  if (ctx.payload.action === 'delete:user') {
    return callback(new Error('You are not allowed to delete users.'));
  }

  // 現在のユーザーのメタデータから部署を取得します。
  var department = ctx.request.user.app_metadata && ctx.request.user.app_metadata.department;
  if (!department || !department.length) {
    return callback(new Error('The current user is not part of any department.'));
  }

  // IT部門はすべてのユーザーにアクセスできます。
  if (department === 'IT') {
    return callback();
  }

  ctx.log('Verifying access:', ctx.payload.user.app_metadata.department, department);

  if (!ctx.payload.user.app_metadata.department || ctx.payload.user.app_metadata.department !== department) {
    return callback(new Error('You can only access users within your own department.'));
  }

  return callback();
}
```

このフックが設定されていない場合は、すべてのユーザーにアクセスできます。

サポート対象のアクション名:

* `read:user`
* `delete:user`
* `reset:password`
* `change:password`
* `change:username`
* `change:email`
* `read:devices`
* `read:logs`
* `remove:multifactor-provider`
* `block:user`
* `unblock:user`
* `send:verification-email`

<div id="available-extension-hooks">
  ## 利用可能な Extension Hooks
</div>

Delegated Administration Application で使用できる Extension Hooks は次のとおりです。

* [Access Hook](/ja/docs/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-access-hook)
* [Custom Domain Hook](/ja/docs/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-custom-domain-hook)
* [Filter Hook](/ja/docs/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-filter-hook)
* [Memberships Query Hook](/ja/docs/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-memberships-query-hook)
* [Settings Query Hook](/ja/docs/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-settings-query-hook)
* [Write Hook](/ja/docs/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-write-hook)

<div id="learn-more">
  ## 詳細情報
</div>

* [Delegated Administration: Access Hook](/ja/docs/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-access-hook)
* [Delegated Administration: Custom Domain Hook](/ja/docs/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-custom-domain-hook)
* [Delegated Administration: Filter Hook](/ja/docs/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-filter-hook)
* [Delegated Administration: Memberships Query Hook](/ja/docs/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-memberships-query-hook)
* [Delegated Administration: Settings Query Hook](/ja/docs/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-settings-query-hook)
* [Delegated Administration: Write Hook](/ja/docs/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-write-hook)
