kw role
Контекстное слово — объявление кластера (§12.1)
Список слов: §1.4
Синтаксис
Provide = "provide" Type "=" Expr [ "for" "role" IdentList ] ;ClusterClause = "seeds" Expr | "port" IntLit | "trace_sample" FloatLit | "auth" Block | "defaults" "{" { Ident Expr } "}"
| "role" Ident "{" RoleClause { ( ";" | NL ) RoleClause } "}"
| "assign" "by" Expr { "else" Expr } ;Грамматика: Прил. A
Определяется в
- 12.1 Объявление кластера — В программе не больше одного cluster.
- 4.2 data — Поле: видимость?
- 1.4 Ключевые слова — Зарезервированные (нельзя использовать как имена)
- 13.4 Авторизация и политики — Объект политики
- 12.7 Зависимости — provide Тип = выражение (for role r, …)?
- 13.2 Аутентификация — Провайдеры задаются в cluster { auth { …
- 5.4 Условия — Тернарного оператора нет.
- 5.5 Сопоставление с образцом — match ДОЛЖЕН быть исчерпывающим.
Примеры
pub(api) data User {
pub(api) id: UserId
pub(api) name: Name
pub(api) email: Email? @since(2)
role: Role = Role.User
createdAt: Time = now()
invariant name != "admin" || role == Role.Admin
}— 4.2 data
policy Orders {
allow get(id) if caller.isUser(db.find(Order, id)?.userId)
allow list, recent if caller.has(role: .Support)
allow * if caller.service("billing")
deny delete unless caller.has(role: .Admin) && caller is .User(mfa: true, ..)
}
@public rpc health() -> Ok
@allow(role: .Admin) rpc purge() -> Ok
@internal rpc create(…) -> OrderСвязанные диагностики
actor-not-hosted, cluster-auth, cluster-decl, cluster-needs, cluster-seeds, placement-conflict, saga-without-role, service-not-served, topic-without-journal, unknown-role, unknown-field, data-rights, missing-policy, unknown-policy-target