0 to 1 · Enterprise SaaS · Health Insurance

Designing security & access governance for Ginja.ai

Health insurers on Ginja.ai couldn't see, control, or change who had access to their own platform. Every change went through Ginja's support team. I designed the system that transferred that control to them: roles, permissions, user lifecycle, time-bound access, and hard denials. Built for an industry where one wrong checkbox is a compliance breach.

Role

Product Designer

Enterprise Client

Old Mutual Limited

Platform

B2B Enterprise SaaS

Team

1 PM, 1 Front End, 1 Backend Engineer and me

0 to 1 · Enterprise SaaS · Health Insurance

Designing security & access governance for Ginja.ai

Health insurers on Ginja.ai couldn't see, control, or change who had access to their own platform. Every change went through Ginja's support team. I designed the system that transferred that control to them: roles, permissions, user lifecycle, time-bound access, and hard denials. Now being used by Eden Care and other health insurance companies.

Role

Product Designer

Enterprise Client

Old Mutual Limited

Platform

B2B Enterprise SaaS

Team

1 PM, 1 Front End, 1 Backend Engineer and me

Resume

1 · The Industry Context

Setting Context

Ginja.ai is a SaaS platform for health insurance companies and service providers. Organisations that sit at the center of one of the most regulated data ecosystems in the world: policyholders, hospitals, third-party administrators, underwriters, and national compliance bodies.

The platform shipped with a handful of pre-configured roles — Underwriter, Sales Person, a few others. That was it. The insurance companies using Ginja.ai had:


  • No visibility into what those roles actually granted

  • No control to customise, restrict, or expand access

  • No way to manage their own users — every new hire, exit, or role change went back to Ginja's support team

  • No accountability — if something went wrong, no record of who did what, when

The brief, before any research was- “How might we build a role and permission management system for health insurance organisations?”

Our first enterprise user, Old Mutual is one of Africa’s largest financial services groups insurance, banking, wealth management, and underwriting, spread across 14+ countries. For this case study, we use Old Mutual as the lens through which the problem is best understood.

14+

Countries of

operation

12K+

Hospitals in

network

4.5M+

Members covered

$3B

Group revenue

These figures describe the scale of one of the user we were designing for.

Not Ginja.ai’s product impact.

2 · Complexity

Undertsanding Complexity

Before defining a single role, we mapped individual permissions spanning underwriting, claims, payments, provider networks, and product configuration

The Underwriting module alone contained over 300 permissions and sub-permissions. Each one a potential access control decision.

This scale alone ruled out simple solutions. A flat list of 300+ checkboxes per module, multiplied across every department, in every country, was never going to work.

Why standard access models don’t

work here

To anchor our architecture, we ran a gap analysis against industry standards. Most modern software manages access using CRM or helpdesk paradigms — tools like Freshdesk, HubSpot, or Salesforce. These systems are built on an assumption of trust by default. In regulated health insurance, that assumption breaks completely

An underwriter viewing unauthorized medical histories, or a claims manager seeing

unapproved financial ledgers, isn’t a “bad UX moment.” It’s a regulatory failure and a

breach of institutional trust.

3· Three Layer Access Control

The Architectural Structure


Standard systems bundle role, permission, and context into a single object producing roles like "Claims Manager- Kenya" and "Claims Manager- Rwanda" as two entirely separate configurations. At Old Mutual's scale: 14 countries × multiple access tiers × every department - that's hundreds of near-identical roles, impossible to maintain and dangerous to audit.

We separated the model into three independent layers: Role - Claims Manager. One definition, reused everywhere. Permission- view, approve, modify claims. The same token set everywhere. Scope- the conditions under which the permission applies: an amount limit, a provider tier, a department boundary, a region.

We stopped thinking about scope as "where you work" and started thinking about it as "under what conditions your permissions apply."

A Claims Manager in Kenya and one in Rwanda now share the exact same role and permission tokens; their local compliance and financial boundaries are isolated entirely by scope rules. Hundreds of fragmented configurations collapse into a single matrix.

The model also survives reality: an Underwriting Manager doesn't live in one module. They touch Underwriting, Claims for risk review, Finance for premium oversight - the same role fans out into independent permission sets, each constrained by its own scope condition. Nothing duplicated. Nothing hardcoded per country

4· One Layer, Four Instruments

The 4 Systems

The architecture answers how access is modelled. The interface had to answer four operational questions. The same four gaps admins named in research. Each became a subsystem.

  1. Role Management

Creating a role without drowning

in 300 checkboxes

Our first prototype- a step-by-step departmental funnel failed low-fidelity testing fast: too many steps, a flat unmanageable permission list, no success feedback, duplicate role names with no warning.

The structural fix was a split-pane system:

  • Modules as rows (Reinsurance, Underwriting, Sales…) admins think in their own domain, not in access theory

  • One consistent column pattern - Access → Modify → Configure across every module. Predictability is what reduces cognitive load at scale

  • Scope as a separate step - configure permissions first, then add conditional scope. Two mental models, two distinct steps

For setting scope for various permissions I explored drop downs. Depending on the permission selected, only the relevant scopes would be active to select from. I refined it further and removed the inactive scope permissions. Used progressive disclosure. As user selected certain options, relevant conditions appeared.

The Role Creation form breakdown

  1. The Modules were aligned on the left side like chapter names and the contents within- the sub-permissions would appear on the entire screen in the centre for users to configure roles from. The modules would remain sticky to the left and the permissions would scroll and reveal more contents.

  2. Each permission was divided in 3 permission types- access, modify and configure. All permission types, weather it was to view, edit, deactive , create, delete, approve, deny, accept, reject and many other types of permissions could easily come under these three types.

  3. The CTA would also remain visible at all times to save a role, even when the user is browsing through hundreds of permissions.

Demo Video of Role Creation

A snippet for the happy path of role creation.

Design Decision

While working on the final UI, I had to take several design decisions along the way to best suit both the user, the business. Here's an example of one of them:

The decision- Inbuilt Scope Card

As a designer, the Floating Card feels cleaner, it protects the grid. But viewed through the lens of a security administrator, in health insurance compliance, context outweighs aesthetics.

The layout shift caused by the Inbuilt Card is a genuine UX trade-off. It’s also a necessary sacrifice. An administrator configuring a financial threshold cannot afford visual blind spots. The Inbuilt Card preserves complete peripheral vision of a user’s total access profile, preventing the exact type of overlapping privilege error this entire system exists to solve.

The Real Job: Handling edge cases
and error states

Working on the UI and the happy path was the easier task. Figuring out the places a user can get stuck. The places user needs to be warned and the system defined roles- that they cannot edit/ configure or delete, was the most important task for the product to work in real environments, where errors happen all the time.

  1. User Management

  1. The user lifecycle, without the

  2. support inbox

Creating a user means three simultaneous assignments: identity, role(s), and organisational scope — which region(s) of the company's own configured structure this person belongs to. The system validates assignments against that structure, so an admin in Kenya can't quietly grant someone access in Rwanda.

While assigning roles to users means we had to make sure that users can select the roles they want even from 100s of roles that have been created. Simple search did not surfice. We needed filters like department type and access level to make them reach their required role quicker.

The Create User form breakdown

  1. If a role had certain pre set scope restrictions, they will be visible while the user is being created. And while setting up organisational unit, the ones out of scope will be clearly displayed.

  2. Selected roles remain visible throughout the form, even when you close the roles module. The user can edit/remove the roles anytime they want during the process.

  3. Reducing cognitive load and making discovery fast by filtering roles by department and access type.

Demo Video of Creating a New User

A snippet for the happy path of user creation.

Handling edge cases and error states

Once the happy path was complete. The edge cases were visible very naturally. Various edit options like deactivating a user, re-activating a user and deleting a user were the next steps to take. Letting users know why they can't perform a certain action by giving them all the information they need.


Over- communicating was a style I followed throughout the journey of making error states and edge cases. Making sure the user does not feel confused or lost at any given point was my goal. If they can't perform an action - the why should be very clear to them

Closing beat for the act — conflicts: with four instruments in play, roles can contradict each other. Rather than a generic error, we wrote actionable microcopy: "Accountant and Account Officer have conflicting permissions. Assigning both will grant permissions for both roles." The system explains the collision and the consequence — it doesn't just refuse.

  1. Temporary Access

  1. Temporary access: elevation with

    an expiry date

The riskiest moment in any access system is the exception. An auditor needs a week of read access. A contractor covers a claims backlog for ten days. In the old model these became permanent grants that someone was supposed to remember to remove. Nobody remembers.

  1. Blacklist Permissions

Blacklist: a word for "no, never"

The riskiest moment in any access system is the exception. An auditor needs a week of read access. A contractor covers a claims backlog for ten days. In the old model these became permanent grants that someone was supposed to remember to remove. Nobody remembers.

5· Constrain Navigation

Honest Account of what
didn't make in V1

6· Clients using Ginja.ai

Outcomes and Insights

Old Mutual evaluated the system, tested it internally, and signed on as Ginja.ai's enterprise partner. Their team is actively using the platform today, and their feedback is shaping the next iteration.

The honest early signal: in the test environment, administrators have filed only 2–3 access-related support tickets since launch — against a previous model where every role, user, or region change was a ticket by definition. Self-service is doing what it was designed to do. This module's real-world impact is tied to how cleanly it integrates with Claims, Underwriting, and Product Configuration as they roll out; we're tracking that dependency as adoption grows.

More Projects

7· What I'll carry forward

The Learnings

Research changes the question, not just the answer. The brief we started with and the problem we ended with are not the same question. The gap between them is where the design work actually happened.

Context beats aesthetics in regulated systems. The Floating vs. Inbuilt Card decision is the cleanest example: the "prettier" choice would have introduced exactly the kind of blind spot this system exists to eliminate.

Table of Content
No headings foundSelect the Frame that wraps your article content → open Accessibility → set Tag to main, article, or section.This message disappears as soon as headings are detected.

1 · The Industry Context

Setting Context

Who are the users?

The users for access management are the heath insurance companies. The primary users of the security and access module were the top management and leadership. Who wanted full overview of access control of tehir employees. The secondary users were the leaders in each department. The sales lead would need overview of the permissions their team had access to.

What is Ginja.ai ?

Ginja.ai is a SaaS platform for health insurance companies and service providers. Organisations that sit at the center of one of the most regulated data ecosystems in the world: policyholders, hospitals, third-party administrators, underwriters, and national compliance bodies.

What triggered this need ?

Insurance companies could not see what access their employees held. The Ginja.ai platform shipped with a handful of pre-configured roles like Underwriter and Senior Underwriter for underwriting portal. Reinsurer and Senior reinsurer for reinsurance module.


  • No visibility into what those roles actually granted

  • No control to customise, restrict, or expand access

  • No way to manage their own employee's access: every new hire, exit, or role change went back to Ginja's support team

  • No accountability: if something went wrong, no record of who did what and what access they had.

Why does access control matter in a health insurance platform?

A misconfigured permission isn't a minor inconvenience. In a regulated insurance environment, the wrong person accessing the wrong data means exposure to the two most sensitive categories that exist: health records and financial data. Both are legally protected. Both affect real people.

If that access is misused or breached: lawsuits, regulatory action, insurance licence cancellation.

Getting access control right a security problem.

2 · Complexity

Undertsanding Complexity

The platform operated across multiple countries with different rules, had thousands of individual permissions to configure, and required every access decision to come with specific conditions and limits

Multiple countries, different rules

An insurance platform operating across countries can't treat access the same everywhere. Regulations, financial limits, and compliance requirements vary by region. One role doesn't mean the same thing in two different countries.

Too many permissions to manage manually

8–12 modules. 50–100 permissions each. Three access levels — View, Edit, Modify, Configure. That's close to 4,000 combinations an admin has to configure correctly. One wrong setting in a regulated platform is a serious problem.

Access needs conditions, not just a yes or no

Giving someone access isn't enough. A claims assessor can approve claims, but only up to a certain amount, only in their region. Permissions need limits attached. The question isn't just who can do what, but under what conditions

3 · What Admins Said

Research and Reframe

What admins actually needed?

We worked closely with 2 insurance companies- Eden Care Medical (our own insurance company) and Old Mutual - the PMs, and operational leads to map their real organizational structure, since there were no existing users of a system like this to research directly.

System Administrator cluster

1. No way to know if a new joiner’s access is fully set up

2. No controlled process for granting temporary elevated access

3. No audit visibility during configuration

Team Lead / Manager cluster

2. Cannot allocate permissions themselves

2. Cannot differentiate users with similar roles but different scopes

3. No notification when access changes happen to their team

The Problem Statement

An insurance company needs complete visibility and control over what every employee can access. They need to create, modify, and revoke access and manage the full employee lifecycle: onboarding, deactivation, reactivation, deletion. The system has to be fully self-serve, at any scale, without exception. No dependencies. No workarounds. No calls to the platform team.

This is a different question than where we started. It names ownership, not features. It points directly toward the architecture that follows “How might we build a role and permission management system for health insurance organisations?”

4 · Three Layer Access Control

The Architectural Structure

Why Standard RBAC Breaks at Scale

Standard systems bundle role, permission, and context into a single object producing roles like "Claims Manager- Kenya" and "Claims Manager- Rwanda" as two entirely separate configurations. At Old Mutual's scale: 14 countries × multiple access tiers × every department - that's hundreds of near-identical roles, impossible to maintain and dangerous to audit.

One Role, Any Country: The Three-Layer Model

We separated the model into three independent layers: Role - Claims Manager. One definition, reused everywhere. Permission- view, approve, modify claims. The same token set everywhere. Scope- the conditions under which the permission applies: an amount limit, a provider tier, a department boundary, a region.

A Claims Manager in Kenya and one in Rwanda now share the exact same role and permission tokens; their local compliance and financial boundaries are isolated entirely by scope rules. Hundreds of fragmented configurations collapse into a single matrix.

Stress Test: A Role That Crosses Modules

The model also survives reality: an Underwriting Manager doesn't live in one module. They touch Underwriting, Claims for risk review, Finance for premium oversight - the same role fans out into independent permission sets, each constrained by its own scope condition. Nothing duplicated. Nothing hardcoded per country

5· One System, two Instruments

The 2 Systems

The architecture answers how access is modelled. The interface had to answer two operational questions. The same two gaps admins named in research- roles and users/ employee management. All others became a sub-function within these two.

  1. Role Management

  1. If a role had certain pre set scope restrictions, they will be visible while the user is being created. And while setting up organisational unit, the ones out of scope will be clearly displayed.

  2. Selected roles remain visible throughout the form, even when you close the roles module. The user can edit/remove the roles anytime they want during the process.

  3. Reducing cognitive load and making discovery fast by filtering roles by department and access type.

Creating a role without drowning in 300 checkboxes.


The structural fix was a split-pane system:


  • Modules as rows (Reinsurance, Underwriting, Sales…) admins think in their own domain, not in access theory


  • One consistent column pattern - Access → Modify → Configure across every module. Predictability is what reduces cognitive load at scale


  • Scope as a separate step - configure permissions first, then add conditional scope. Two mental models, two distinct steps

Design Decision 1

For setting scope for various permissions I explored drop downs. Depending on the permission selected, only the relevant scopes would be active to select from. I refined it further and removed the inactive scope permissions. Used progressive disclosure. As user selected certain options, relevant conditions appeared.

Design Decision 2

While working on the final UI, I had to take several design decisions along the way to best suit both the user, the business. Here's an example of one of them:

The decision- Inbuilt Scope Card

As a designer, the Floating Card feels cleaner, it protects the grid. But viewed through the lens of a security administrator, in health insurance compliance, context outweighs aesthetics.

The layout shift caused by the Inbuilt Card is a genuine UX trade-off. It’s also a necessary sacrifice. An administrator configuring a financial threshold cannot afford visual blind spots. The Inbuilt Card preserves complete peripheral vision of a user’s total access profile, preventing the exact type of overlapping privilege error this entire system exists to solve.

The Role Creation form breakdown

  1. The Modules were aligned on the left side like chapter names and the contents within- the sub-permissions would appear on the entire screen in the centre for users to configure roles from. The modules would remain sticky to the left and the permissions would scroll and reveal more contents.

  2. Each permission was divided in 3 permission types- access, modify and configure. All permission types, weather it was to view, edit, deactive , create, delete, approve, deny, accept, reject and many other types of permissions could easily come under these three types.

  3. The CTA would also remain visible at all times to save a role, even when the user is browsing through hundreds of permissions.

The Real Job: Handling edge cases and error states

Working on the UI and the happy path was the easier task. Figuring out the places a user can get stuck. The places user needs to be warned and the system defined roles- that they cannot edit/ configure or delete, was the most important task for the product to work in real environments, where errors happen all the time.

  1. User Management

  1. If a role had certain pre set scope restrictions, they will be visible while the user is being created. And while setting up organisational unit, the ones out of scope will be clearly displayed.

  2. Selected roles remain visible throughout the form, even when you close the roles module. The user can edit/remove the roles anytime they want during the process.

  3. Reducing cognitive load and making discovery fast by filtering roles by department and access type.

Creating a user means three simultaneous assignments: identity, role(s), and organisational scope — which region(s) of the company's own configured structure this person belongs to. The system validates assignments against that structure, so an admin in Kenya can't quietly grant someone access in Rwanda.

While assigning roles to users means we had to make sure that users can select the roles they want even from 100s of roles that have been created. Simple search did not surfice. We needed filters like department type and access level to make them reach their required role quicker.

The Create User form breakdown

  1. If a role had certain pre set scope restrictions, they will be visible while the user is being created. And while setting up organisational unit, the ones out of scope will be clearly displayed.

  2. Selected roles remain visible throughout the form, even when you close the roles module. The user can edit/remove the roles anytime they want during the process.

  3. Reducing cognitive load and making discovery fast by filtering roles by department and access type.

Handling edge cases and error states

Once the happy path was complete. The edge cases were visible very naturally. Various edit options like deactivating a user, re-activating a user and deleting a user were the next steps to take. Letting users know why they can't perform a certain action by giving them all the information they need.


Over- communicating was a style I followed throughout the journey of making error states and edge cases. Making sure the user does not feel confused or lost at any given point was my goal. If they can't perform an action - the why should be very clear to them


Closing beat for the act- conflicts: with four instruments in play, roles can contradict each other. Rather than a generic error, we wrote actionable microcopy: "Accountant and Account Officer have conflicting permissions. Assigning both will grant permissions for both roles." The system explains the collision and the consequence.

Temporary access

Every temporary grant to a selected user answers three questions at creation, and the form will not submit without them.


  • Who: the user receiving elevated access

  • What: the specific permissions granted, scoped exactly like permanent ones. Temporary does not mean broader; the same Role → Permission → Scope model applies

  • Until when: the expiry date. The one field that makes this system different from a normal grant


At the end date, access is revoked automatically-no ticket, no reminder, no human in the loop. The admin can delete a temporary access anytime from the user's profile.

Blacklist permissions for users

Blacklist is the answer to a question the other three systems can't ask: regardless of every role this person holds, what must they never be able to do?


Deny overrides allow. The rule is absolute and deliberately simple: a blacklisted permission wins every conflict.


Blacklist exists for the situations where restructuring roles is too slow or too blunt:


  • An employee under internal investigation who must keep working but must not touch financial approvals — today, not after a role redesign

  • A conflict of interest: a claims assessor whose relative is a policyholder, denied access to that specific member's records without changing their role for everyone else

  • A regulatory boundary: a permission that one country's compliance regime forbids for a role that legitimately holds it everywhere else


To add a blacklist permission to a selected user, one has to answers three questions at creation, and the form will not submit without them.


  • Who: the user for which permissions will be blocked

  • What: What are their current list of permissions and select the one you wish to block. One can even select permissions that have not been alloted to the user

  • Review: One final view of the permissions you are blocking and a final confirmation.


One can manage blacklist permissions by editing them. Adding or removing selected permissions.

5· Constrain Navigation

What didn't make in V1

6· Clients using Ginja.ai

Outcomes and Insights

Old Mutual evaluated the system, tested it internally, and signed on as Ginja.ai's enterprise partner. Their team is actively using the platform today, and their feedback is shaping the next iteration.

The honest early signal: in the test environment, administrators have filed only 2–3 access-related tickets while testing against a previous model where every role, user, or region change was a ticket by definition. Self-service is doing what it was designed to do. This module's real-world impact is tied to how cleanly it integrates with Claims, Underwriting, and Product Configuration as they roll out; we're tracking that dependency as adoption grows.

7· What I'll carry forward

The Learnings

Research changes the question, not just the answer. The brief we started with and the problem we ended with are not the same question. The gap between them is where the design work actually happened.

Context beats aesthetics in regulated systems. The Floating vs. Inbuilt Card decision is the cleanest example: the "prettier" choice would have introduced exactly the kind of blind spot this system exists to eliminate.

Resume