キューのセキュリティ保護
@secureTopic デコレーターは Apache Kafka のキューを保護し、認可されたユーザーのみがデータストリームメッセージにアクセスできるようにします。
Squid のキュートピックを保護するには、@secureTopic デコレーターを使用し、トピック名とアクションの種類を渡します。次のコードは、'hello-world' トピックのキューに対して読み取りおよび書き込みアクセスを許可します。
Backend code
import { SquidService, secureTopic } from '@squidcloud/backend';
export class ExampleService extends SquidService {
@secureTopic('topic-name', 'all')
allowTopicAccess(): boolean {
return true;
}
}
アクションタイプは 'read'、'write'、または 'all' を指定できます。
トピックメッセージの読み取りのセキュリティ保護
トピックメッセージの読み取りを保護する場合、セキュリティ関数には TopicReadContext が渡されます。これは、クライアントが読み取りたいトピックメッセージに対する integration ID とトピック名を含みます。次の例では、'topic-name' トピックを保護し、認証済みユーザーのみがトピックメッセージを読み取れるようにします。
Backend code
import { SquidService, secureTopic, TopicReadContext } from '@squidcloud/backend';
@secureTopic('topic-name', 'read')
allowTopicRead(context: TopicReadContext): boolean {
console.log(context.topicName);
return this.isAuthenticated();
}
トピックメッセージの書き込みのセキュリティ保護
トピックメッセージの書き込みを保護する場合、セキュリティ関数には TopocWriteContext<T>(T はメッセージの型)が渡されます。これは、integration ID、トピック名、およびクライアントが書き込みたいトピックメッセージ配列を含みます。次の例は、いずれかのメッセージに 'bad word' が含まれている場合に書き込みを許可しないよう、トピックへの書き込みを保護する方法を示します。
Backend code
import { SquidService, secureTopic, TopicWriteContext } from '@squidcloud/backend';
@secureTopic('topic-name', 'write')
allowTopicWrite(context: TopicWriteContext<T>): boolean {
console.log(context.topicName);
for (const message of context.messages) {
console.log(message);
if (message.contains('bad word')) {
return false;
}
}
return true;
}
Apache Kafka または Confluent integration を使用する場合は、デコレーターの第 3 引数として integration ID を指定します。次の例は、integration ID が 'kafka-integration-id' のキューに対するセキュリティ関数を示します。
Backend code
import { SquidService, secureTopic } from '@squidcloud/backend';
export class ExampleService extends SquidService {
@secureTopic('topic-name', 'all', 'kafka-integration-id')
allowTopicAccess(): boolean {
return true;
}
}