# Password Manager Entitlements

The **Password Manager SDK** enables you to examine the resources used and their limits for a registered user. Resource limits are described by an **Entitlement**, an object with a name and a limit indicating some maximum usage value. Resource usage is tracked for each Sudo.

{% hint style="info" %}
To allocate entitlements to your users or groups of users, refer to the Entitlements [Administrative API](https://docs.sudoplatform.com/guides/entitlements/administrative-api).
{% endhint %}

## Entitlement Types

The following table describes the entitlements used to control access to the Password Manager:

| Entitlement                          | Type    | Description                                                                                                            |
| ------------------------------------ | ------- | ---------------------------------------------------------------------------------------------------------------------- |
| `sudoplatform.vault.vaultMaxPerSudo` | Numeric | Maximum number of vaults a Sudo can have at a time. If zero, this user is not entitled to access the Password Manager. |

{% tabs %}
{% tab title="TypeScript" %}

```typescript
/* ... */
export type EntitlementName = 'vaultMaxPerSudo' | ...
```

{% endtab %}

{% tab title="Swift" %}

```swift
public struct Entitlement {
    /* ... */
    public enum Name: String {
        case maxVaultPerSudo
    }
}
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
data class Entitlement(
    // ...
) : Parcelable {
    /** Enum that represents the different types of entitlements available */
    enum class Name {
        MAX_VAULTS_PER_SUDO
    }
}
```

{% endtab %}
{% endtabs %}

## Getting Entitlements

The `getEntitlement` method returns the set of Password Manager Entitlements and their limits granted to the signed in user.

{% tabs %}
{% tab title="TypeScript" %}

```typescript
try {
    const entitlements = await client.getEntitlement()

    entitlements.forEach((ent) =>
        console.log(`This user can have up to ${ent.limit} of ${ent.name}`))
} catch (error) {
    // Handle/notify user of the error.
}
```

{% endtab %}

{% tab title="Swift" %}

```swift
var client: PasswordManagerClient!

client.getEntitlement { (result) in 
    switch result {
    case .success(let entitlements):
        entitlements.forEach {
            print("This user can have up to \($0.limit) of \($0.name)")
        }

    case .failure(let error):
        /* Handle error logic */
        return
    }
}
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
// val client: SudoPasswordManagerClient

launch {
    try {
        val entitlement = withContext(Dispatchers.IO) {
            client.getEntitlement()
        }

        entitlement.forEach {
            println("This user can have up to ${it.limit} of ${it.name}")
        }
    } catch (e: SudoPasswordManagerException) {
        // Handle/notify user of exception
    }
}
```

{% endtab %}
{% endtabs %}

The `getEntitlementState` method returns the usage value of each Password Manager Entitlement for each Sudo.

{% tabs %}
{% tab title="TypeScript" %}

```typescript
try {
    const entitlementStates = await client.getEntitlementState()

    entitlementStates.forEach((ent) =>
        console.log(`Sudo ${ent.sudoId} has consumed ${ent.value}/${ent.limit} of ${ent.name}`))
} catch (error) {
    // Handle/notify user of the error.
}
```

{% endtab %}

{% tab title="Swift" %}

```swift
var client: PasswordManagerClient!

// Entitlement state
client.getEntitlementState { (result) in 
    switch result {
    case .success(let entitlements):
        entitlements.forEach {
            println("Sudo \($0.sudoId) has consumed \($0.value)/\($0.limit) of \($0.name)")
        }

    case .failure(let error):
        /* Handle error logic */
        return
    }
}
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
// val client: SudoPasswordManagerClient

launch {
    try {
        val entitlementState = withContext(Dispatchers.IO) {
            client.getEntitlementState()
        }

        entitlementState.forEach {
            println("Sudo ${it.sudoId} has consumed ${it.value}/${it.limit} of ${it.name}")
        }
    } catch (e: SudoPasswordManagerException) {
        // Handle/notify user of exception
    }
}
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
Read more about the Sudo Platform entitlements system and how to integrate with it in the [Entitlements](https://docs.sudoplatform.com/guides/entitlements) section of the Sudo Platform documentation.
{% endhint %}
