> ## 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** role が割り当てられているユーザーは、Delegated Administration extension の動作をカスタマイズするための各種 Extension Hooks とクエリを管理できます。

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

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

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

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

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

* ログ
* キャッシュ
* Custom Data
* ペイロードとリクエスト
* リモート呼び出し

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

Actions リアルタイムログ (Actions リアルタイムログで表示できます) にメッセージを追加するには、**log** メソッドを呼び出します：

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

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

何か (たとえば部署の長い一覧) をキャッシュするには、コンテキストの **global** オブジェクトに保存できます。このオブジェクトは、Actions リアルタイムログのコンテナが再作成されるまで利用できます。

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

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

extension 内にカスタムデータを保存できます。このフィールドに保存できるデータは 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>

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

```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 Hook
</div>

Delegated Administration アプリケーションでは、次の Extension Hook を使用できます。

* [Access Hook](/docs/ja-jp/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-access-hook)
* [カスタムドメイン Hook](/docs/ja-jp/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-custom-domain-hook)
* [Filter Hook](/docs/ja-jp/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-filter-hook)
* [メンバーシップ クエリ Hook](/docs/ja-jp/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-memberships-query-hook)
* [設定クエリ Hook](/docs/ja-jp/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-settings-query-hook)
* [Write Hook](/docs/ja-jp/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-write-hook)

<div id="learn-more">
  ## 詳しくはこちら
</div>

* [Delegated Administration: Access Hook](/docs/ja-jp/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-access-hook)
* [Delegated Administration: カスタムドメイン Hook](/docs/ja-jp/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-custom-domain-hook)
* [Delegated Administration: Filter Hook](/docs/ja-jp/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-filter-hook)
* [Delegated Administration: メンバーシップ クエリ Hook](/docs/ja-jp/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-memberships-query-hook)
* [Delegated Administration: 設定クエリ Hook](/docs/ja-jp/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-settings-query-hook)
* [Delegated Administration: Write Hook](/docs/ja-jp/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-write-hook)
