【Salesforce】 プロファイル と 権限セット の適切な考え方

  • プロファイル
  • 権限セット

この記事では、 Salesforce の プロファイル と 権限セット の適切な定義方針について紹介します。

一般的に、 Salesforce を導入する際には複数のプロファイルを定義しがちですが、それによって後々のメンテナンス性を損ねてしまう恐れがあるので、本記事が参考になれば幸いです。

Salesforce の プロファイル とは

ユーザに対して必ず設定しなければならない権限です。

幅広い用途があるので、詳細は公式サイトをご確認ください。

本ページに辿り着いている人は特徴は知っている前提で進めます。

ご容赦ください。

Salesforceプロファイルの特徴 Salesforceプロファイルの特徴 ユーザーごとの標準権限をひとまとめに持つ、土台側の設定 ACCESS アクセス権限の管理 オブジェクト / 項目 / レコードタイプ 業務ロールの基本権限をここで固める UI ユーザーインターフェース ページレイアウト / アプリ / タブ 誰に何を見せるかもプロファイルに寄る LOGIN ログイン設定 IP制限 / ログイン時間帯 / 2要素認証 アクセス経路まで含めて制御できる SYS システム権限 API / 開発 / データエクスポート 基盤まわりの操作範囲もここで決まる BUILD カスタマイズ カスタム項目 / オブジェクト / Apex 独自実装を触れるかどうかも含まれる SEC セキュリティ パスワード / セッション / 監査ログ 運用時の事故を減らす設定も多い

簡単に図にまとめました。

プロファイルでは、そのユーザがどのオブジェクトや項目にアクセスできるかを中心とし、様々な権限が管理できます。

Salesforce の 権限セット とは

権限セットは、さまざまなツールと機能へのアクセス権をユーザーに付与する設定と権限のコレクションです。権限セットは、ユーザーのプロファイルを変更することなくユーザーの機能アクセス権を拡張するもので、ユーザーの権限を管理するために推奨される方法です。

と、公式サイトで記載されています。

Salesforce権限セットの特徴 Salesforce権限セットの特徴 プロファイルに足りない分だけを、後から柔軟に追加するための仕組み FLEX 柔軟な権限付与 個別付与 / 複数組合せ / 一時対応 人や案件単位で必要な分だけ足しやすい EXPAND アクセス権限の拡張 オブジェクト / 項目 / Apexクラス 不足分だけを安全に上乗せできる SYS+ システム権限の追加 API / アプリ管理 / エクスポート 基盤操作の追加もプロファイルを壊さず行える REUSE 再利用しやすい 職種や案件ごとにまとめて設計できる プロファイルを増やしすぎずに済む AUDIT 棚卸ししやすい 複製 / 一括更新 / 付与状況の確認 監査や見直しの単位を細かく持てる DEV USE 開発用途にも向く Visualforce / LWC / カスタムアプリ チームや作業範囲ごとに配り分けやすい

特徴をまとめると、プロファイルの権限に加え、様々な権限を柔軟に拡張できる点が大きな違いといえます。

設定画面では、同じような設定を行う UI となっているので、使い分けに悩む方もいるかもしれません。

Sponsored

Salesforce の権限の考え方

Salesforce では、原則として 「小さく権限を与え」「拡張する」 が一般的な考え方です。

なぜなら、 Salesforce では権限を付与することはできても、権限を剥奪することは想定していないからです。

※ミュート権限など、特殊な設定はありますが、原則の考え方からは外れます。

そのため、 プロファイル で過剰な権限を設定してしまうと、後から権限が大きすぎて苦労する場面が出てきてしまうかもしれません。

Salesforceの権限の考え方 Salesforceの権限の考え方 プロファイルは小さく持ち、足りない分だけ権限セットで広げる 1 プロファイルで最小限の権限を設定 まずは共通土台だけを配る 2 必要に応じて権限セットを追加 案件や担当業務ごとに細かく足す 3 過剰な権限付与を避けやすくする あとから剥がす前提ではなく、追加前提で設計する
<rect x="446" y="244" width="240" height="88" rx="26" fill="#171717" />
<text x="566" y="280" text-anchor="middle" font-size="24" font-weight="700" fill="#fffaf2">プロファイル</text>
<text x="566" y="306" text-anchor="middle" font-size="13" fill="#d8d0c3">最小限の共通権限</text>

<rect x="478" y="178" width="208" height="50" rx="20" fill="#2a9d8f" />
<text x="582" y="209" text-anchor="middle" font-size="18" font-weight="700" fill="#fffaf2">権限セット 2</text>

<rect x="514" y="126" width="152" height="40" rx="18" fill="#4ecdc4" />
<text x="590" y="152" text-anchor="middle" font-size="16" font-weight="700" fill="#171717">権限セット 1</text>

<path d="M708 318V120" fill="none" stroke="#2a9d8f" stroke-width="4" stroke-linecap="round" marker-end="url(#sf-design-arrow)" />
<text x="724" y="136" font-size="12" fill="#5a5247">必要なら追加</text>
原則として「広く配ってあとで削る」より、「小さく配って必要分だけ足す」ほうが運用しやすい

プロファイル は最小限の権限設定にし、 権限セット で追加の権限を与える方法が普通(ベストプラクティス?)だと思います。

具体的な プロファイル や 権限セット の定義の仕方

ここまで述べたように、本来はプロファイルは最小限の権限設定にする必要がありますよね。

以下は私の見解ですが、IP制限や特殊なポリシーの制約、営業時間など、プロファイル単位で資源すべき特殊な要件がない限りは、 「標準ユーザ」 とか 「一般ユーザ」 と言った汎用的なプロファイルを定義し、基本的にはそのプロファイルを定義するようにすべきだと思っています。

運用面でも複雑さがかなりなくなる上に、メンテナンス対象のメタデータも最小限で済むからです。

そして、営業担当なら 「営業ユーザ」、上司なら 「上司ユーザ」 のような、追加の権限セットを定義しておけば、つけ外しだけで済むのです。

Sponsored

これがプロファイルレベルで管理されていたら、リリース作業のたびに絶望することになりますよ。

※この絶望的なプロファイルのメタデータ管理のお話はいずれ・・・。

じゃあレイアウト分けはどうするのさ

プロファイルレベルで管理する必要がある機能の代表格が、 Lightning レコードページだと思います。

正直、よっぽどの要件がない限りはアプリケーションで統一した方がいいと思うのですが、稀に、細かく分けないといけない面倒な場合があります。

そういう場合でもいくつか回避方法があります。

動的フォームの使用

最近リリースされた機能ですね。 Lightning レコードページで動的フォームを活用し、ユーザーの役割や権限に基づいて表示するフィールドを動的に制御できます。

これで、レイアウトを条件によって出し分けるためにプロファイルを分けなくて済みます。

条件付きコンポーネントの利用

Lightning レコードページ上で、コンポーネントの表示条件を設定できます。

レコードの項目値だったり、ユーザの情報であったり。

特定の条件(ユーザーの役割や権限など)に基づいて表示・非表示を制御できるなら、カスタム権限を定義して、その権限セットの有無で管理すればいいだけです。

わざわざプロファイルを分ける必要もありませんよね。

おわりに

このように、工夫次第でなんとでもなるのです。

適当にプロファイルを分ける提案をしてしまうのは簡単ですが、メンテナンス性も考慮して、それが本当に最適の提案になっているかは確認してほしいものです。

こういうところが腕の見せ所です。

私は少なくとも最善を尽くす提案をするよう心がけています。

カスタマーサクセスが結局自分のためになるので。