Skip to content

Access Control & Permissions

Document ID: ACP-001 Version: 1.0 Classification: Internal / Regulator-Shareable Effective Date: March 2026 Next Review: September 2026 Owner: Keshless Security Team


1. Purpose

This document provides a comprehensive breakdown of all access control mechanisms, role-based permissions, and authorization policies implemented across the Keshless digital wallet platform. It serves as the authoritative reference for:

  • Regulatory audits (Central Bank of Eswatini, FSA)
  • Partner due diligence (banks, telcos, payment processors)
  • Internal governance (team reference for who can do what, where, and why)

2. Regulatory Compliance Mapping

Keshless access controls are designed to satisfy the following regulatory requirements:

RegulationRequirementHow Keshless CompliesReference
FATF Recommendation 10Customer Due DiligenceKYC verification gates wallet operations; tiered access by verification levelData Access Controls
FATF Recommendation 15New TechnologiesDevice-based auth for vendors; API key management for integrationsAuthentication
FATF Recommendation 20Suspicious Transaction ReportingCompliance Officer role with SAR filing permissions; audit trailRoles & Permissions
Eswatini FSAOperator Licensing ConditionsSegregation of duties via role hierarchy; emergency kill switchesEmergency Controls
POPIA Section 19Security SafeguardsEncryption at rest/transit; row-level data isolation; access loggingData Access Controls
PCI DSS Req. 7Restrict Access by Business NeedGranular permission system (90+ permissions); least-privilege defaultsRoles & Permissions
PCI DSS Req. 8Identify & Authenticate AccessJWT + OTP + PIN; password complexity; account lockoutAuthentication
PCI DSS Req. 10Track & Monitor AccessSHA-256 hash-chained audit logs; activity loggingData Access Controls

3. Access Control Architecture

┌──────────────────────────────────────────────────────────────────────┐
│                        ACCESS CHANNELS                               │
│                                                                      │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────┐  ┌──────────┐ │
│  │ User App │  │ Vendor   │  │ Admin    │  │ USSD │  │ Partner  │ │
│  │ (Flutter)│  │ App      │  │ Dashboard│  │      │  │ API      │ │
│  └────┬─────┘  └────┬─────┘  └────┬─────┘  └──┬───┘  └────┬─────┘ │
└───────┼──────────────┼──────────────┼───────────┼───────────┼────────┘
        │              │              │           │           │
        ▼              ▼              ▼           ▼           ▼
┌──────────────────────────────────────────────────────────────────────┐
│                     AUTHENTICATION LAYER                             │
│                                                                      │
│  JWT Bearer    JWT Bearer    JWT Bearer    PIN + Session  API Key   │
│  + OTP         + Device ID   + Password    + IP Whitelist + IP WL   │
│                                                                      │
│  See: authentication.md                                              │
└──────────────────────────────┬───────────────────────────────────────┘


┌──────────────────────────────────────────────────────────────────────┐
│                     AUTHORIZATION LAYER                              │
│                                                                      │
│  ┌─────────────────┐  ┌──────────────────┐  ┌───────────────────┐  │
│  │ Role Check      │  │ Permission Check  │  │ Ownership Check   │  │
│  │ (9 admin roles, │  │ (90+ granular     │  │ (user owns data,  │  │
│  │  5 vendor roles)│  │  permissions)     │  │  vendor scoping)  │  │
│  └─────────────────┘  └──────────────────┘  └───────────────────┘  │
│                                                                      │
│  See: roles-and-permissions.md, data-access-controls.md             │
└──────────────────────────────┬───────────────────────────────────────┘


┌──────────────────────────────────────────────────────────────────────┐
│                     SAFETY LAYER                                     │
│                                                                      │
│  ┌─────────────────┐  ┌──────────────────┐  ┌───────────────────┐  │
│  │ Emergency       │  │ Rate Limiting    │  │ KYC Gating        │  │
│  │ Kill Switches   │  │ (per-IP, per-    │  │ (verification     │  │
│  │ (8 controls)    │  │  user, per-phone)│  │  status gates ops) │  │
│  └─────────────────┘  └──────────────────┘  └───────────────────┘  │
│                                                                      │
│  See: emergency-controls.md, data-access-controls.md                │
└──────────────────────────────────────────────────────────────────────┘

4. Access Control Summary

4.1 Principal Types

Keshless recognizes five types of principals (authenticated entities):

PrincipalAuth MethodAccess ScopeDetailed Reference
End UserOTP + JWTOwn wallet, transactions, profileAuthentication
VendorEmail/Password + Device ID + JWTOwn business data, sub-user managementAuthentication
Admin EmployeeEmail/Password + JWTDashboard operations per assigned permissionsRoles & Permissions
USSD UserPhone number + PINBalance, transfers, withdrawals, airtimeAuthentication
Integration PartnerAPI Key + IP WhitelistVendor-scoped operationsIntegration Security

4.2 Permission Model

LayerMechanismGranularityCount
Admin PermissionsRBAC with 9 role templates + customPer-action (view, edit, approve, delete)90+ permissions
Vendor PermissionsRBAC with 5 role templates + customPer-action (transactions, reports, cards)27 permissions
Emergency ControlsSystem-wide kill switchesPer-operation category8 controls
Data ScopingOwnership + tenant isolationPer-recordRow-level

4.3 Key Security Properties

  • Least Privilege: All roles default to minimum permissions; CUSTOM role starts empty
  • Segregation of Duties: Only SUPER_ADMIN can create other admins; COMPLIANCE_OFFICER cannot modify financial configs
  • Defense in Depth: Auth → Role → Permission → Ownership → Emergency controls (5 layers)
  • Fail Closed: Missing token = denied; missing permission = denied; DB unavailable = all requests rejected
  • Audit Everything: All admin actions logged with SHA-256 hash chain for tamper detection

5. Section Documents

DocumentIDContents
Authentication MechanismsACP-001.1JWT, OTP, PIN, API Key, device auth — all authentication flows
Roles & PermissionsACP-001.2Complete RBAC breakdown, permission matrices, role templates
Data Access ControlsACP-001.3Ownership, tenant isolation, KYC gating, audit trail
Emergency ControlsACP-001.4Kill switches, rate limiting, incident activation
Integration SecurityACP-001.5Partner API keys, IP whitelisting, vendor-scoped access

6. Document Version Control

VersionDateAuthorChanges
1.0March 2026Keshless Security TeamInitial comprehensive access control documentation

7. Contact

  • Security Officer: compliance@keshless.app
  • Incident Reporting: security@keshless.app
  • Partner Integration Inquiries: integrations@keshless.app

Internal use only - Keshless Payment Platform