セキュリティルール
Squid は、AI agents、databases、backend functions、そして APIs を含むさまざまな entities へのアクセスを制御するための強力な authorization 機能を提供します。これにより、データを保護し、許可されたユーザーのみが特定の操作を実行できるようにします。
Squid のアクセス制御は、Squid backend で TypeScript 関数を使用して管理されます。アクセス制御に関する関数であることを示すために、1 つ以上の decorator (decorator は @
から始まるラベルです) を適用します。たとえば、以下の関数は @secureDatabase
decorator を使用して、認証されたユーザーのみが built_in_db にアクセスできることを保証します:
@secureDatabase('all', 'built_in_db') // Decorator marks function as securing a database
allowAccessToBuiltInDb(): boolean {
return this.isAuthenticated();
}
Squid decorator および Squid Backend SDK を使用することで、ユーザーロールやパーミッションなどのさまざまな基準に基づいて entities へのアクセスを制限することができます。
もしクライアントがアクセス制限された entity にアクセスを試みた場合、authorization 関数が false
を返し、ユーザーが認可されていないことを示すと、クライアントは以下の詳細を含む Error
を受け取ります
{
"statusCode": 401,
"message": "UNAUTHORIZED"
}
たとえば、以下のコードは、指定されたユーザーのみが users
というコレクション内の自身のレコードを読み取れるようにします:
import {
secureCollection,
SquidService,
QueryContext,
} from '@squidcloud/backend';
type User = { id: string; email: string; age: number };
export class ExampleService extends SquidService {
@secureCollection('users', 'read')
secureUsersRead(context: QueryContext<User>): boolean {
const userAuth = this.getUserAuth();
if (!userAuth) {
return false;
}
const userId = userAuth.userId;
return context.isSubqueryOf('id', '==', userId);
}
}
このセキュリティ機能に基づき、以下のクエリを実行しようとするクライアントは、ユーザー自身に属さない複数のユーザーレコードにアクセスしようとするため、エラーが返されます:
// This function will throw an error
async function readAllUsers(squid: Squid): Promise<User[]> {
return await squid.collection<User>('users').query().snapshot();
}
Explore
各機能のアクセス制御についてさらに学ぶには、以下のドキュメントを参照してください:
📄️ AIエージェントの保護
@secureAiAgent デコレータを使用して、特定のエージェントの保護を担当する関数を指定します。
📄️ APIの保護
@secureApi decorator を使用して、API connector へのアクセスを保護および管理します。
📄️ データアクセスのセキュリティ
Squid が提供するさまざまなデコレーターを使用して、Squid に接続されるデータベース(組み込みの内部データベースを含む)を保護します。
📄️ データの保護
クライアント認証とバックエンド機能を使用してデータへのアクセスを管理する
📄️ GraphQLの保護
GraphQL統合へのアクセスを保護するために、@secureGraphQLデコレータを使用します。
📄️ 分散ロックの保護
分散ロックは、共用リソースへのアクセスを管理し、データを順序通りに取引するために使用されます。@secureDistributedLock デコレーターはロックにセキュリティを設定します。
📄️ キューの保護
@secureTopic デコレーターは、Apache Kafka のキューを保護し、認証されたユーザーのみがデータストリームメッセージにアクセスできるようにします。
📄️ ストレージの保護
認可されたユーザーのみがファイルにアクセスできるように、ストレージバケットを保護する @secureStorage デコレーター