User
Date: 2016-06-25

org.osgi.service.useradmin

## Interface User

- All Superinterfaces:
    Role
  All Known Subinterfaces:
    Group

      public interface User
      extends Role

  A `User` role managed by a User Admin service.

  In this context, the term "user" is not limited to just human beings. Instead, it refers to any entity that may have any number of credentials associated with it that it may use to authenticate itself.

  In general, `User` objects are associated with a specific User Admin service (namely the one that created them), and cannot be used with other User Admin services.

  A `User` object may have credentials (and properties, inherited from the `Role` class) associated with it. Specific `UserAdminPermission` objects are required to read or change a `User` object's credentials.

  Credentials are `Dictionary` objects and have semantics that are similar to the properties in the `Role` class.

- - ### Field Summary

    - ### Fields inherited from interface org.osgi.service.useradmin.Role

      `GROUP, ROLE, USER, USER_ANYONE`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `java.util.Dictionary` | `getCredentials()` Returns a `Dictionary` of the credentials of this `User` object.
    `boolean` | `hasCredential(java.lang.String key, java.lang.Object value)` Checks to see if this `User` object has a credential with the specified `key` set to the specified `value`.

    - ### Methods inherited from interface org.osgi.service.useradmin.Role

      `getName, getProperties, getType`

- - ### Method Detail

    - #### getCredentials

          java.util.Dictionary getCredentials()

      Returns a `Dictionary` of the credentials of this `User` object. Any changes to the returned `Dictionary` object will change the credentials of this `User` object. This will cause a `UserAdminEvent` object of type `UserAdminEvent.ROLE_CHANGED` to be broadcast to any `UserAdminListeners` objects.

      Only objects of type `String` may be used as credential keys, and only objects of type `String` or of type `byte[]` may be used as credential values. Any other types will cause an exception of type `IllegalArgumentException` to be raised.

      In order to retrieve a credential from the returned `Dictionary` object, a `UserAdminPermission` named after the credential name (or a prefix of it) with action `getCredential` is required.

      In order to add or remove a credential from the returned `Dictionary` object, a `UserAdminPermission` named after the credential name (or a prefix of it) with action `changeCredential` is required.

      Returns:
        `Dictionary` object containing the credentials of this `User` object.

    - #### hasCredential

          boolean hasCredential(java.lang.String key,
                              java.lang.Object value)

      Checks to see if this `User` object has a credential with the specified `key` set to the specified `value`.

      If the specified credential `value` is not of type `String` or `byte[]`, it is ignored, that is, `false` is returned (as opposed to an `IllegalArgumentException` being raised).

      Parameters:
        `key` - The credential `key`.
        `value` - The credential `value`.
      Returns:
        `true` if this user has the specified credential; `false` otherwise.
      Throws:
        `java.lang.SecurityException` - If a security manager exists and the caller does not have the `UserAdminPermission` named after the credential key (or a prefix of it) with action `getCredential`.