メインコンテンツまでスキップ

ロールベースアクセス制御 (RBAC)

Squidバックエンドでユーザの役割を管理し、リソースへのアクセスを保護する

Squidはあらゆるエンタープライズユースケースに対応するため、セキュリティ制御を核心に設計されています。Squid Consoleは初期状態でAdmin and Developer roles and permissionsを定義していますが、Squidはアプリケーションの固有の要件に合わせてさらにカスタマイズ可能なRole-Based Access Control (RBAC) 機能の構築も提供します。

これは、細かい制御とアクセス許可をサポートするために最高レベルのコンプライアンスが求められる規制産業向けに、高度なセキュリティと認可を提供する堅牢な仕組みです。

RBACのセットアップ

本ガイドでは、効率的なRBAC実装のために、Squidのフレームワークをどのように使用するかを解説します。

Squidは、アプリケーションのユーザ役割をプログラムで管理できる組み込みのNoSQLデータベースを提供しています。新たなコレクションを作成する必要はなく、アプリケーションで必要な様々な役割を定義するために、usersコレクションを利用してこれらの役割を格納および管理することができます。

ユーザが追加または削除されるたびに、そのユーザの役割をusersコレクションに更新する必要があります。これはSquidのバックエンドコードを使用して行います。例えば、ユーザの状態が変化した際に呼び出されるwebhookや実行可能なものを追加したい場合もあります。

Backend code
@webhook('userAdded')
async handleUserAdded(request: WebhookRequest) {
const apiKey = request.headers['apiKey'];
if (apiKey !== this.secrets['AUTH_PROVIDER_API_KEY']) {
throw Error('not authorized');
}
const userId = request.body.userId;
const role = request.body.role;
await this.squid.collection<User>('users').doc(userId).insert(
{userId, role});
}

// TODO - Implement webhooks for user updated and deleted

ユーザ役割に基づく認可: usersコレクションにユーザとその役割が確立された後、これらの役割に基づいてリクエストの認可方法を決定できます。これはバックエンドコード内の@secureCollectionやその他の@secure関数で実施されます。

例えば、クライアントがコレクションからデータを読み込もうとする場合、アクセスを許可する前にユーザの役割を検証するため、@secureCollectionで装飾された関数を呼び出すことができます:

Backend code
@secureCollection('name_of_the_collection', 'id of the integration', 'read')
secureReadCollection(request: SecureCollectionRequest): Promise<boolean> {
const userId = this.getUserId();
const user = await this.squid.collection<User>('users').doc(userId).snapshot();
const role = user.role;

// Check the role and decide whether to authorize the request
return role === 'admin';
}

まとめると、Squidはあなたの特定のニーズに合わせたカスタムRBACシステムを実装するための必要なツールと柔軟性を提供します。ユーザコレクション、バックエンドコード、そしてClient SDKの組み合わせによって、アプリケーションに対して安全で効率的なRBACシステムを制御することができます。