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

# Delegated Administration:拡張フック

> 拡張フックを使用してDelegated Administration Extensionの動作をカスタマイズする方法について説明します。

**Delegated Admin - Administrator** ロールが割り当てられているユーザーは、委任管理拡張機能の動作をカスタマイズできるさまざまな拡張フックとクエリを管理できます。

構成領域にアクセスするには:

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

リダイレクトされる **［Configuration（構成）］** ページでは、フックとクエリを管理できます。

<div id="extension-hooks-context">
  ## 拡張機能フックのコンテキスト
</div>

context (**ctx** )オブジェクトは、現在の要求に関するいくつかのヘルパーと情報を公開します。すべての拡張機能フックで次のメソッドとプロパティを使用できます:

* ロギング
* キャッシュ
* Custom Data（カスタムデータ）
* ペイロードと要求
* リモート呼び出し

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

Webtaskログ(リアルタイムWebtaskログ拡張機能を使用して表示できます)にメッセージを追加するには、 **log** メソッドを呼び出します。

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

リアルタイムWebtaskログ拡張機能の詳細については、[［Realtime Webtask Logs（リアルタイムWebtaskログ）］](/docs/ja-JP/ja-jp/customize/extensions/real-time-webtask-logs)をお読みください。

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

何か(部署の長いリストなど)をキャッシュするには、コンテキストの **グローバル** オブジェクトに保存します。このオブジェクトは、Webtaskコンテナがリサイクルされるまで使用できます。

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

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

拡張機能内にカスタムデータを保存できます。このフィールドは、400kbのデータに制限されています。

```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>

各拡張フックは、現在のペイロードまたは要求を特定の情報と共に公開します。要求には、ユーザーダッシュボードにログインしているユーザーに関する情報が常に含まれます。

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

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

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

```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">
  ### フックコントラクト
</div>

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

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

    * `Actions`:現在実行されているアクション（`例: delete:user`）
    * `Users`:アクションが実行されているユーザー
* `callback(エラー)`:アクセスが拒否された場合にエラーを返すことができるコールバック

<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.'));
  }

  // Get the department from the current user's metadata.
  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.'));
  }

  // The IT department can access all users.
  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">
  ## 使用可能な拡張フック
</div>

Delegated Administration Applicationでは、次の拡張フックを使用できます。

* [アクセスフック](/docs/ja-JP/ja-jp/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-access-hook)
* [フィルタフック](/docs/ja-JP/ja-jp/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-filter-hook)
* [メンバーシップクエリフック](/docs/ja-JP/ja-jp/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-memberships-query-hook)
* [設定クエリフック](/docs/ja-JP/ja-jp/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-settings-query-hook)
* [書き込みフック](/docs/ja-JP/ja-jp/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-write-hook)

<div id="learn-more">
  ## もっと詳しく
</div>

* [委任管理：アクセスフック](/docs/ja-JP/ja-jp/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-access-hook)
* [委任管理：フィルターフック](/docs/ja-JP/ja-jp/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-filter-hook)
* [委任管理：メンバーシップクエリフック](/docs/ja-JP/ja-jp/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-memberships-query-hook)
* [委任管理：クエリ設定フック](/docs/ja-JP/ja-jp/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-settings-query-hook)
* [委任管理：書き込みフック](/docs/ja-JP/ja-jp/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-write-hook)
