Salesforce Communityまわりのアクセスコントロールについて整理された情報を探したのだが、見当たらなかったので調査がてら作成した。
まとめた結果は次の表の通り。
所有者 | 共有先 | 共有ルール(所有者) | 共有ルール(条件) | Apex Sharing | 共有セット | 共有グループ | キュー | 公開グループ |
内部 | 内部 | ○ | ○ | ○ | × | × | ○ | ○ |
内部 | Partner | ○ | ○ | ○ | × | × | ○ | ○ |
内部 | Plus | ○ | ○ | ○ | × | × | ○ | ○ |
内部 | 無印 | × | × | × | ○ | × | × | × |
Partner | 内部 | ○ | ○ | ○ | × | × | ○ | ○ |
Partner | Partner | ○ | ○ | ○ | × | × | ○ | ○ |
Partner | Plus | ○ | ○ | ○ | × | × | ○ | ○ |
Partner | 無印 | × | × | × | ○ | × | × | × |
Plus | 内部 | ○ | ○ | ○ | × | × | ○ | ○ |
Plus | Partner | ○ | ○ | ○ | × | × | ○ | ○ |
Plus | Plus | ○ | ○ | ○ | × | × | ○ | ○ |
Plus | 無印 | × | × | × | ○ | × | × | × |
無印 | 内部 | × | × | × | × | ○ | ○ ※1 | × |
無印 | Partner | × | × | × | × | ○ | ○ ※1 | × |
無印 | Plus | × | × | × | × | ○ | ○ ※1 | × |
無印 | 無印 | × | × | × | ○ | × | × | × |
内部⇒Sales CloudやService Cloud等のライセンスを持った社内ユーザー。
Partner⇒Partner Communityライセンス。
Plus⇒Customer Community Plusライセンス。
無印⇒Customer Communityライセンス。勝手に無印と呼んでいる。
※1 所有者をキューにすることは可能だが、当然ながらそのままだと無印からはアクセス権が無くなる
以降は解説やら補足やら何やらの蛇足となります。
Communityライセンス種別
Salesforce Communityのライセンスは現時点で以下の4種類。
- Customer Community(表上は無印)
- Customer Community Plus(表上はPlus)
- Partner Community(表上はPartner)
- Employee Community(ロールが使えてPlusやPartnerと同じなので今回は省略)
(わりとよくライセンスの名前や体系が変わるので注意が必要だ!)
解説
前提として今回はあくまでレコードの共有設定の話しであり、プロファイルや権限セットでのオブジェクトのCRUDは別の話しとする。
そもそもCommunity周りのアクセスコントロールを分かりづらいくしているのが、大規模コミュニティユーザー(無印)の存在だ。
他のCommunityライセンス(Partner,Plus)では、外部ユーザーを作ったタイミングで取引先の所有者の下に外部ユーザー用のロールが生成される。
例えば次の例では営業部1課に所属する内部ユーザが「昭和株式会社」と「平成株式会社」という取引先を所有している。
この取引先の取引先責任者としてCustomer Community Plusのユーザを作成すると、営業部1課ロールの配下としてデフォルト3つの外部ユーザー用ロールが生成されるのだ。
これらはCommunityの前身がPortalであるため、Salesforceの設定上は「ポータルロール」と表示されるが、共有ルール等でも使えるので、内部ユーザーのロールとほぼ同じように共有設定をすることができる。
もちろん運用の中で頻繁にポータルロールが増える場合、共有設定を管理者が毎回実施できるかというのは別の問題はある。
これに対して大規模コミュニティユーザーはポータルロールが生成されない。
Salesforceのパフォーマンスに影響を与える1つの要素として、ロール階層の計算によるアクセスチェックがあるが、大規模ユーザーはこの影響を軽減させる為にロールが存在しないらしい。
ロールが存在しないので、Salesforceで通常レコードへのアクセスコントロールを制御する共有ルールが使えないわけだが、代わりに共有セットや共有グループという仕組みを使ってアクセスコントロールを行う。
ここにさらに内部⇒外部や外部⇒内部という方向、あるいは外部ユーザでもCommunityライセンスが複数絡んでくるとアクセスコントロールは何が使えるんだっけ?となってしまうのだ。
そんな混乱の日々も今回まとめを作ったので「あぁ、それ?テックブログに書いてあるよ。」と言えるようになったので安心である。
表の各列の説明
共有ルール
Salesforceお馴染み共有設定で、所有者ベースで共有先のロールやグループを指定する方法とレコードの条件ベースで共有先を指定することができる。
先述した通り無印はロールが存在しないので、共有先を無印にする場合には使えない。
Apex Sharing
レコードのSharingオブジェクトに共有を指定する方法。詳しくはこちら。
無印でも出来ると勘違いしがちだが、無印はレコードへの直接共有ができないのでShareオブジェクトで共有することもできない。
共有セット
無印のユーザーにレコードへのアクセス権を与える場合に使う。
ただし、対象のオブジェクトが取引先や取引先責任者へのリレーションを持っている必要がある。わりとややこしい。詳しくはこちら。
あくまでロールを持たない無印などの大規模ユーザー向けなので、ロールを持つ内部ユーザや他Communityライセンスでは使えない。
共有グループ
無印ユーザーが所有するレコードを他ユーザーに共有する場合に使う。
共有セットとの関係がややこしいが、共有セットが無印への共有、共有グループが無印からの共有だ。
設定箇所のUIもすこぶる分かりづらい。
ちなみに共有セットと異なり「参照のみ」という設定が見当たらず、そのまま共有したら編集権限も付与された。
キュー、公開グループ
キューや公開グループ自体は共有を貼る仕組みではなく、あくまでユーザーをグルーピングする仕組である。
つまり作ったグループを共有ルールに指定したり、キューを所有者にしてアクセス権を付与する仕組みだ。
なぜ今回の表に入れたかと言うと、無印ユーザーをキューやグループに入れて共有ルールとかでアクセス権付与できないかと思ったからだ。
だが残念ながら、キューや公開グループの作成画面で無印ユーザーが出てこなかったので目論見は泡と消えた。
まとめ
ということでCommunity周りのアクセスコントロールについてまとめてみました。
なお、本記事はSalesforce App Cloud Advent Calendar 2016の5日目の記事となっています。