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()방식이 권장되며 이전 방식은 더 이상 권장되지 않습니다.
모범 사례
- 스캐폴딩된 역할에서 시작한 다음 점진적으로 권한을 제한하세요. 기본 설정은 광범위한 읽기 액세스를 부여하는데, 이는 프로덕션 환경에서 원하는 경우가 거의 없습니다.
objectPermissions와fieldPermissions를 함수에 실제로 필요한 정확한 객체와 필드로 교체하세요.permissionFlagUniversalIdentifiers는 플랫폼 수준 기능에 대한 액세스를 제어합니다. 최소한으로 유지하세요.- 동작 예제를 참조하세요:
hello-world/src/roles/function-role.ts.