Security rules
Squid は、AI agent、database、backend function、API など、さまざまな entity への access を制御する強力な authorization feature を提供します。これにより data を保護し、authorized user のみが特定の action を実行できるようにします。
Squid の access control は、Squid backend で TypeScript function を使用して管理します。function が access control に関するものであることを示すには、@ で始まる label である decorator を 1 つ以上適用します。たとえば、次の function は @secureDatabase decorator を使用して、authenticated user のみが built-in database に access できるようにします。
@secureDatabase('all', 'built_in_db') // Decorator marks function as securing a database
allowAccessToBuiltInDb(): boolean {
return this.isAuthenticated();
}
Squid decorator と Squid Backend SDK を使用すると、user role や permission などのさまざまな criteria に基づいて entity への access を制限できます。
security function は boolean を返します。true は request を許可し、false は拒否します。
client が secured entity に access しようとして、authorization function が user が authorized されていないことを示す false を返すと、client は次の detail を持つ Error を受け取ります。
{
"statusCode": 401,
"message": "UNAUTHORIZED"
}
たとえば、次の code は、指定 user のみが users という collection 内の自身の record を read できるようにします。
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);
}
}
この security functionality に基づき、次の query を実行しようとする client は error を受け取ります。この function は user に属さない複数の user record に access しようとするためです。
// This function will throw an error
async function readAllUsers(squid: Squid): Promise<User[]> {
return await squid.collection<User>('users').query().snapshot();
}
探索
個々の feature の access control について詳しくは、以下の documentation を参照してください。
📄️ AI Agent と Agent API Key の保護
@secureAiAgent decorator を使用して、指定 agent を保護する function を指定します。Agent API Key を使用して security method を bypass し、App API Key を不要にします。
📄️ API の保護
@secureApi decorator を使用して、API connector への access を保護・管理します。
📄️ Data Access の保護
Squid が提供するさまざまな decorator を使用して、built-in internal database を含む、Squid に接続された任意の database を保護します。
📄️ Data の保護
client authentication と backend functionality を使用して data への access を管理します
📄️ GraphQL の保護
@secureGraphQL decorator を使用して、GraphQL integration への access を保護します。
📄️ Distributed Locks の保護
Distributed lock は shared resource への access を管理し、data を順序どおりに transaction します。@secureDistributedLock decorator は lock を保護します。
📄️ Queue の保護
@secureTopic decorator は queue topic を保護し、authorized user のみが data stream message に access できるようにします。
📄️ Storage の保護
@secureStorage decorator は storage bucket を保護し、authorized user のみが file に access できるようにします。