リソースの権限

個別の要素リソース(Activity など)とコレクションリソース(Activities など)の両方に、permissions セクションが含まれる場合があります。関連ユーザーがアクセス可能なリソースに対して実行できるアクションをこのセクションで定義します。

permissions セクションは権限のリストで構成され、それぞれの後に Boolean 式が続きます。Boolean 式が True を返す場合にのみ権限が付与されます。

例えば、以下のコードでは、policyNumbers_core-1.0access.yaml ファイルでの宣言に従って、Claims リソース(クレームのコレクション)で権限を定義します。view 権限は必ず付与されます。Gosu 式の user.hasPolicyAccess(resource, Optional.of(data)) が True を返す場合、create 権限は付与されます。

Claims:
  permissions:

    view: true
    create: "user.hasPolicyAccess(resource, Optional.of(data))"

要素リソースに対する権限

個別の要素に対して、viewcreateedit、および delete の権限を指定できます。また、カスタムビジネスアクションに対しても権限を指定できます。例えば、POST /activities/{activityId}/assign エンドポイントがある場合、Activity リソースに対して assign 権限を指定できます。カスタムアクションの場合、エンドポイントパスの末尾で使用される動詞と権限名は一致する必要があります。

例えば、以下は Claim エンティティに対する権限を指定します。標準の view 権限と edit 権限とともに、カスタムビジネスアクション権限の close が指定されていることに注意してください。

Claim:
        permissions:
        view: "perm.Claim.view(resource.Claim)"
        edit: "perm.Claim.edit(resource.Claim)"
        ...
        close: "perm.Claim.close(resource.Claim)"
        ...
警告: カスタムアクションを実行する新規エンドポイントを作成する場合、エンドポイントに vieweditcreatedelete などの基本権限と競合する名前をエンドポイントに付けないでください。そのようにすると、権限の動作が予期しないものになります。

特定の権限がアクセスファイルに指定されていない場合、権限はデフォルトでリソースの親の権限になります。特定のリソースに権限セクションがない場合、すべての権限はデフォルトでリソースの親の権限になります。

使用可能な Boolean 式

True または False を返す Gosu 式はすべて、権限の Boolean 式として使用できます。

権限について、ベースコンフィギュレーションに、以下の種類の Boolean 式が含まれています。

  • Boolean 値
  • キーワード __inherit(この場合、権限は ClaimActivities...view: __inherit など、リソースの親から継承されます)
  • 以下を含む Gosu 式:
    • Gosu システム perm 式("perm.system.actview" など)
    • Gosu リソース perm 式("perm.Activity.view(resource.Activity)" など)
    • Gosu 式("!resource.Note.Confidential || resource.Note.Author == entity.User.util.CurrentUser || perm.Claim.viewconfidentialnotes(resource.Note.Claim)" など)
    • システム API 層で宣言れさた Gosu メソッド("gw.rest.core.pl.util.v1.ActivityInternalPermissionUtil.canApprove(resource.Activity)" など)

システム権限またはリソース権限のチェックを行う Gosu 式の記述の詳細については、ルールガイドを参照してください。

場合によっては、以下の例のように、複数の式が数行に分かれてリストされます。この場合、式の論理積になります。権限が付与されるには、すべての式が True を返す必要があります。

CheckSets:
  permissions:
    view:
      - __inherit
      - "perm.Claim.viewpayments(resource.Claim)"