プロファイルのオブジェクト権限と項目レベルセキュリティの一括設定【データローダ】

概要

サンドボックスから本番環境にリリースする際に
データローダでプロファイルの権限を一括設定しました。
プロファイルやオブジェクトの数が多い場合はデータローダでの作業が得策です。
TerraSkyさんのブログ記事を見ながら作業しました。
参考にした記事

作業手順(項目レベルセキュリティ)

①サンドボックスの権限セット(PermissionSet)オブジェクトから権限を付与するプロファイルの情報をデータローダでCSVに出力

SELECT Id, Name, Label, ProfileId, Profile.Name FROM PermissionSet
名前内容
PermissionSetオブジェクト権限のセットを表示
Name項目API のオブジェクトの一意の名前
Label項目権限セットの表示ラベル
ProfileId項目ProfileレコードのID ※NULLなら権限セット
Profile.Name項目プロファイルの名前

②出力したCSVからID列とProfile.Name列を残して列を削除
更新対象のプロファイル以外の行を削除

③サンドボックスの項目権限(FieldPermissions)オブジェクトから権限を付与する項目をデータローダでCSVに出力

SELECT Id, ParentId, SobjectType, Field, PermissionsEdit, PermissionsRead FROM FieldPermissions
WHERE SobjectType IN (<ObjectName>) // オブジェクトのAPI参照名を指定
ORDER BY ParentId, SobjectType, Field
名前内容
FieldPermissionsオブジェクト 親のPermissionSetオブジェクトの有効化された項目権限を表示
ParentId項目 PermissionSetレコードのID
SobjectType項目オブジェクトのAPI参照名
Field項目項目のAPI参照名
PermissionsEdit項目Trueの場合、項目を編集可能
PermissionsRead項目Trueの場合、項目を参照可能

④出力したCSVからVLOOKUP関数を使ってプロファイルのレコードを抽出
※N/A列を削除

⑤本番環境で①から④を実施

⑥サンドボックスと本番環境のCSVをマージ

⑦不要な列を削除

⑧データローダで項目権限(FieldPermissions)オブジェクトにinsert

作業手順(オブジェクト権限)

①、②は同じ

③サンドボックスのオブジェクト権限(ObjectPermissions)オブジェクトから権限を付与する項目をデータローダでCSVに出力

SELECT Id, ParentId, SobjectType, PermissionsEdit, PermissionsRead, PermissionsCreate, PermissionsDelete, PermissionsViewAllRecords, PermissionsModifyAllRecords FROM ObjectPermissions
WHERE SobjectType IN (<ObjectName>) // オブジェクトのAPI参照名を指定
ORDER BY ParentId, SobjectType

名前内容
ObjectPermissionsオブジェクト親のPermissionSetオブジェクトの有効化されたオブジェクト権限を表示
ParentId項目PermissionSetレコードのID
SobjectType項目オブジェクトのAPI参照名
PermissionsEdit項目Trueの場合、オブジェクトのレコードを編集可能
PermissionsRead項目Trueの場合、オブジェクトのレコードを参照可能
PermissionsCreate項目Trueの場合、オブジェクトのレコードを作成可能
PermissionsDelete項目Trueの場合、オブジェクトのレコードを削除可能
PermissionsViewAllRecords項目Trueの場合、オブジェクトのすべてのレコードを参照可能
PermissionsModifyAllRecords項目Trueの場合、オブジェクトのすべてのレコードを編集可能

④、⑤、⑥、⑦は同じ

⑧データローダでオブジェクト権限(ObjectPermissions)オブジェクトにinsert

その他

システム管理者プロファイル等はupdateを使用
※プロファイルの設定変更はupdate
upsertを使えば、まとめて設定できる
項目レベルセキュリティからinsertする
※オブジェクト権限からinsertすると項目権限が重複してエラーになる場合がある