> For the complete documentation index, see [llms.txt](https://developer.1moneynetwork.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developer.1moneynetwork.com/integrations/sdks/rust/methods/authority-management/assigning-authority.md).

# Assigning Authority

1Money Network provides optional protocol level role assignment for token operations that can can be delegated by the [Master Authority](/core-concepts/token-authority.md) to other account addresses. The [Master Authority](/core-concepts/token-authority.md#master-authority-master_authority) always retains super admin rights over all roles. &#x20;

* [Master Mint/Burn](/core-concepts/token-authority.md#master-mint-burn-authority-master_mint_burn_authority): `MasterMintBurn`
  * Grant/revoke minting/burning privileges, set mint limits (cannot mint directly)
* [Minting / Burning](/core-concepts/token-authority.md#mint-burn-authorities-mint_burn_authorities): `MintBurnTokens`
  * Mint tokens (up to allowance), burn tokens from any account (cannot grant privileges)
* [Pausing / Unpausing](/core-concepts/token-authority.md#pause-authorities-pause_authorities): `Pause`
* [Whitelisting / Blacklisting](/core-concepts/token-authority.md#list-authorities-list_authorities): `ManageList`
* [Metadata management:](/core-concepts/token-authority.md#metadata-update-authorities-metadata_update_authorities) `UpdateMetadata`

### Example Code:

```rust
// 4. Grant authority for Minting and Burning
    println!("\n4. Grant Authority");
    println!("==================");

    let grant_payload = TokenAuthorityPayload {
        chain_id,
        nonce: current_nonce,
        action: AuthorityAction::Grant,
        authority_type: Authority::MintBurnTokens,
        authority_address: recipient_address,
        token: token_address,
        value: TokenAmount::from(1000000000000000000u64), // 1 token allowance
    };
    current_nonce += 1; // Increment for next transaction

    match client.grant_authority(grant_payload, private_key).await {
        Ok(response) => {
            println!("Authority granted - Tx: {}", response.hash);
        }
        Err(e) => {
            print_detailed_error("Could not grant authority", &e);
        }
    }
```
