設問
Visualforce コントローラには、最上位レベルで「共有なし(without sharing)」で記述する必要があります。ただし、ページ内の特定のメソッドでは、レコードを作成したり特定のフィールドにアクセスしたりするためにユーザー権限を強制する必要があります。この要件を強制するには、次の 2 つの方法のうちどれを使用しますか?2つの答えを選択してください。
選択肢
A. Schema.DescribeFieldResult
B. Schema.getGlobalDescribe
C. UserInfo.getProfileID
D. Schema.DescribeSObjectResult
解答
A. Schema.DescribeFieldResult
D. Schema.DescribeSObjectResult
解説
A. Schema.DescribeFieldResult
正解です。
このクラスは、特定のフィールドに対するユーザーのアクセス可能性(読み取り・書き込み)をプログラムでチェックできます。
VisualforceやLightningなどでセキュリティを強制する場合に使われ、FLSを尊重するコードを実装する際の標準手段です。
たとえば isAccessible() によって、フィールドが表示可能かどうかを確認できます。
B. Schema.getGlobalDescribe
不正解です。
このメソッドは、すべてのsObject型を含むMap(Map)を返します。
ただし、返されたオブジェクトに対して getDescribe() を呼び出さなければセキュリティ情報を得ることはできず、単独ではセキュリティ強制には使えません。
C. UserInfo.getProfileID
不正解です。
このメソッドは、現在のユーザーのプロファイルIDを返しますが、権限そのものをチェックするAPIではありません。
セキュリティ強制の用途で使用するのは不適切で、動的に権限制御を実装したい場合には Describe API を使うべきです。
D. Schema.DescribeSObjectResult
正解です。
このクラスは、オブジェクト単位でのCRUDアクセスの確認を可能にします。
たとえば isCreateable() や isUpdateable() を使えば、ユーザーがレコードを作成・編集できるかどうかを判定できます。
「without sharing」環境下でも、このチェックでセキュリティを強化できます。
第118問
こちらをクリック