委任管理:アクセスフック

フィルターフックはフィルタリングロジックのみを適用するため、現在のユーザー(または管理者の役割を果たしている人物)が特定のユーザーへのアクセス権を持っているかどうかを判定するには、2番目のロジック層が必要になります。

フィルターフックの詳細については、「委任管理:フィルターフック」をお読みください。

[Access Hook(アクセスフック)では、現在のユーザーが特定のユーザーを読み取り、削除、ブロック、ブロック解除、または更新することができるかどうかを判定できます。

フックコントラクト

  • ctx:コンテキストオブジェクト。

    • payload:ペイロードオブジェクト。

      • action:実行されている現在のアクション(delete:userなど)。

      • user:アクションが実行されているユーザー。

  • callback(error):アクセスが拒否された場合にエラーを返すことができるコールバック。

使用例

財務部の管理を担うケリーがアクセスできるのは、部署内のユーザーのみに限られるべきです。

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();
}

Was this helpful?

/

注記

このフックが構成されていないと、現在のユーザーはすべてのユーザーにアクセスすることができます。

フックは以下のアクション名(ctx.payload.actionの値として使用して設定)をサポートします。

  • 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

もっと詳しく