こんにちは、管理人の@Salesforce.Zです。Salesforceのセキュリティ体制がきちんと整えている、セキュリティも、大手企業はSalesforce製品を導入する理由の一つです。ここに来た方が開発者か、案件のリーダーかと考えられます。セキュリティの面で、要件定義フェーズで、困ったではないかと思います。今一度、基礎を確認していきましょう。きっと良い整理になります。
Contents
データセキュリティ
大まか、4つレベルで、セキュリティを管理できます。
組織、組織内のすべてのオブジェクト、オブジェクトの特定の項目、オブジェクトのレコードでは、各々の制御ができます。
組織レベル
これが、 組織レベルで、承認されたユーザのリストを維持し、パスワードポリシーを設定し、特定の時間と場所にログインを制限できます。プロファイルのところで、設定できます。
オブジェクトレベル
これもプロファイルのところで、特定のオブジェクトに対して、下記の操作権限の制御ができる
- 参照
- 作成
- 編集
- 削除
- すべて表示(自分が所有者ではないレコードでも見れること)
- すべて編集( 自分が所有者ではないレコードでも変更できること)

項目レベル
一つのオブジェクトに複数の項目って構成するので、普段はId、Name項目が標準で付いてきますが、カスタマイズで、作成するXXX項目には組織にあらゆるプロファイルに対して、権限(参照可能と参照のみ)を付与できます。

レコードレベル
あるXXユーザにオブジェクトの参照を許可しながら、参照できる個々のオブジェクトレコードを制限できます 。 レコードレベルのアクセス権は、次の 4 つの方法で管理できます。
- 組織の共有設定
- ロール階層
- 共有ルール
- 共有の直接設定
組織の共有設定
開発現場では、よく言うデータモデルのことです。取引先は非公開になっているような設定の話です。取引先が非公開にすると、複数ユーザがあるとすると、それぞれのユーザが自分の所有する取引先レコードしかアクセスできないです。
組織の共有設定では、オブジェクトへの権限を下記のように制御できます。
- 非公開(所有者ではないと、そのレコードへのアクセスできない)
- 公開/参照のみ (所有者ではないが、見ることができる、編集できない)
- 公開/参照・更新可能 (所有者ではないが、見ることができる、編集できる)
- 親レコードに連動 ( レコードに対して参照、編集、削除 は親へのアクセスに属する)
※ここのアクセスは レコードに対して参照、編集、削除 という操作権限です。
ロール階層
組織図みたいなロールの設定階層によって、同じ階層のお互いにデータが見れるとか、あるいは、マネージャーはロール階層では、自分より下のロールのデータが全部見れる、こういった設定が、ロール階層で、制御する
共有ルール
上記の例で、取引先を非公開したところから続きに例をします。自分が所有者となるデータだけアクセスできる、部下や同僚のデータも見る必要になると、ロール階層や共有ルールで、対応できます。 共有ルールはオブジェクトごとに制御できる。
※共有ルールは、ロール階層と同様に、レコードへのアクセス権を追加のユーザに付与する目的でのみ使用します。これを組織の共有設定より厳しくすることはできません。

共有の直接設定
組織の共有設定、ロール階層、または共有ルールのように自動化 されていますが、直接共有とは、本当に特定のレコードの詳細ページで、ボタンで相手に共有する手動作業です。一時的に付与時に使うと思ってもいいかもしれません。
レコードレベルのアクセス整理

Organization-Wide Defaults:組織の共有設定
Role Hierarchy:ロール階層
Sharing Rules:共有設定
Manual Sharing:手動共有
このように、どんどん、権限を拡張していく考え、拡張するうちに、いろいろな手段があり、ケースバイケースで、使ってくださいとのこと
終わりに
大手の起業が業務システムを導入する時に、使用する部門も多く、部門別の権限が違う、例えば、経理のため、Apexを書いたが、Apexがあるオブジェクトに対して、作成や編集、削除を行っているのに、プロファイルにその権限がない、あるいは共有設定で、親レコードに連動する設定になっている、テスト不十分で、きっと漏れることがあるでしょう。権限問題はすごい大事、今一度、整理したら、どうでしょう