Salesforceでレコード添付したファイルのアクセス権をコントロールする

ファイルアクセス権 機能

Salesforceではレコード添付したファイルは、その添付元レコードアクセス権と連動します。レコードが参照可能なら添付されたファイルも参照可能という具合です。

ただレコード参照可能の場合でもファイルは見せたくない、ファイルはExperienceCloudサイトの外部ユーザには見せたくないなど細かいアクセス権コントロールは可能なのでしょうか。

今回はその方法やフローでの自動化を見ていきます。

ファイルのアップロード

まずは単純に「ABC企業」という取引先にファイルをアップします。ファイルはアップした取引先(ABC企業)とアップ行為をしたユーザ(管理者ユーザ)が共有先となります。取引先の所有者自体が直接ファイルの共有先にはなりません。

ファイルのアップ
ファイルアップ後画面

この時点では取引先レコードのアクセス権がファイルにも引き継がれます。引き継がれないようにするには「コンテンツファイル」レコードで調整をします。

 

 

ファイルのアクセス権を添付先レコードと切り分ける

取引先レコードにはアクセスできるが、添付されたファイルにはアクセスさせない方法を見ていきます。

アップロードしたファイルで「ファイルの詳細を編集」するとコンテンツファイルレコードが編集モードとなり、デフォルト状態では「タイトル」「説明」の2項目のみ表示されます。

ファイルの詳細を編集

【アップしたファイルのコンテンツファイルレコード】

デフォルトページレイアウト

 

 

オブジェクトマネージャーで「コンテンツファイル」を探し、ページレイアウトで「レコードへのファイルプライバシー」項目を配置します。配置後に再度「ファイルの詳細を編集」をすると表示項目が増えています。

コンテンツバージョンのページレイアウト
レコードのファイルプライバシー設定

 

 

デフォルトでは”レコードへのファイルプライバシー”が「レコードへのアクセス権を持つすべてのユーザが参照可能」となっているため、ファイル添付先レコードとファイルのアクセス権は連動しています。

「レコードで非公開」に変更すると、ファイル添付先レコードにアクセス権があってもファイルは見えなくなります。

 

 

ファイルへのアクセス権追加

上記で「ファイルのアクセス権を添付先レコードと切り分ける」方法を見てきました。取引先レコードはアクセス可能、ファイルは原則アクセス不可、加えて一部のユーザにはファイルを限定アクセスさせる方法を見ていきます。

ベースは「ファイルのアクセス権を添付先レコードと切り分ける」方法で設定した通り”レコードへのファイルプライバシー”「レコードで非公開」としておきます。

 

 

アクセス権は「共有」ボタンから追加が可能です。

共有ボタン

共有先:人/グループ、共有アクセス:閲覧者/コラボレータ から選択可能です。先ほど確認した”レコードへのファイルプライバシー”で「レコードで非公開」としていてもこのように手動共有していればファイル添付先ユーザ以外にもアクセス権が付与できます。

・閲覧者:表示やダウンロード、共有が可能です。

・コラボレータ:表示やダウンロード、共有の他にも権限の変更、編集、および新しいバージョンのアップロードが可能です。

共有先の選択肢
付与権限の選択肢

 

 

外部ユーザからのファイルアクセス

ExperienceCloudサイトからアクセスする外部ユーザにファイルアクセス権を付与にはどうすればいいでしょうか。

先ほど確認したファイルの「共有」ボタンでファイル添付先レコードにはデフォルトで「顧客アクセス」が無効になっています。有効に切り替えることで外部ユーザにもアクセス権が付与されます。

取引先レコードの顧客アクセス

 

 

アクセス権付与を自動化する

ここまでファイルのアクセス権変更は共有ボタンから手動で行いましたが、フローでの自動化を試してみます。

ファイル関連のリレーションは特殊で下記のように関連するオブジェクトが沢山あります。

コンテンツのオブジェクトER図
一部引用元:コンテンツのオブジェクト

「ContentDocumentLink」オブジェクトに保存されている下記3項目をコントロールすることでフローでアクセス権変更が可能になります。

LinkedEntityId:ファイル添付されたレコードなので今回で言うと取引先「ABC企業」のSalesforceIDです。

ShapeType:V/C/Iの3択です。Vが閲覧者、Cがコラボレータ、Iが添付レコードに連動するという意味です。

Visibility:AllUsers/InternalUsers/SharedUsersの3択です。AllUsersは外部ユーザ含むすべてのユーザ、InternalUsersは内部ユーザのみ、SharedUsersはファイルが投稿されたフィードを表示できるすべてのユーザという意味です。

例えば外部ユーザに参照権のみ付与する場合はShareTypeがV、VisibilityがAllUsersであればいいので下記のようにコンテンツドキュメントリンクを更新するイメージです。

取引先レコードから画面フロー起動することを想定した場合、LinkedEntityIdはrecordIdと一致するという条件にすれば起動元の取引先に添付されたファイルに繋がるコンテンツドキュメントリンクを更新できます。

フローのレコード更新要素
機能
Salesforceナレッジ

コメント

タイトルとURLをコピーしました