問題
Universal Containers社は、取引先オブジェクトのプライベート共有モデルを実装しました。Apexでカスタム取引先検索ツールを開発し、営業担当者が指定した複数の条件に一致する取引先を検索できるようにしました。リリース以来、このツールのユーザーは、自分が所有していない取引先を見ることができると報告しています。開発者は、カスタム検索ツールを使用している間、現在ログインしているユーザーに対して共有権限を強制するために何を使用する必要がありますか。
- Schemaクラスのメソッドを使用して、ログインしているユーザーが取引先オブジェクトへのアクセス権を持っているかどうかを判断します。
- UserInfoクラスを使用して、ログインしているユーザーが所有するレコードを返すようにすべてのSOQLクエリを絞り込みます。
- クラス宣言でwith sharingキーワードを使用します。
- クラス宣言でwithout sharingキーワードを使用します。
正解
- Schemaクラスのメソッドを使用して、ログインしているユーザーが取引先オブジェクトへのアクセス権を持っているかどうかを判断します。
- UserInfoクラスを使用して、ログインしているユーザーが所有するレコードを返すようにすべてのSOQLクエリを絞り込みます。
- クラス宣言でwith sharingキーワードを使用します。
- クラス宣言でwithout sharingキーワードを使用します。
解説
それぞれの選択肢の理由について説明します。
□ Schemaクラスのメソッドを使用して、ログインしているユーザーが取引先オブジェクトへのアクセス権を持っているかどうかを判断します。
これは不正解です。Schemaクラスはメタデータ情報にアクセスするために使用されますが、実行時の共有ルールやユーザーのアクセス権を動的に判断するためには適していません。ユーザーが特定のレコードに対して持つアクセス権を判断するための直接的な手段を提供しません。
□ UserInfoクラスを使用して、ログインしているユーザーが所有するレコードを返すようにすべてのSOQLクエリを絞り込みます。
これは不正解です。UserInfoクラスは現在のユーザーの情報を取得するためのものであり、これを使用してレコードの所有者を特定するのに使用することはできます。しかし、これだけで取引先オブジェクトへのアクセス権を強制することはできません。
□ クラス宣言でwith sharingキーワードを使用します。
これは正解です。”with sharing”キーワードをApexクラス宣言に使用すると、そのクラス内でのデータアクセスは現在のユーザーの共有設定に従います。これにより、ユーザーがアクセスできないレコードを取得・編集することはできなくなります。
□ クラス宣言でwithout sharingキーワードを使用します。
これは不正解です。”without sharing”キーワードを使用すると、そのクラスは共有設定を無視してデータにアクセスします。このキーワードを使用すると、現在のユーザーの共有設定に関係なくレコードにアクセスできるため、この問題の状況では不適切です。
コメント