Salesforce のゲストユーザ問題 (*1) が一時世間を賑わせたこともあり、不特定多数のユーザに公開するコンテンツを持つエクスペリエンスサイトを実装する際はとても神経を尖らせます。
(*1) ゲストユーザに対して不適切な権限・設定を行なっていたことにより、情報漏洩に発展した問題
特に、入力フォームを外部に公開するサイトでは、オブジェクトの参照権限をゲストユーザに付与しているケースも多いでしょう。
私個人としては、ゲストユーザ向けのフォームはLWCで実装することをお勧めします。
LWCでフォームを実装する理由
一番の理由は、「エクスペリエンスサイト」(特に LWR テンプレート)とのシナジーがあることです。
Visualforce はエクスペリエンスサイトに適していない
Aura, LWR といった Experience Cloud で提供される標準テンプレートの多くは、Visualforce での実装に適していません。
ビルダー上で配置できる Visualforce コンポーネント はありますが、サイト上では <iframe> として表示されます。推奨できるソリューションとは言えないでしょう。
Aura コンポーネントは公式が推奨していない
Salesforce 公式の Developer Guide では以下のような案内が出ています。
Lightning Web Components でサポート対象外の機能が必要でなければ、常に Lightning Web コンポーネントを選んでください。
Lightning Web Components または Aura の選択方法
公式が LWC を原則利用するように案内を出している以上、Aura を推奨するつもりはありません。
特に、今回言及しているようなフォームの実装であれば、基本的には LWC でサポート対象外の機能を使う場面はほとんどないでしょう。
LWR テンプレートを利用する選択肢を残す
LWR テンプレートではそもそも LWC によるカスタムコンポーネントが前提とされています。
Aura, Visualforce のいずれも利用できないため、LWR テンプレートを利用する方針であれば LWC で実装しましょう。
今後開発するのであれば、Salesforce 自体が力を入れている LWC で実装するのが無難です。
ゲストユーザに与える権限を狭める設計
フォームの実装となれば、オブジェクトの新規・参照権限あたりが必要に見えます。
しかし、ゲストユーザにオブジェクトの権限を与えるのは少し怖いです。
そのため、以下のような設計を個人的によく行います。
具体的には、フォームのレコードの格納先のオブジェクト権限は与えません。
LWC はオブジェクト項目と紐づかない input 項目で構築し、Apex(Controller)に値を渡します。
Controller は with sharing で実装し、実際にオブジェクトへアクセスするクラスを without sharing で実装します。このクラスを Controller から呼び出すことで、オブジェクト権限をゲストユーザに付与する必要がなくなります。
おわりに
Experience Cloud のビルダーによるサイト構築は、ドラッグ&ドロップ中心の設定で簡単に実現できるのが良い点です。
一方で、ゲストユーザも利用するサイトの構築は慎重に行う必要がありますね。
標準のコンポーネントだと、オブジェクトのフォームを利用するには権限付与が必要になります。
実装コストは少し上がりますが、今回紹介したように LWC を利用する構成はセキュリティの観点では非常におすすめです。
コメント