Ownership
Every shareable element has an owner: the tenant it was created for. Ownership is itself recorded as a grant — the highest rung of the ladder — and it means administration: the owner assigns access levels, approves requests, and can transfer ownership. When you create an element you also receive its full acting capability (see below), so as a creator you can both run the element and govern it; ownership can be transferred without re-sharing everything else.Access Levels and Capabilities
Access has two independent axes. Levels form a ladder; each level includes everything below it:
Capabilities cover acting through an element, and are separate from levels — holding edit on a connection does not let you run requests through it, and being able to run requests does not let you reconfigure it. Capabilities exist per element type, for example:
- Connections: full access, read data, write data, and per-action run rights.
- Data tables: full access, read records, write records.
- Jobs: operate — held by every operator in the job’s crew, the team that runs it together. Operator assignment grants it; sharing never does.
Who You Can Share With
An element can be shared with five kinds of audience:- The whole workspace — one grant that covers every workspace member.
- Specific people — individual grants, each with its own access level.
- A job’s operators — everyone on that job’s crew.
- The workspace’s operators — everyone on the workspace’s crew, which operates every job in the workspace.
- Anyone with the link — an anonymous, view-only public link, available only where the element’s reference page says so.
Default Visibility
When you create an element, it starts either visible to the workspace (everyone can see it exists and read its non-secret configuration, but only the owner can use, edit, or manage it) or private to you. Which of the two applies is part of each element type’s reference page. You can tighten or widen visibility afterwards from the element’s sharing control.Inherited Permissions
Some elements never hold their own grants — they inherit sharing from their parent. A job’s routines, tasks, deliverables, and receipts work this way: their headers show “Inherited from job” instead of an editable sharing control, and what crosses is defined per relationship — the job’s operator works its records while other audiences see them read-only. Inheritance means there is never a gap inside such a group — you cannot share the parent and forget its parts.Requesting Access
When you open something you don’t have access to, you don’t hit a dead end — you see a request access screen. Pick the level you need, optionally add a message, and the owner receives an actionable request in their inbox. Approving it creates the grant in one click; you’re notified either way.How Enforcement Works
Every operation in Membrane — from the console, the API, the CLI, or an agent — goes through the same access check. Each operation declares what it requires on the elements it touches (for example, reading a table’s records requires the read records capability on that table; sharing anything requires manage on it). If your effective access doesn’t satisfy the requirement, the operation fails with a clear403 explaining what you’d need and what you currently have.
Dependencies Sharing
Elements often need other elements to work — a canvas reads tables, a job acts through connections. Sharing an element doesn’t automatically share what it depends on: a canvas shared with the workspace still fetches data as each viewer, so a viewer without access to the underlying tables sees errors instead of data. Membrane surfaces these gaps instead of silently widening access:- When you share, the share flow lists what the audience is still missing and offers a one-click grant at the minimum level needed — or a one-click request to the dependency’s owner when it isn’t yours to share.
- On the element, the sharing control warns while gaps exist — including when a dependency’s sharing is revoked later.
- For viewers, a blocked element names the dependency that failed and offers to request access to it directly.
- When you revoke access to an element that shared elements depend on, Membrane warns you before applying.