Accountable Institutions

As well as being a multi-tenanted platform, Eclipse can be configured as a white labelled service offering where multiple tenants can be grouped under an accountable institution. Administrators of that accountable institution can create, administer and support all tenants within their institution. Certain assets can be also be custom branded e.g. the Admin Portal and email communications.

In this scenario tenants and admin users are created under an institution. Admin users created under an institution have the same capabilities as an Ukheshe global user but can only administer the tenants owned by that accountable institution.

In this way institution administrators can perform all the relevant tasks needed to support their tenants while enjoying the scalability, availability and simplicity of the shared Eclipse cloud native SaaS platform.

Create a Tenant under an Institution

To create a tenant under an institution you need to set the institution field when calling the create tenant endpoint:

POST /eclipse-conductor/rest/v1/tenants
{
  "companyNumber": "DT1234",
  "email": "[email protected]",
  "industrialClassification": "icc",
  "industrialSector": "iss",
  "institution": "ONSA",
  "name": "Test ",
  "phone1": "9222913437",
  "taxNumber": "T0385848",
  "tradingName": "Tests"
}
{
  "companyNumber": "DT1234",
  "email": "[email protected]",
  "industrialClassification": "icc",
  "industrialSector": "iss",
  "institution": "ONSA",
  "name": "Test ",
  "phone1": "9222913437",
  "taxNumber": "T0385848",
  "tradingName": "Tests",
  "version": 0
 }

Create Institution Admin user

To create an institution admin user you need to set the institution field and specify an institution role in the role field when calling the create admin user endpoint:

POST URL: {baseURL}/rest/v1/global/admin-users
Content-Type: application/json
{
  "firstName":"user1",
  "email": "[email protected]",
  "identity": "user1",
  "institution": "ONSA",
  "lastName": "ukheshe",
  "password": sadmsdsla#@#@",
  "phone1": "9494949494",
  "role": "INSTITUTION_ADMIN",
}
{
  "adminUserId": 1,
  "email": "[email protected]",
  "firstName":"user1",
  "identity": "user1",
  "institution": "ONSA",
  "lastName": "ukheshe",
  "phone1": "9494949494",
  "role": "INSTITUTION_ADMIN"
}

📘

Note

Institution roles mirror Ukheshe global roles but at an institution level:

  • INSTITUTION_ADMIN, INSTITUTION_FINANCE_L_1, INSTITUTION_FINANCE_L_2, INSTITUTION_FINANCE_L_3, INSTITUTION_TECH_SUPPORT, INSTITUTION_SUPPORT_L_1, INSTITUTION_SUPPORT_L_2, INSTITUTION_SUPPORT_L_3, INSTITUTION_INTEGRATOR

This can be done in the Eclipse Admin Portal by INSTITUTION_ADMIN users:

Add Institution Users in the Eclipse Admin Portal

Add Institution Users in the Eclipse Admin Portal

Admin Portal Theme

Institutions can apply their own branding to the Eclipse admin portal as follows:

  1. Configure reverse proxy with URL rewriting to forward custom URL to Eclipse URL e.g. https://eclipse-portal-admin-sandbox.ukheshe.rocks/admin-portal/
  2. Configure public property public.institution.adminportal.<hostname> // i.e public.institution.adminportal.mycustomurl.com as follows:
ValueKeyExampleDescription
primaryButtonColorcolor code# F15A22Specifies the prime colour for primary buttons
primaryButtonTextColorcolor code# fffSpecifies the text colour for primary buttons
primaryHeaderBackgroundColourcolor code# 96a2b4Specifies header colour where Tenant and search is presented
actionButtonBackGroundColorcolor code# 00984ESpecifies edit and delete icon colour
menuActiveHoverFocusColorcolor code# F15A22Specifies the hover color when you select icon
textColorcolor code# 555Specificies the login page text colour
primarySubHeaderBackgroundColorcolor codetransparentSpecifices the tenant header background colour
primaryHeaderColorcolor code# fffSpecifies the main header colour where profile information is presented
primaryLeftSideBarColorcolor code# fffSpecifies the left menu colour where Tenant, KYC/KYB etc. is presented
primarySearchFilterBoxcolor code# fffSpecifies search box primary colour
primarySearchTextColorcolor code# 808080Specifies search box text colour
faviconBrandAdd value for base64 formatfavicon1It must be added in database
favTitleAdd valueMyCompanySpecifies the title of the page (will be shown in browser tabs)
tableCallOldRowColorcolor codef0f3fbSpecifies odd row colour in tables
tableCallEvenRowColorcolor codef0f3fbSpecifies even row colour in tables
logoadd value for base64 formatdata:image/png;base64,iVBORw0KGgoAA....Specifies the logo shown in the left panel
loginPageBackgroundImageadd value for base64 formatdata:image/png;base64,iVBORw0KGgoAA....Specifies the background image of the login page
profileAvtarIconadd value for base64 formatdata:image/png;base64,iVBORw0KGgoAA....Specifies the profile icon to be used

Customise Admin Portal Emails

Eclipse allows tenants to send customised SMS and email notifications by configuring mustache templates and calling the notifications endpoint as documented here.

The Eclipse Admin Portal uses email notifications for:

  1. Onboarding new tenant admin users and providing a link to set the password
  2. Allow tenant admins to reset their passwords by receiving a link by email to set a new password.

By default these emails are controlled by the following global properties that define mustache templates:

  • mustache.email.admin.user
  • mustache.email.customer.password.reset

Institutions can override these properties and apply their own branding and content to these emails. e.g. Institution ABC has defined a custom Admin User Welcome Email in global property mustache.email.admin.user.ABC. If they set tenant config mustache.email.admin.user=mustache.email.admin.user.ABC for all their tenants then that email template will be used when adding admin users to those tenants.

Similarly institutions can define a custom Password Reset email in global property mustache.email.customer.password.reset.ABC. And by setting tenant config mustache.email.customer.password.reset=mustache.email.customer.password.reset.ABC on their tenants - this reset password email will be used for all admin users on those tenants.


Customise Admin Portal Views for specific roles or positions

Institutions can configure the menu's and submenus shown in the admin portal for each role. This allows the admin portal, which is a general purpose admin console for all Eclipse capabilities, to be configured to be used as a fit for purposes admin portal for particular use cases, for example merchant management.

This is controlled by setting a global property: admin.portal.layout.{ROLE_OR_POSITION}.{tenantId}

Example portal layout for a TENANT_SYSTEM user:

{
      "tenantMenu": [
          {
            "id": "customers",
            "label": "Customers",
            "icon": "supervisor_account",
            "subMenu": [
              {
                "id": "customers_general",
                "label": "General",
                "icon": "assignment_ind"
              },
              {
                "id": "customers_addresses",
                "label": "Addresses",
                "icon": "location_on"
              },
              {
                "id": "customers_documents",
                "label": "Documents",
                "icon": "description"
              },
              {
                "id": "customers_devices",
                "label": "Devices",
                "icon": "devices"
              },
              {
                "id": "customers_attachments",
                "label": "Attachments",
                "icon": "attachment"
              },
              {
                "id": "customers_identity",
                "label": "Identity",
                "icon": "perm_identity"
              },
              {
                "id": "customers_kyc",
                "label": "KYC",
                "icon": "star_rate"
              },
              {
                "id": "customers_positions",
                "label": "Positions",
                "icon": "people_outline"
              },
              {
                "id": "customers_wallets",
                "label": "Wallets",
                "icon": "account_balance_wallet",
                "subMenu": [
                  {
                    "id": "customers_wallets_general",
                    "label": "General",
                    "icon": "account_balance_wallet"
                  },
                  {
                    "id": "customers_wallets_attachments",
                    "label": "Attachments",
                    "icon": "attachment"
                  },
                  {
                    "id": "customers_wallets_transaction_history",
                    "label": "Transaction History",
                    "icon": "compare_arrows"
                  },
                  {
                    "id": "customers_wallets_topups",
                    "label": "Topups",
                    "icon": "monetization_on"
                  },
                  {
                    "id": "customers_wallets_withdrawals",
                    "label": "Withdrawals",
                    "icon": "monetization_on"
                  },
                  {
                    "id": "customers_wallets_remittance",
                    "label": "Remittance",
                    "icon": "payments"
                  },
                  {
                    "id": "customers_wallets_qr_codes",
                    "label": "QRCodes",
                    "icon": "qr_code"
                  },
                  {
                    "id": "customers_wallets_reservations",
                    "label": "Reservations",
                    "icon": "stop"
                  },
                  {
                    "id": "customers_wallets_transfers",
                    "label": "Transfers",
                    "icon": "compare_arrows"
                  }, {
                    "id": "customers_wallets_audit_events",
                    "label": "Audit Events",
                    "icon": "history"
                  },
                  {
                    "id": "customers_wallets_cards",
                    "label": "Cards",
                    "icon": "credit_card"
                  }
                ]
              },
              {
                "id": "customers_cards",
                "label": "Cards",
                "icon": "credit_card"
              },
              {
                "id": "customers_payments",
                "label": "Payments",
                "icon": "attach_money"
              },
              {
                "id": "customers_cards_on_file",
                "label": "Cards On File",
                "icon": "card_membership"
              },
              {
                "id": "customers_audit_events",
                "label": "Audit Events",
                "icon": "history"
              },
              {
                "id": "customers_beneficiaries",
                "label": "Beneficiaries",
                "icon": "account_balance"
              },
              {
                "id": "customers_others",
                "label": "Others",
                "icon": "settings"
              }
            ]
          },
          {
            "id": "organisations",
            "label": "Organisations",
            "icon": "workspaces",
            "subMenu": [
              {
                "id": "organisations_general",
                "label": "General",
                "icon": "assignment_ind"
              },
              {
                "id": "organisations_addresses",
                "label": "Addresses",
                "icon": "location_on"
              },
              {
                "id": "organisations_documents",
                "label": "Documents",
                "icon": "description"
              },
              {
                "id": "organisations_devices",
                "label": "Devices",
                "icon": "devices"
              },
              {
                "id": "organisations_wallets",
                "label": "Wallets",
                "icon": "account_balance_wallet",
                "subMenu": [
                  {
                    "id": "organisations_wallets_general",
                    "label": "General",
                    "icon": "account_balance_wallet"
                  },
                  {
                    "id": "organisations_wallets_attachments",
                    "label": "Attachments",
                    "icon": "attachment"
                  },
                  {
                    "id": "organisations_wallets_transaction_history",
                    "label": "Transaction History",
                    "icon": "compare_arrows"
                  },
                  {
                    "id": "organisations_wallets_topups",
                    "label": "Topups",
                    "icon": "monetization_on"
                  },
                  {
                    "id": "organisations_wallets_withdrawals",
                    "label": "Withdrawals",
                    "icon": "monetization_on"
                  },
                  {
                    "id": "organisations_wallets_remittance",
                    "label": "Remittance",
                    "icon": "payments"
                  },
                  {
                    "id": "organisations_wallets_qr_codes",
                    "label": "QRCodes",
                    "icon": "qr_code"
                  },
                  {
                    "id": "organisations_wallets_reservations",
                    "label": "Reservations",
                    "icon": "stop"
                  },
                  {
                    "id": "organisations_wallets_transfers",
                    "label": "Transfers",
                    "icon": "compare_arrows"
                  }, 
                  {
                    "id": "organisations_wallets_audit_events",
                    "label": "Audit Events",
                    "icon": "history"
                  },
                  {
                    "id": "organisations_wallets_cards",
                    "label": "Cards",
                    "icon": "credit_card"
                  }
                ]
              },
              {
                "id": "organisations_attachments",
                "label": "Attachments",
                "icon": "attachment"
              },
              {
                "id": "organisations_terminals",
                "label": "Terminals",
                "icon": "phonelink_ring"
              },
              {
                "id": "organisations_kyb",
                "label": "KYB",
                "icon": "star_rate"
              },
              {
                "id": "organisations_positions",
                "label": "Positions",
                "icon": "people_outline"
              }
            ]
          },
          {
            "id": "tenant_wallets",
            "label": "Tenant Wallets",
            "icon": "account_balance_wallet",
            "subMenu": [
              {
                "id": "tenant_wallets_general",
                "label": "General",
                "icon": "account_balance_wallet"
              },
              {
                "id": "tenant_wallets_attachments",
                "label": "Attachments",
                "icon": "attachment"
              },
              {
                "id": "tenant_wallets_transaction_history",
                "label": "Transaction History",
                "icon": "compare_arrows"
              },
              {
                "id": "tenant_wallets_topups",
                "label": "Topups",
                "icon": "monetization_on"
              },
              {
                "id": "tenant_wallets_withdrawals",
                "label": "Withdrawals",
                "icon": "monetization_on"
              },
              {
                "id": "tenant_wallets_remittance",
                "label": "Remittance",
                "icon": "payments"
              },
              {
                "id": "tenant_wallets_qr_codes",
                "label": "QRCodes",
                "icon": "qr_code"
              },
              {
                "id": "tenant_wallets_reservations",
                "label": "Reservations",
                "icon": "stop"
              },
              {
                "id": "tenant_wallets_transfers",
                "label": "Transfers",
                "icon": "compare_arrows"
              }, {
                "id": "tenant_wallets_audit_events",
                "label": "Audit Events",
                "icon": "history"
              }
            ]
          },
          {
            "id": "system_wallets",
            "label": "System Wallets",
            "icon": "settings",
            "subMenu": [
              {
                "id": "system_wallets_general",
                "label": "General",
                "icon": "account_balance_wallet"
              },
              {
                "id": "system_wallets_attachments",
                "label": "Attachments",
                "icon": "attachment"
              },
              {
                "id": "system_wallets_transaction_history",
                "label": "Transaction History",
                "icon": "compare_arrows"
              },
              {
                "id": "system_wallets_topups",
                "label": "Topups",
                "icon": "monetization_on"
              },
              {
                "id": "system_wallets_withdrawals",
                "label": "Withdrawals",
                "icon": "monetization_on"
              },
              {
                "id": "system_wallets_remittance",
                "label": "Remittance",
                "icon": "payments"
              },
              {
                "id": "system_wallets_qr_codes",
                "label": "QRCodes",
                "icon": "qr_code"
              },
              {
                "id": "system_wallets_reservations",
                "label": "Reservations",
                "icon": "stop"
              },
              {
                "id": "system_wallets_transfers",
                "label": "Transfers",
                "icon": "compare_arrows"
              }, {
                "id": "system_wallets_audit_events",
                "label": "Audit Events",
                "icon": "history"
              }
            ]
          },
          {
            "id": "wallet_types",
            "label": "Wallet Types",
            "icon": "account_balance_wallet"
          },
          {
            "id": "admin_users",
            "label": "Admin Users",
            "icon": "bar_chart"
          },
          {
            "id": "configuration",
            "label": "Configuration",
            "icon": "settings"
          },
          {
            "id": "reports",
            "label": "Reports",
            "icon": "receipt"
          },
          {
            "id": "wallet_transfer",
            "label": "Wallet Transfer",
            "icon": "receipt"
          },                                                                                                                                                                                                                                                    
          {
            "id": "search_item",
            "label": "Search Item",
            "icon": "youtube_searched_for"
          }
      ]
    }