好きなものだけ書く。ポジティブに。

好きなことを楽しく。プログラミング、写真、音楽、ガジェットとか。

Apex で権限セットグループに権限セットを追加する

複数の権限セットが存在していて複数をグルーピングして権限セットグループで管理したいケースがそれなりにあります。 Apexで操作したいケースはあまり多くないかもしれませんが、パッケージ開発モデル で開発しているとそれなりに有り得そうです。

同じ組織で開発している複数のパッケージの場合は権限付与などはシンプルにしたいものです。

皆と違うユニフォームでチームに入れていない様子のイラスト
権限が無い時は悲しい気分になりますよね

権限セットグループをApexで自動で付与したい

例えばパッケージをインストールした時に InstallHundler というインターフェースでApex処理を実行する事ができます。

その中で新規の権限セットを既存の権限セットグループに追加できたら便利ですね。

普通にオブジェクト的に操作できた!便利〜

PermissionSet ps = [SELECT Id, DeveloperName FROM PermissionSet WHERE Name = 'psName'];
PermissionSetGroup psg = [SELECT Id, DeveloperName FROM PermissionSetGroup WHERE DeveloperName = 'psgDeveloperName'];
PermissionSetGroupComponent psgc = new PermissionSetGroupComponent(PermissionSetId=ps.Id, PermissionSetGroupId=psg.Id);
insert psgc;

なければ作るようにしたかったのでこんな感じのメソッドを作りました

  private void appendPermissionSetToGroup() {
    PermissionSet ps = [SELECT Id, Name FROM PermissionSet WHERE Name = 'psName'];
    PermissionSetGroup psg = [SELECT Id, DeveloperName FROM PermissionSetGroup WHERE DeveloperName = 'psgDevName'];
    PermissionSetGroupComponent[] psgcList = [
      SELECT Id
      FROM PermissionSetGroupComponent
      WHERE PermissionSetId = :ps.Id AND PermissionSetGroupId = :psg.Id
    ];
    if (psgcList == null || psgcList.size() == 0) {
      PermissionSetGroupComponent psgc = new PermissionSetGroupComponent(
        PermissionSetId = ps.Id,
        PermissionSetGroupId = psg.Id
      );
      insert psgc;
    }
  }