defineApplicationRole() でマークされたロールの権限を継承します(下記のThe default function roleを参照してください)。
src/roles/restricted-company-role.ts
行レベルセキュリティ
オブジェクトおよびフィールド権限は、ロールが操作できる オブジェクトとフィールド を決定します。 行レベル 権限述語 はさらに進んで、ロールが閲覧および操作できる レコード を決定します。たとえば、各外部ユーザーが自分自身のレコードだけを閲覧できるセルフサービスロールのようなケースです。 ロールに対してrowLevelPermissionPredicates を使って述語を宣言します。 マニフェストの他の要素と同様に、各述語はそれ自身の universalIdentifier を持ち、オブジェクトおよびフィールドをそれぞれの universalIdentifier、operand、そして(オプションで)クエリ時に値が注入される 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()の使用が推奨されます。
ベストプラクティス
- スキャフォールドされたロールから開始し、徐々に制限を強めてください。デフォルトでは幅広い読み取りアクセスが付与されていますが、本番環境でこれをそのまま使いたいケースはほとんどありません。
objectPermissionsとfieldPermissionsを、関数が実際に必要とするオブジェクトとフィールドだけに置き換えてください。permissionFlagUniversalIdentifiersはプラットフォームレベルの機能へのアクセスを制御します。 できるだけ最小限に保ってください。- 動作例:
hello-world/src/roles/function-role.ts。