サービス
  webflow ロゴFaceMFA ロゴ

Blog

事例・ブログ
2024-07-08
Salesforce

[Salesforce]複数プロファイルの項目レベルセキュリティ一括更新

Saleceforce×Pythonで複数プロファイルの項目レベルセキュリティを一括更新。サンプルコード有り

Pythonで複数プロファイルの項目レベルセキュリティを一括更新する方法

Salesforceのプロファイル管理は、データセキュリティとユーザーアクセス制御の基盤となる重要な要素です。しかし、複数のプロファイルに対して項目レベルセキュリティを手動で設定するのは手間がかかります。
そこで、今回は、Pythonのライブラリ「simple-salesforce」を活用し、複数のプロファイルの項目レベルセキュリティを一括で更新する方法を解説します。

対象読者

  • Salesforce 開発者
  • Salesforce 管理者
  • Python プログラマー

前提条件

  • 基本的な Salesforce の知識
  • Python の基本的なプログラミングスキル

動作環境

  • Python 3.12.2
  • simple-salesforce 1.12.5

Salesforceの複数プロファイルの項目レベルセキュリティを一括更新する方法(サンプルコード有り)

1. simple-salesforce のインストール

まず、simple-salesforce をインストールします。

pip install simple-salesforce

2. ファイルを作成

ディレクトリ構成
以下のようなディレクトリ構成を作成します。

.
└── Project/
    ├── csv_files/
    │   └── profiles.csv
    ├── salesforce_credentials.json
    ├── common_salesforce.py
    └── update_profile_by_csv.py

3. ファイルを編集

各ファイルの内容は以下の通りです。

salesforce_credentials.json

Salesforce にログインするユーザーの認証情報を記載します。

{
    "username": "xxxxxx@xxx.xxx",
    "password": "xxxxxxxxxxx",
    "security_token": "xxxxxxxxxxx",
    "domain": "login"
}

common_salesforce.py

Salesforce にログインするスクリプトです。 update_profile_by_csv.pyから呼び出されます。

import json
from simple_salesforce import Salesforce

def login_to_salesforce(credentials_file_path):
    # 資格情報ファイルを読み込み
    with open(credentials_file_path, mode='r', encoding='utf-8') as credentials_file:
        credentials = json.load(credentials_file)

    # Salesforceにログイン
    sf = Salesforce(
        username=credentials['username'],
        password=credentials['password'],
        security_token=credentials['security_token'],
        domain=credentials['domain']
    )
    print('Salesforceへのログインに成功しました。')
    return sf.mdapi

update_profile_by_csv.py

CSV ファイルから項目レベルセキュリティを更新するスクリプトです。

import csv
from common_salesforce import login_to_salesforce

def update_profiles_from_csv(csv_file_path, metadata_client):
    field_level_securities = {}
    # CSVファイルを読み込み
    with open(csv_file_path, mode='r', encoding='utf-8') as csv_file:
        csv_reader = csv.DictReader(csv_file)
        for row in csv_reader:
            # プロファイル項目レベルセキュリティのパラメータを定義
            field_args = {
                'field': f"{row['ObjectName']}.{row['FieldName']}",
            }
            # 項目レベルセキュリティに応じたパラメータを設定
            if row['FieldLevelSecurity'].lower() == 'editable':
                field_args['editable'] = True
                field_args['readable'] = True
            elif row['FieldLevelSecurity'].lower() == 'readable':
                field_args['editable'] = False
                field_args['readable'] = True
            else:
                field_args['readable'] = False
                field_args['editable'] = False
            field_level_security = metadata_client.ProfileFieldLevelSecurity(**field_args)

            if row['Profile'] not in field_level_securities:
                field_level_securities[row['Profile']] = []
            field_level_securities[row['Profile']].append(field_level_security)

    profiles = []
    for key in field_level_securities.keys():
        profiles.append(metadata_client.Profile(
            fullName=key,
            fieldPermissions=field_level_securities[key]
        ))
    return profiles

def main():
    credentials_file_path = 'salesforce_credentials.json'
    csv_file_path = 'csv_files/profiles.csv'
    metadata_client = login_to_salesforce(credentials_file_path)
    profiles = update_profiles_from_csv(csv_file_path, metadata_client)

    # プロファイルを更新
    if profiles:
        metadata_client.Profile.update(profiles)
        print('項目レベルセキュリティの更新が完了しました。')

if __name__ == '__main__':
    main()

profiles.csv

ObjectName,FieldName,Profile,FieldLevelSecurity
CustomObject__c,ExampleField1__c,Admin,editable
CustomObject__c,ExampleField2__c,Admin,readable
  • ObjectName: オブジェクトの API 参照名
    • カスタムオブジェクトの場合、__cまで含めます。
  • FieldName: 項目の API 参照名
    • カスタム項目の場合、__cまで含めます。
  • Profile: プロファイルの API 参照名
    • 「プロファイルの API 参照名」はプロファイル一覧などに表示される「プロファイル名」とは異なる場合があります。
    • 確認方法については「プロファイルの API 参照名の確認方法」をご参照ください。
  • FieldLevelSecurity: 項目レベルセキュリティ
    • 編集可能の場合、editable
    • 参照可能な場合、readable
    • どちらも不可の場合、空欄

プロファイルの API 参照名の確認方法

1. 設定 > 送信変更セット で新規変更セットを作成します(名前は任意)
設定 > 送信変更セット で新規変更セットを作成


2. 「プロファイルの追加」をクリックします
「プロファイルの追加」をクリック


3. 「API 参照名」列で確認することができます
「API 参照名」列で確認


4. Python スクリプトの実行

最後に、以下のコマンドを実行して Python スクリプトを実行します。

cd [作成したProjectフォルダへのパス]
python update_profile_by_csv.py

Pythonで項目レベルセキュリティを効率的に管理

今回紹介した方法を使用することで、Salesforceの複数プロファイルに対する項目レベルセキュリティの一括更新が簡単に行えるようになります。手動で行っていた煩雑な作業をPythonスクリプトに置き換えることで、時間と労力の大幅な節約が可能です。Salesforceのセキュリティ管理がより効率的かつ正確になるため、システム全体の安全性と信頼性も向上します。ぜひ、お試しください。

Contact

お問い合わせ
Salesforce、HubSpot、システム開発など
まずは何でもお気軽にご相談ください。