・Pythonで複数プロファイルの項目レベルセキュリティを一括更新
・サンプルコード
・Pythonで項目レベルセキュリティを効率的に管理する方法
Salesforceのプロファイル管理は、データセキュリティとユーザーアクセス制御の基盤となる重要な要素です。しかし、複数のプロファイルに対して項目レベルセキュリティを手動で設定するのは手間がかかります。
そこで、今回は、Pythonのライブラリ「simple-salesforce」を活用し、複数のプロファイルの項目レベルセキュリティを一括で更新する方法を解説します。
まず、simple-salesforce をインストールします。
pip install simple-salesforce
ディレクトリ構成
以下のようなディレクトリ構成を作成します。
.
└── Project/
├── csv_files/
│ └── profiles.csv
├── salesforce_credentials.json
├── common_salesforce.py
└── update_profile_by_csv.py
各ファイルの内容は以下の通りです。
Salesforce にログインするユーザーの認証情報を記載します。
{
"username": "xxxxxx@xxx.xxx",
"password": "xxxxxxxxxxx",
"security_token": "xxxxxxxxxxx",
"domain": "login"
}
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
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()
ObjectName,FieldName,Profile,FieldLevelSecurity
CustomObject__c,ExampleField1__c,Admin,editable
CustomObject__c,ExampleField2__c,Admin,readable
最後に、以下のコマンドを実行して Python スクリプトを実行します。
cd [作成したProjectフォルダへのパス]
python update_profile_by_csv.py
今回紹介した方法を使用することで、Salesforceの複数プロファイルに対する項目レベルセキュリティの一括更新が簡単に行えるようになります。手動で行っていた煩雑な作業をPythonスクリプトに置き換えることで、時間と労力の大幅な節約が可能です。Salesforceのセキュリティ管理がより効率的かつ正確になるため、システム全体の安全性と信頼性も向上します。ぜひ、お試しください。