SettleMint
ArchitectureSecurity

Authorization

DALP authorizes asset operations through platform RBAC, organization context, wallet verification for browser-session writes, and on-chain roles for the contract action being requested.

DALP authorization answers two questions before an asset operation can continue:

  1. Can this caller use the protected console or API route for the active organization?
  2. Does the submitting wallet or service have the on-chain role required for the contract action?

Use this page to design operator roles, review segregation of duties, or explain why organization-owner access is not enough to mint, burn, pause, recover, or change token policy.

Related security references:

System context

Rendering diagram...

Authorization architecture

DALP separates platform access from blockchain authority.

Platform RBAC is organization-scoped. It decides whether a signed-in user, API credential, or service can reach a protected console or API route for the active organization.

On-chain authorization is role-scoped. It decides whether the submitting wallet or contract address can perform the requested token, identity, compliance, or system operation.

How the authority chain works:

  1. The caller authenticates through a platform session or API credential.
  2. DALP resolves the active organization and resource scope for the request.
  3. The protected route checks the required platform permission before it prepares a write operation.
  4. For browser-session blockchain writes, DALP also requires wallet verification through PIN, secret code, or OTP before signing can proceed.
  5. The contract action still needs the matching on-chain role. DALP indexes role events such as RoleGranted and RoleRevoked so the console can render the current permission state.

Key invariant: platform access does not grant blockchain authority by itself. Organization owner or admin access can let a user administer the platform, but minting, burning, pausing, recovering wallets, changing token policy, or managing compliance still requires the relevant on-chain role and the applicable signing gate.

Dual-layer permissions

Every blockchain operation requires both off-chain and on-chain authorization. Missing either layer results in denial.

Rendering diagram...

Key invariant: Read operations require a valid session and any route-specific read permission. Write operations require the platform permission for the route and the on-chain role for the contract action.

How platform RBAC maps to system actions

Platform RBAC is organization-scoped. The platform permission check controls who can use DALP's protected console and API routes before an on-chain transaction is built. Platform RBAC does not grant blockchain authority by itself.

Platform roleDALP permissionsTypical use
adminOrganization management; settings read, list, upsert, remove, and global theme; system read, list, create, and operate; exchange-rate read/list; webhook management and compliance recallPlatform administration and sensitive system operations
ownerOrganization-owner permissions; user list/get/update; settings read, list, upsert, and remove; system read, list, and create; exchange-rate read/list; webhook management and compliance recallOrganization ownership, user administration, and configuration
memberOrganization-member permissions; settings read/list; system read/list; exchange-rate read/listStandard operator access with narrower permissions

For protected routes, DALP checks the required platform permission against the signed-in account or active organization. If the platform permission is missing, the request stops before any contract call is prepared. If the platform check passes, the requested blockchain action still needs the matching on-chain role.

Role taxonomy

DALP uses three platform roles and 27 current on-chain roles. The on-chain role map includes people roles, per-asset roles, and system module roles.

One deprecated add-on manager people role remains in the contracts for compatibility. It is not part of the current operating count.

LayerScopeCountRoles
1. PlatformOff-chain platform access3owner, admin, member
2. System PeopleOn-chain (DALPPeopleRoles.sol)10systemManager, identityManager, tokenManager, complianceManager, claimPolicyManager, organisationIdentityManager, claimIssuer, auditor, feedsManager, gasManager
3. Per-AssetOn-chain (DALPAssetRoles.sol)7admin (DEFAULT_ADMIN_ROLE), governance, supplyManagement, custodian, emergency, saleAdmin, fundsManager
4. System ModulesOn-chain (DALPSystemRoles.sol)10systemModule, identityRegistryModule, tokenFactoryRegistryModule, tokenFactoryModule, addonFactoryRegistryModule, addonFactoryModule, trustedIssuersMetaRegistryModule, complianceEngineModule, tokenComplianceFactoryModule, tokenIdentityRegistryFactoryModule

Layer 1: Platform roles

Organization-scoped, managed by DALP platform access controls.

RoleCapabilities
ownerFull administrative access, role assignment, organization configuration
adminUser management, platform configuration
memberStandard operations based on assigned permissions

Layer 2: System people roles

Assigned to human operators. Defined in DALPPeopleRoles.sol.

RoleResponsibilities
systemManagerBootstrap system, manage upgrades, register factories/addons/modules
identityManagerRegister and recover identities, manage user onboarding
tokenManagerDeploy and configure tokens
complianceManagerRegister compliance modules, configure global settings, manage bypass
claimPolicyManagerManage trusted issuers and claim topics
organisationIdentityManagerManage claims for the organisation identity
claimIssuerCreate and attach claims to identity contracts
auditorView-only: permissions, identities, audit logs, and system state
feedsManagerRegister, replace, and remove feeds in the FeedsDirectory
gasManagerManage paymaster deposits and paymaster configuration

Note: The deprecated add-on manager role remains excluded from the count above.

Layer 3: Per-asset roles

Scoped per token contract. Defined in DALPAssetRoles.sol.

RoleResponsibilities
admin (DEFAULT_ADMIN_ROLE)Grant and revoke all other per-asset roles
governanceConfigure identity registry, compliance modules, features, metadata
supplyManagementMint, burn, batch operations, set supply cap
custodianFreeze/unfreeze, forced transfers, wallet recovery
emergencyPause/unpause operations, recover stuck ERC20 tokens
saleAdminManage token sale configuration and lifecycle
fundsManagerWithdraw funds from token sales

Layer 4: System module roles

Assigned to contract addresses. Defined in DALPSystemRoles.sol.

RoleResponsibilities
systemModuleManage system modules, register compliance modules
identityRegistryModuleModify identity registry storage
tokenFactoryRegistryModuleroleAdmin of tokenFactoryModule
tokenFactoryModuleAdd token contracts to compliance allow list
addonFactoryRegistryModuleroleAdmin of addonFactoryModule
addonFactoryModuleAdd addon instance contracts to compliance allow list
trustedIssuersMetaRegistryModuleAdd trusted issuers to the registry
complianceEngineModuleDeploy compliance module instances
tokenComplianceFactoryModuleCreate per-token compliance proxies
tokenIdentityRegistryFactoryModuleDeploy per-token identity registries

Role scopes for common operator personas

DALP separates platform membership from on-chain operating authority. A user can sign in to the platform without having every on-chain role, and a wallet can hold one role without inheriting unrelated asset or system powers.

Persona or responsibilityTypical scopeRoles to assign
Platform administratorOrganisation setup and user accessPlatform owner or admin, plus on-chain roles only for the administrator's system or asset responsibilities
System operatorSystem configuration, upgrades, factories, shared modules, and paymaster operationssystemManager, with narrower roles such as tokenManager, complianceManager, identityManager, feedsManager, or gasManager when the operator only owns one domain
Compliance operatorTrusted issuers, claim topics, compliance modules, and user eligibility controlscomplianceManager, claimPolicyManager, claimIssuer, or identityManager, depending on whether the user configures policy, issues claims, or manages identities
Asset operations teamDay-to-day actions for one tokenized assetPer-asset roles such as governance, supplyManagement, custodian, emergency, saleAdmin, or fundsManager on that asset
Auditor or regulator viewReview permissions, identities, audit logs, and system state without operating the assetPlatform access plus the system-level auditor role; do not grant write roles unless the same person also performs operations

Use the narrowest role set that matches the person's responsibility. System people roles apply across the system. Per-asset roles apply only to the specific token contract.

Segregation of duties for administration

DALP supports segregation of duties by splitting account access, platform permissions, system roles, and per-asset roles. A policy administrator, contract administrator, compliance operator, and issuance operator can be assigned different role sets so one persona does not automatically inherit the others.

Control areaDALP mechanismPractical separation
Account and session accessSign-in session, active organization context, optional account 2FA, and fresh-session checks for sensitive account operationsProves who is using the console before authorization starts
Console and API accessOrganization-scoped platform permissions checked before protected routes continueLets platform owners and admins grant console capabilities without granting every on-chain role
Policy and compliance administrationcomplianceManager, claimPolicyManager, claimIssuer, and identityManager system rolesSeparates compliance module configuration, claim-topic policy, claim issuance, and identity operations
Contract and asset administrationPer-asset governance, supplyManagement, custodian, emergency, saleAdmin, and fundsManager rolesSeparates asset configuration, mint and burn authority, custody actions, emergency controls, sale administration, and fund withdrawal
Audit and reviewauditor role and indexed role eventsGives reviewers visibility without granting write authority

A deployment can enforce independent control by assigning these roles to separate accounts, wallets, custody policies, or approval groups. DALP does not treat organization owner or admin as automatic permission to mint, burn, recover wallets, or change token policy. Those actions still need the matching on-chain role and, for browser-initiated blockchain writes, wallet verification before signing.

DALP does not impose a universal rule that one human can never hold two roles. If your operating model forbids the same person from changing policy and executing issuance, encode that rule in role assignment, custody approval policy, and operational review. The platform gives the separate permissions and failure gates; the deployment policy decides who may hold them together.

Per-asset permission matrix (summary)

ActionRequired roleAsset-specific notes
Set OnchainID / identity registry / compliancegovernanceAll asset types
Set features / metadatagovernanceDALPAsset only (Configurable extension)
Set yield schedule / mature bondgovernanceBond only
Mint / burn / batch operationssupplyManagementRealEstate and PreciousMetal: no burn
Set supply capsupplyManagementBond and RealEstate only
Freeze / forced transfer / recoverycustodianAll asset types
Pause / unpause / recover ERC20emergencyAll asset types
Configure / manage token salesaleAdminAssets with sale addon
Withdraw sale fundsfundsManagerAssets with sale addon

See Legacy-Equivalent Presets for per-instrument feature and compliance configuration across all seven asset types.

Asset-level role assignment for mint, burn, and transfer permissions

Multi-tenant architecture

The platform supports configurable multi-tenancy through organization-scoped membership and permissions.

  • Single tenant: all users operate inside one organization, and organization creation is blocked after the first organization exists.
  • Multi tenant: separate organizations have isolated membership, roles, assets, compliance records, and audit trails.

Tenant boundary: every API request resolves organization context before protected data or actions continue. That organization context is separate from on-chain role checks, so a user needs both the right tenant-scoped platform permission and the relevant on-chain role for write operations.

On this page