Skip to content

6.2.2.15 OrganizationJoinLink

6.2.2.15.1 Purpose

A link an Organization shares so that people join by themselves, like the invite links of Slack or Discord: whoever opens it signs in or registers and becomes a member with the link's role and groups, at once or after an approval. Because it names no e-mail, its limits keep it safe: an expiry of at most 30 days, an optional number of uses, an optional e-mail domain, and a role that can never manage members, groups, delegations or the Organization itself. Every join is audited with the link, so a leaked link can be traced, revoked and its members reviewed.

6.2.2.15.2 Questions it answers

  • Which links does this Organization have open, with which role, until when?
  • Who joined through a link, and when?
  • Which links require an approval?

6.2.2.15.3 Fields

Field Type Cardinality Description
id string (uuid) 1..1 Key.
organization Organization 1..1
role OrganizationRoleAccessControl 1..1 The creator must be allowed to give it (OrganizationRoleAccessControl.priority), checked again at every join. A link can never give a role that holds an admin capability (OrganizationRoleCapabilityEnum), nor Owner or Sync Client: roles with admin capabilities are given by invitation only.
groups UserGroup 0..*
created_by User 1..1
token_hash string 1..1 Unique.
SHA-256 of the secret in the link; the secret is shown once, when the link is created.
expires_at datetime 1..1 At most 30 days after creation; seven by default.
max_uses integer 0..1 Empty: no limit until it expires.
uses integer 1..1 Default: 0.
email_domain string 0..1 When set, only a Person whose verified e-mail is in this domain can use it, e.g. a cooperative's own domain.
requires_approval boolean 1..1 Default: false.
When true, joining creates an OrganizationJoinRequest that a member with access.members.manage approves.
revoked_at datetime 0..1
revoked_by User 0..1
created_at datetime 1..1
updated_at datetime 1..1

6.2.2.15.4 Relationships

References

Referenced by

6.2.2.15.5 Rules & constraints

  • A link an Organization shares so that people join it by themselves, like the invite links of Slack or Discord: whoever opens it signs in or registers (User) and becomes a member with the link's role and groups, at once or after an approval. Unlike an invitation (OrganizationInvitation) it names no e-mail, so its limits are what keeps it safe.
  • A link works while it is not revoked, not expired, under max_uses and while the Organization is active. Using it again as a member changes nothing. Every join is a PlatformAuditEvent with the link, so a leaked link can be traced and revoked, and its members reviewed. Creating, listing and revoking links needs access.members.manage.