Skip to content

Commit

Permalink
Document user management support in Navigator (digital-asset#13085)
Browse files Browse the repository at this point in the history
* Document user management support in Navigator

fixes digital-asset#12934

changelog_begin
changelog_end
  • Loading branch information
cocreature authored Feb 25, 2022
1 parent f67e9d4 commit c09e1d4
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 25 deletions.
90 changes: 65 additions & 25 deletions docs/source/tools/navigator/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@ Connect the Navigator to any Daml Ledger and use it to:
- Exercise choices on contracts
- Advance time (This option applies only when using Navigator with the Daml Sandbox ledger.)

Installing and starting Navigator
Starting Navigator
*********************************

Navigator ships with the SDK. To launch it:
Navigator is included in the SDK. To launch it:

1. Start Navigator via a terminal window running :doc:`Daml Assistant </tools/assistant>` by typing ``daml start``

Expand All @@ -33,55 +33,95 @@ Navigator ships with the SDK. To launch it:
.. note:: Navigator is compatible with these browsers: Safari, Chrome, or
Firefox.

For information on how to launch and use Navigator outside of the SDK, see :ref:`navigator-manual-advanced-usage` below.
Logging in
**********

By default, Navigator shows a drop-down list with the users that have been
created via the :ref:`user management service <user-service>`. During
development, it is common to create these users in a
:ref:`Daml script <script-ledger-initialization>`: that you specify in the
``init-script`` section of your ``daml.yaml`` file so it is executed
on ``daml start``. Most of the templates shipped with the Daml SDK
already include such a setup script. Only users that have a primary
party set will be displayed.

After logging in, you will interact with the ledger as the primary
party of that user, meaning that you can see contracts visible to that
party and submit commands (e.g. create a contract) as that party.

The party you are logged in as is not displayed directly. However,
Navigator provides autocompletion based on the party id which starts
with the party id hint so a good option is to set the party id hint to
the user id when you allocate the party in your setup script. You can
see an example of that in the ``skeleton`` template:

.. literalinclude:: /_templates/skeleton/daml/Main.daml
:language: daml
:start-after: -- user_setup_begin
:end-before: -- user_setup_end

Choosing a party / changing the party
*************************************

The ledger is a record of transactions between authorized participants on the distributed network.
Before you can interact with the ledger, you must assume the role of a particular party.
This determines the contracts that you can access and the actions you are permitted to perform on the ledger.
The first step in using Navigator is to use the drop-down list on the Navigator home screen to select from the available
parties.
users.

.. image:: images/choose-party.png
:width: 30%
:align: center

.. note:: The party choices are configured on startup. (Refer to
:doc:`/tools/assistant` or :ref:`navigator-manual-advanced-usage` for more instructions.)

.. TODO: Consider repeating instructions instead of cross-referencing.
The main Navigator screen will be displayed, with contracts that this party is entitled to view in the main pane and
The main Navigator screen will be displayed, with contracts that the primary party of this user
is entitled to view in the main pane and
the option to switch from contracts to templates in the pane at the left. Other options allow you to filter the
display, include or exclude archived contracts, and exercise choices as described below.

.. image:: images/example.png
:width: 85%
:align: center

To change the active party:
To change the active user:

#. Click the name of the current party in the top right corner of the screen.
#. Click the name of the current user in the top right corner of the screen.

#. On the home screen, select a different party.
#. On the home screen, select a different user.

.. image:: images/sign-out.png
:width: 30%
:align: center

You can act as different parties in different
You can act as different users in different
browser windows. Use Chrome's profile feature
https://support.google.com/chrome/answer/2364824 and sign in as
a different party for each Chrome profile.
a different user for each Chrome profile.

Logging in as a Party
=====================

Instead of logging in by specifying a user, you can also log in by
specifying a party directly. This is useful if you do not want to or
cannot (because your ledger does not support user management) create
users.

To do so, you can start Navigator with a flag to disable support for user management::

daml navigator --feature-user-management=false

To use this via ``daml start``, you can specify it in your ``daml.yaml`` file::

navigator-options:
- --feature-user-management=false

Instead of displaying a list of users on login, Navigator will
display a list of parties where each party is identified by its
display name.

Logging out
***********
Alternatively you can specify a fixed list of parties in your
``daml.yaml`` file. This will automatically disable user management
and display those parties on log in. Note that you still need
to allocate those parties before you can log in as them.

To log out, click the name of the current party in the top-right corner of the screen.
.. code-block:: yaml
.. COMMENT: Why should I log out?? What if I don't?
parties:
- Alice::12201d00faa0968d7ab81e63ad6ad4ee0d31b08a3581b1d8596e68a1356f27519ccb
- Bob::12201d00faa0968d7ab81e63ad6ad4ee0d31b08a3581b1d8596e68a1356f27519ccb
Viewing templates or contracts
******************************
Expand Down
2 changes: 2 additions & 0 deletions templates/skeleton/daml/Main.daml
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,14 @@ template Asset

setup : Script AssetId
setup = script do
-- user_setup_begin
alice <- allocatePartyWithHint "Alice" (PartyIdHint "Alice")
bob <- allocatePartyWithHint "Bob" (PartyIdHint "Bob")
aliceId <- validateUserId "alice"
bobId <- validateUserId "bob"
createUser (User aliceId (Some alice)) [CanActAs alice]
createUser (User bobId (Some bob)) [CanActAs bob]
-- user_setup_end

aliceTV <- submit alice do
createCmd Asset with
Expand Down

0 comments on commit c09e1d4

Please sign in to comment.