defineApplicationRole() (см. раздел Роль функции по умолчанию ниже).
src/roles/restricted-company-role.ts
Безопасность на уровне строк
Разрешения на объекты и поля определяют, к каким объектам и полям у роли есть доступ. Предикаты прав доступа на уровне строк заходят дальше и определяют, какие записи роль может видеть и с которыми может работать — например, для роли самообслуживания, где каждый внешний пользователь видит только свои собственные записи. Объявляйте предикаты с помощьюrowLevelPermissionPredicates в роли. Как и остальная часть манифеста, каждый предикат имеет свой собственный universalIdentifier и ссылается на объект и поле по их universalIdentifier, operand, а также (необязательно) поле workspaceMember, значение которого подставляется во время выполнения запроса — чтобы вы могли выразить: “отношение владельца записи является текущим участником рабочей области”:
src/roles/partner-role.ts
Комбинирование предикатов с группами
По умолчанию предикаты роли комбинируются с помощьюAND. Чтобы комбинировать некоторые из них с помощью OR (или
вкладывать логику), объявите запись rowLevelPermissionPredicateGroups и укажите на неё каждый предикат через
predicateGroupUniversalIdentifier. Эта роль позволяет партнёру видеть сделку, которая либо принадлежит ему,
либо по которой он является контактным лицом:
src/roles/partner-opportunities-role.ts
- Присвойте каждому предикату и группе стабильный
universalIdentifier(любой uuid) — он служит ключом сущности между обновлениями, а предикаты ссылаются на группы по нему. - Предикаты могут ссылаться на объекты и поля, принадлежащие вашему приложению, или на стандартные объекты и поля Twenty.
- Безопасность на уровне строк (row-level security) применяется для рабочих пространств в тарифах, которые её включают; предикаты по-прежнему синхронизируются в других тарифах, они просто не применяются.
Роль функции по умолчанию
Когда вы создаёте новое приложение с помощью шаблона, CLI создаёт файл роли по умолчанию, объявленный с помощьюdefineApplicationRole():
src/roles/default-role.ts
defineApplicationRole() — это тонкая обёртка вокруг defineRole(), которая помечает ту роль, которая используется как роль приложения по умолчанию во время установки. Проверка идентична defineRole, но конвейер сборки автоматически подключает его universalIdentifier к полю defaultRoleUniversalIdentifier манифеста приложения — поэтому вам не нужно ссылаться на него из defineApplication самостоятельно.
Заметки:
- Допускается ровно один вызов
defineApplicationRole(...)на приложение — сборка манифеста завершится с ошибкой, если будет найдено более одного. - Используйте
defineRole()(а неdefineApplicationRole()) для любых дополнительных ролей, которые ставятся вместе с вашим приложением. - Явная установка
defaultRoleUniversalIdentifierвdefineApplication()всё ещё поддерживается для обратной совместимости, но считается устаревшей по сравнению сdefineApplicationRole().
Лучшие практики
- Начните с сгенерированной роли и постепенно ограничивайте её — роль по умолчанию предоставляет широкий доступ на чтение, что редко подходит для продакшена.
- Замените
objectPermissionsиfieldPermissionsна точные объекты и поля, которые действительно нужны вашим функциям. permissionFlagUniversalIdentifiersуправляют доступом к возможностям на уровне платформы. Сведите их к минимуму.- См. рабочий пример:
hello-world/src/roles/function-role.ts.