tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:Force.comサイトゲストユーザの判別方法

Force.comサイトゲストユーザの判別方法についてです。Force.comサイトはSalesforceにログインせずに利用できる仕組みですが、システム的には『Guest』ライセンスのユーザで利用することになります。


このユーザはUserオブジェクトのUserType項目がGuestになっているかで判別できます。
f:id:tyoshikawa1106:20161112124259p:plain

SELECT Id, Name, UserType FROM User


通常のコミュニティユーザは取引先責任者IDの値が存在するなどの条件でチェックできますが、ゲストユーザはそういった特徴が無いのでUserType項目で判定するのが一番シンプルだと思います。


元々はForce.comサイトゲストユーザという名前のユーザになっていますが、ユーザIDをつかってユーザの詳細ページにアクセスすれば任意の名前の変更することができます。
f:id:tyoshikawa1106:20161112124656p:plain


そのためユーザの名前などを判別方法に取り入れるのは良くないと思います。(ユーザの名前は一意の項目ではないのも避けたほうがいい理由の1つです。)


※1. ユーザの名前は開発者コンソールから変更することもできると思います。
※2. Force.comサイトゲストユーザの名前は作成者や最終更新者などで表示されるのでカスタマイズできるのは便利です。


Force.comサイトゲストユーザの判別ができればVisualforceやApexで特定の処理を行ったりとより柔軟な対応ができます。またテストクラスのSystem.runAsに指定することでテストの精度が向上します。

抑えておきたいこと

Force.comサイトのゲストユーザですが、サイト有効化/コミュニティ有効化のタイミングでユーザが自動で作成されます。
f:id:tyoshikawa1106:20161112130350p:plain

f:id:tyoshikawa1106:20161112130436p:plain


UserTypeだけだとこのようなときにどのゲストユーザかわかりません。ゲストかそうじゃないかの判定だけが必要なときは問題ありませんが、項目アクセス権限までチェックしたい場合はもう少し取得条件を指定する必要があります。


追加する条件ですが、たぶんプロファイル名しかないんじゃないかと思います。サイト名+プロファイルという命名になっているので重複させないように注意した方がよさそうです。


プロファイル名をWHERE条件で指定するときは、カスタム表示ラベルを使うのがオススメです。後日プロファイル名の表示を変更したくなったときに簡単に対応できます。ちなみにサイトゲストユーザのプロファイルはユーザの言語の影響はありませんでした。(標準プロファイルの場合は言語にあわせて変換されます)
f:id:tyoshikawa1106:20161112131056p:plain