Skip to main content
**역할(role)**은 권한 집합입니다. 즉, 앱이 어떤 객체를 읽거나 쓸 수 있는지, 어떤 필드를 볼 수 있는지, 그리고 어떤 플랫폼 수준 기능을 사용할 수 있는지를 정의합니다. 모든 앱의 로직 함수와 프런트 컴포넌트는 defineApplicationRole()로 표시된 역할의 권한을 상속받습니다(아래 기본 함수 역할을 참조하세요).
src/roles/restricted-company-role.ts

행 수준 보안

오브젝트 및 필드 권한은 역할이 어떤 오브젝트와 필드 를 다룰 수 있는지를 결정합니다. 행 수준 권한 프레디킷 은 더 나아가 역할이 어떤 레코드 를 보고 작업할 수 있는지를 결정합니다. 예를 들어, 각 외부 사용자가 자신의 레코드만 볼 수 있는 셀프 서비스 역할 같은 경우입니다. 역할에 rowLevelPermissionPredicates 로 프레디킷을 선언합니다. 매니페스트의 나머지와 마찬가지로, 각 프레디킷은 자체 universalIdentifier 를 가지고, 오브젝트와 필드를 각각의 universalIdentifier, operand, 그리고 (선택적으로) 쿼리 시점에 값이 주입되는 workspaceMember 필드를 통해 참조합니다. 이렇게 하면 “레코드의 owner relation is 현재 workspace member이다”를 표현할 수 있습니다:
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과 동일하지만, 빌드 파이프라인이 애플리케이션 매니페스트의 defaultRoleUniversalIdentifier에 해당 역할의 universalIdentifier를 자동으로 연결하므로, defineApplication에서 직접 참조할 필요가 없습니다. 노트:
  • 앱당 정확히 하나의 defineApplicationRole(...)만 허용되며, 둘 이상 발견되면 매니페스트 빌드가 실패합니다.
  • 앱에서 제공하는 추가 역할에는 defineApplicationRole()가 아니라 defineRole()을 사용하세요.
  • 호환성을 위해 defineApplication()에서 defaultRoleUniversalIdentifier를 명시적으로 설정하는 방식도 여전히 지원되지만, 이제는 defineApplicationRole() 방식이 권장되며 이전 방식은 더 이상 권장되지 않습니다.

모범 사례

  • 스캐폴딩된 역할에서 시작한 다음 점진적으로 권한을 제한하세요. 기본 설정은 광범위한 읽기 액세스를 부여하는데, 이는 프로덕션 환경에서 원하는 경우가 거의 없습니다.
  • objectPermissionsfieldPermissions를 함수에 실제로 필요한 정확한 객체와 필드로 교체하세요.
  • permissionFlagUniversalIdentifiers는 플랫폼 수준 기능에 대한 액세스를 제어합니다. 최소한으로 유지하세요.
  • 동작 예제를 참조하세요: examples/hello-world/src/roles/default-role.ts.