Policy: the service's own two groups, and who owns what¶
The groups sluis reads for itself, how a workspace id narrows them, and how a GitHub organisation or Slack workspace gets an owner, part of the policy.
all:sluis:operator and all:sluis:viewer are the only group names the service reads for itself, with the scoped forms <id>:sluis:operator and <id>:sluis:viewer. It still reads the old spelling all:access-roster:operator (and :viewer, and the scoped forms), still accepted (ADR 0035). Both confer the same roles, and sluisctl render carries either. A policy that names both holds the union. An identity is an operator because the policy puts it in the operators group.
A workspace id in the scope position scopes the role to that tenant:
groups:all:sluis:operator:# the whole installationmembers:[[email protected]]C0northern:sluis:operator:# one directory onlymembers:[[email protected]]C0northern:sluis:viewer:matchers:[{ email_domain:north.example}]
Rule
Value
Scope
naming convention over the ordinary table; only the two roles read it
north.example:k8s:admin
an ordinary group; grants nothing over a workspace
A scope
never widens or narrows the installation-wide role
The directory that owns an organisation is recorded at connect time. The policy names an organisation by login, binds its teams and carries no owner. A policy with github.<org>.owner is refused at load: delete the key.
The same rule applies to a Slack workspace.
Caller connecting an unconnected organisation
Owner recorded
installation-wide operator (all:sluis:operator)
chosen on the connect form: any connected directory, or none
operator of one connected directory (<id>:sluis:operator)
that directory, unasked
operator of several connected directories
chosen among them; required
operator of an unconnected directory, a viewer, anyone else
refused
Fact
Value
Audit
roster.github_org.connected carries owner
Change owner
installation-wide operator only (ChangeGitHubOrganisationOwner, Change owner button); audited as roster.github_org.owner_changed
An organisation...
may be operated by
connected with an owner
<owner>:sluis:operator or all:sluis:operator
connected with none, or from before owners were recorded
all:sluis:operator alone
not connected
connecting: installation-wide operator, or an operator of a directory
Rule
Value
Operated means
connect, reconnect, disconnect, confirm removals, runner Apps, catalogue Apps and their recent tokens, finishing a connect on GitHub's return
Role check on return
repeated; the flow's owner travels in the signed state
ImportGitHubLinks
any directory operator; adopts an account only on evidence from an organisation that caller may operate
Seen
a scoped viewer sees organisations its workspace owns, their Apps and reports
Link App and links
belong to every organisation; installation-wide viewer only