Users and Permissions

ArangoDB provides operations for managing users and permissions. Most of these operations can only be performed by admin users via _system database.

from arangoasync import ArangoClient
from arangoasync.auth import Auth
from arangoasync.typings import UserInfo

# Initialize the client for ArangoDB.
async with ArangoClient(hosts="http://localhost:8529") as client:
    auth = Auth(username="root", password="passwd")

    # Connect to "_system" database as root user.
    sys_db = await client.db("_system", auth=auth)

    # List all users.
    users = await sys_db.users()

    johndoe = UserInfo(
        user="johndoe@gmail.com",
        password="first_password",
        active=True,
        extra={"team": "backend", "title": "engineer"}
    )

    # Create a new user.
    await sys_db.create_user(johndoe)

    # Check if a user exists.
    assert await sys_db.has_user(johndoe.user) is True
    assert await sys_db.has_user("johndoe@gmail.com") is True

    # Retrieve details of a user.
    user_info = await sys_db.user(johndoe.user)
    assert user_info.user == "johndoe@gmail.com"

    # Update an existing user.
    johndoe["password"] = "second_password"
    await sys_db.update_user(johndoe)

    # Replace an existing user.
    johndoe["password"] = "third_password"
    await sys_db.replace_user(johndoe)

    # Retrieve user permissions for all databases and collections.
    await sys_db.permissions(johndoe.user)

    # Retrieve user permission for "test" database.
    perm = await sys_db.permission(
        username="johndoe@gmail.com",
        database="test"
    )

    # Retrieve user permission for "students" collection in "test" database.
    perm = await sys_db.permission(
        username="johndoe@gmail.com",
        database="test",
        collection="students"
    )

    # Update user permission for "test" database.
    await sys_db.update_permission(
        username="johndoe@gmail.com",
        permission="rw",
        database="test"
    )

    # Update user permission for "students" collection in "test" database.
    await sys_db.update_permission(
        username="johndoe@gmail.com",
        permission="ro",
        database="test",
        collection="students"
    )

    # Reset user permission for "test" database.
    await sys_db.reset_permission(
        username="johndoe@gmail.com",
        database="test"
    )

    # Reset user permission for "students" collection in "test" database.
    await sys_db.reset_permission(
        username="johndoe@gmail.com",
        database="test",
        collection="students"
    )

See arangoasync.database.StandardDatabase for API specification.