SFDC Spring'21 Sandbox プレビューでの激震
日々の業務に追われ、久々の更新になってしまいました。。。
2021年が始まり、さぁ仕事初めだという出鼻、私が手伝わせていただいている会社のSandbox環境で事件は起こりました。
この事件があったので、いつも書いているPythonの記事はお休みしてSalesforceの記事を書きますm(_ _)m
ことの発端はとある開発プロジェクトでサイト周りの機能の動作確認をしているときのことでした。(サイトに関しての説明は省きますが、知りたい方はこちらを参照してください⇒
https://help.salesforce.com/articleView?id=sites_configuring_sites.htm&type=5
)変更を加えていないはずの機能で昨日まで使えていた機能が突然アクセス権限エラーを起こしたのです。権限も変更した記憶がありませんでしたので、困惑しましたが設定変更履歴を追ってみると
同じ時間にSalesforceによるゲストプロファイルに対しての権限変更が大量にされていました……。諸悪?の根源であるこいつが何だったかというと、Spring'21 Sandbox プレビューだったんですね。これが世の中に一斉適用され、ゲストプロファイルに対してのオブジェクトの編集・削除権限がはく奪されてしまったんですね。
何ができなくなった?
Visualforce とそれに関連するApexクラス(VisualforceページとVisualforceコンポーネントでも発生する模様)の組み合わせによる機能で、
Apexクラス側で定義されるオブジェクト(XXX__c)のList値等を<apex:inputText>、<apex:inputField>、<apex:inputHidden>タグで(objectName).(fieldName)形式で参照していた場合、更新アクセスエラーが発生し、コントローラアクションメソッドが実行されません。詰まる話、ゲストユーザのアクセス・操作によってレコードの更新処理をするような実装をしていた部分でエラーが発生します。
対応策は?
私が手伝わせていただいている組織では、あの手この手でVisualforceとApexを捏ね繰り回して、ゲストユーザの操作をトリガーにレコードを更新させる実装だったので、大打撃を受けましたが、こういうことをしている会社さんも多いのでは?と思っています。
上の問題に対しての対応方法ですが、実は簡単な方法がありました。
<apex:inputText>タグや<apex:inputField>タグで実装されている部分を
VisualforceのAPIバージョン49.0以降にし、<apex:inputField>タグで ignoreEditPermissionForRendering というtrueで属性を付与することで上記の更新アクセスエラーは回避できます。
実はこの話、Winter'21でも触れられてたんですね(笑)
ただし、この ignoreEditPermissionForRendering 属性を設定したことによる情報漏洩に対してSalesforceは責任を負わないとヘルプページに記載されているので、属性の付与は必要最小限にしておきましょう。
https://developer.salesforce.com/docs/atlas.ja-jp.pages.meta/pages/pages_compref_inputField.htm
リリースノート公開からプレビュー、本番適用まで毎度時間が短い気もしますが、ちゃんとチェックしないと痛い目に遭いますね。個人的には新機能よりも何ができなくなるか?をもっとアピールしてほしい今日この頃でした―――
リリースノートはこちらから・・・