# Link, pull, and choose permissions Prerequisite: [dynamic mode and linking](dynamic-linking.md). A link creates the relationship between two conduits. The borrower then requests a particular spell from the conduit that owns it, using `add_spell_to_contract(...)`. ## The caller is the borrower Keep these roles visible in your code: 1. The owner binds a spell and keeps its returned ID. 2. Both books conjure named conduits in the same dynamic world. 3. The conduits link. 4. The borrower names the owner and spell ID when it pulls the spell. 5. The borrower resolves through its own conduit. An open link alone does not select the spells to share. The explicit pull is the boundary where the request names both its target and permissions. ## Match access to the operation The saved permission lessons compare `create`, `read`, and blocked sharing. `create` allows construction through the contract; `read` is the more restricted resolution path. Check whether the provider's instance exists before treating a read request as permission to construct one. Follow the lesson's reported outcome and refusal path rather than assuming every permission produces the same result. Use [SpellContract](late-binding.md) when the object you are constructing declares a dependency that will arrive over this relationship. ## The workflow in code These are the core steps from the saved example. Use its complete linked script for all class definitions and setup. ```{literalinclude} ../downloads/02_intermediate/21_dynamic_linking_basics.py :language: python :pyobject: main :linenos: ``` ## Runnable examples - [Dynamic linking basics](../examples/intermediate/21-dynamic-linking-basics.md) — Intermediate 21 - [Permissions block sharing](../examples/intermediate/09-permissions-block-sharing.md) — Intermediate 09 - [Permissions create vs read](../examples/intermediate/22-permissions-create-vs-read.md) — Intermediate 22 [All intermediate examples](../examples/intermediate/index.md) · [Level contents](index.md) · [Full contents](../contents.md) [Canonical page source](https://github.com/Synaptic724/melder/blob/4b364a338debcb1c010d0f6e9dcbbabb62945ba0/docs/intermediate/permissions.md)