メインコンテンツへスキップ
ロールとは権限セットのことであり、アプリが読み取りまたは書き込みできるオブジェクト、参照できるフィールド、および使用できるプラットフォームレベルの機能を定義します。 すべてのアプリのロジック関数とフロントコンポーネントは、defineApplicationRole() でマークされたロールの権限を継承します(下記のThe default function roleを参照してください)。
src/roles/restricted-company-role.ts

行レベルセキュリティ

オブジェクトおよびフィールド権限は、ロールが操作できる オブジェクトとフィールド を決定します。 行レベル 権限述語 はさらに進んで、ロールが閲覧および操作できる レコード を決定します。たとえば、各外部ユーザーが自分自身のレコードだけを閲覧できるセルフサービスロールのようなケースです。 ロールに対して rowLevelPermissionPredicates を使って述語を宣言します。 マニフェストの他の要素と同様に、各述語はそれ自身の universalIdentifier を持ち、オブジェクトおよびフィールドをそれぞれの universalIdentifieroperand、そして(オプションで)クエリ時に値が注入される workspaceMember フィールドによって参照します。これにより、「レコードの所有者リレーションが現在のワークスペースメンバー である」ことを表現できます。
src/roles/partner-role.ts
述語はマニフェスト内に含まれて出荷されるため、インストールやアップグレードのたびに、ロールと一緒にまとめて作成・更新・削除されます。同期を保つための、別個のポストインストール手順は不要です。

述語とグループの組み合わせ

デフォルトでは、ロールの述語は AND で組み合わされます。 それらの一部を OR で組み合わせたり(あるいはロジックをネストしたり)するには、rowLevelPermissionPredicateGroups エントリを宣言し、各述語から predicateGroupUniversalIdentifier を通じてそのエントリを参照させます。 このロールでは、パートナーが、自分が所有しているか、あるいは連絡窓口となっている Opportunity を閲覧できます:
src/roles/partner-opportunities-role.ts
注記:
  • すべての述語とグループに安定した universalIdentifier(任意の uuid)を付与してください。これはアップグレードにまたがってエンティティを特定するキーとなり、述語はこの識別子でグループを参照します。
  • 述語は、あなたのアプリが所有するオブジェクトやフィールド、または Twenty の標準オブジェクトを参照できます。
  • 行レベルセキュリティは、それを含むプランのワークスペースに対して適用されます。その他のプランでも述語は引き続き同期されますが、単に適用されないだけです。

デフォルトの関数ロール

新しいアプリをスキャフォルドすると、CLI は defineApplicationRole() で宣言されたデフォルトのロールファイルを作成します。
src/roles/default-role.ts
defineApplicationRole()defineRole() の軽量なラッパーであり、インストール時にアプリケーションのデフォルトとして使用されるロールをフラグ付けします。 検証は defineRole と同一ですが、ビルドパイプラインがその universalIdentifier をアプリケーションマニフェストの defaultRoleUniversalIdentifier に自動的に関連付けるため、defineApplication から参照する必要はありません。 注記:
  • 各アプリにつき defineApplicationRole(...)1 つだけ 許可されます。2 つ以上見つかった場合、マニフェストのビルドは失敗します。
  • アプリが提供する追加ロールには、defineApplicationRole() ではなく defineRole() を使用してください。
  • defineApplication()defaultRoleUniversalIdentifier を明示的に設定することは後方互換性のため引き続きサポートされていますが、非推奨であり、代わりに defineApplicationRole() の使用が推奨されます。

ベストプラクティス

  • スキャフォールドされたロールから開始し、徐々に制限を強めてください。デフォルトでは幅広い読み取りアクセスが付与されていますが、本番環境でこれをそのまま使いたいケースはほとんどありません。
  • objectPermissionsfieldPermissions を、関数が実際に必要とするオブジェクトとフィールドだけに置き換えてください。
  • permissionFlagUniversalIdentifiers はプラットフォームレベルの機能へのアクセスを制御します。 できるだけ最小限に保ってください。
  • 動作例: hello-world/src/roles/function-role.ts