# Users and permissioning

This page describes how to handle users, RET clients, and permissioning when developing your own RET adapter suite.

## Mapping users to RET clients

Each adapter created by the RET Adapter Toolkit uses an implementation of [UserManager](https://docs.caplin.com/developer/api/rettoolkit/latest/com/caplin/motif/fx/ret/common/permission/UserManager.html) to access extra RET-related user attributes, including how users map to clients in RET.

The RET Adapter Toolkit includes an example implementation of `UserManager`, [FileBasedUserManager](https://docs.caplin.com/developer/api/rettoolkit/latest/com/caplin/motif/fx/ret/common/extension/usermanager/FileBasedUserManager.html), which loads user attributes from an XML file, `logins.xml`. Use this example to help you create your own implementation of `UserManager` that loads user attributes from a central resource.

Specify your own implementation of `UserManager` in the configuration builder for your adapter:

```java
public class MyCalendarAdapter
{
  public static void main(String[] args)
  {
    try {
      CalendarConfiguration calendarConfiguration =
        CalendarConfiguration.newConfigurationBuilder()
        .setUserManager(new MyUserManager())
        .build();

      final ConfigurationLoader configurationLoader =
        calendarConfiguration.getConfigurationLoader();

      final Log4jConfiguration log4jConfiguration =
        Log4jConfiguration.newDefaultConfiguration().build();
      log4jConfiguration.initialise(configurationLoader);

      CalendarAdapter adapter = new CalendarAdapter(calendarConfiguration);
      adapter.start();
    } catch (Exception ex) {
      ex.printStackTrace();
      System.exit(1);
    }
  }
}
```

## Permissioning users

The RET Adapter Toolkit includes a class to create a Permissioning Adapter that supplies permissioning data to the Caplin Permissioning Service.

As part of the work of creating your own permissioning adapter, create your own implementations of the following interfaces:

| Interface | Example implementation |
| --- | --- |
|  [PermissionLoader,opts="nofollow"](https://docs.caplin.com/developer/api/rettoolkit/4.15.0/com/caplin/motif/fx/ret/permissioning/permissions/PermissionLoader.html) | [GroupPermissionLoader,opts="nofollow"](https://docs.caplin.com/developer/api/rettoolkit/4.15.0/com/caplin/motif/fx/ret/permissioning/extension/loading/GroupPermissionLoader.html), [UserLoader,opts="nofollow"](https://docs.caplin.com/developer/api/rettoolkit/4.15.0/com/caplin/motif/fx/ret/permissioning/extension/loading/UserLoader.html), [UserPermissionsLoader,opts="nofollow"](https://docs.caplin.com/developer/api/rettoolkit/4.15.0/com/caplin/motif/fx/ret/permissioning/extension/loading/UserPermissionsLoader.html) |
| [AuthenticationManager,opts="nofollow"](https://docs.caplin.com/developer/api/rettoolkit/4.15.0/com/caplin/motif/fx/ret/permissioning/permissions/AuthenticationManager.html) | [FileBasedAuthenticationManager,opts="nofollow"](https://docs.caplin.com/developer/api/rettoolkit/4.15.0/com/caplin/motif/fx/ret/permissioning/extension/authentication/FileBasedAuthenticationManager.html) |
| [InstrumentProvider](https://docs.caplin.com/developer/api/rettoolkit/latest/com/caplin/motif/fx/ret/common/instrument/InstrumentProvider.html) | [FxCrossInstrumentProvider](https://docs.caplin.com/developer/api/rettoolkit/latest/com/caplin/motif/fx/ret/common/extension/instrument/FxCrossInstrumentProvider.html) |
| [UserManager](https://docs.caplin.com/developer/api/rettoolkit/latest/com/caplin/motif/fx/ret/common/permission/UserManager.html) | [FileBasedUserManager](https://docs.caplin.com/developer/api/rettoolkit/latest/com/caplin/motif/fx/ret/common/extension/usermanager/FileBasedUserManager.html) |

Specify your own implementations of the classes above in the configuration builder for your permissioning adapter:

```java
public class MyPermissioningAdapter
{
  public static void main(String[] args)
  {
    try
    {
      PermissioningAdapterConfiguration configuration =
        PermissioningAdapterConfiguration.newPermissioningConfigurationBuilder()
        .addPermissionLoader(new MyPermissionLoader())
        .setInstrumentProvider(new MyInstrumentProvider())
        .setAuthenticationManager(new MyAuthenticationManager())
        .setUserManager(new MyUserManager())
        .build();

      final ConfigurationLoader configurationLoader =
        configuration.getConfigurationLoader();

      final Log4jConfiguration log4jConfiguration =
        Log4jConfiguration.newDefaultConfiguration().build();
      log4jConfiguration.initialise(configurationLoader);

      PermissioningAdapter adapter = new PermissioningAdapter(configuration);
      adapter.start();
    }
    catch (Exception ex)
    {
      ex.printStackTrace();
      System.exit(1);
    }
  }
}
```
