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](https://files.readme.io/2f28446-Screenshot_2024-03-05_152549.png)
Add Institution Users in the Eclipse Admin Portal
Admin Portal Theme
Institutions can apply their own branding to the Eclipse admin portal as follows:
- Configure reverse proxy with URL rewriting to forward custom URL to Eclipse URL e.g. https://eclipse-portal-admin-sandbox.ukheshe.rocks/admin-portal/
- Configure public property public.institution.adminportal.<hostname> // i.e public.institution.adminportal.mycustomurl.com as follows:
Value | Key | Example | Description |
---|---|---|---|
primaryButtonColor | color code | # F15A22 | Specifies the prime colour for primary buttons |
primaryButtonTextColor | color code | # fff | Specifies the text colour for primary buttons |
primaryHeaderBackgroundColour | color code | # 96a2b4 | Specifies header colour where Tenant and search is presented |
actionButtonBackGroundColor | color code | # 00984E | Specifies edit and delete icon colour |
menuActiveHoverFocusColor | color code | # F15A22 | Specifies the hover color when you select icon |
textColor | color code | # 555 | Specificies the login page text colour |
primarySubHeaderBackgroundColor | color code | transparent | Specifices the tenant header background colour |
primaryHeaderColor | color code | # fff | Specifies the main header colour where profile information is presented |
primaryLeftSideBarColor | color code | # fff | Specifies the left menu colour where Tenant, KYC/KYB etc. is presented |
primarySearchFilterBox | color code | # fff | Specifies search box primary colour |
primarySearchTextColor | color code | # 808080 | Specifies search box text colour |
faviconBrand | Add value for base64 format | favicon1 | It must be added in database |
favTitle | Add value | MyCompany | Specifies the title of the page (will be shown in browser tabs) |
tableCallOldRowColor | color code | f0f3fb | Specifies odd row colour in tables |
tableCallEvenRowColor | color code | f0f3fb | Specifies even row colour in tables |
logo | add value for base64 format | data:image/png;base64,iVBORw0KGgoAA.... | Specifies the logo shown in the left panel |
loginPageBackgroundImage | add value for base64 format | data:image/png;base64,iVBORw0KGgoAA.... | Specifies the background image of the login page |
profileAvtarIcon | add value for base64 format | data: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:
- Onboarding new tenant admin users and providing a link to set the password
- 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"
}
]
}
Updated 19 days ago