SettleMint
ArchitectureSecurity

Authorization

DALP enforces authorization through a dual-layer model: off-chain platform roles via Better Auth control API and console access, while on-chain roles in Solidity contracts govern blockchain operations. 26 distinct roles span platform, people, asset, and system module layers.

Purpose: How the platform decides what authenticated users and contracts are allowed to do.


Authorization architecture

The on-chain AccessManager contract is the authoritative source for all role assignments in DALP. This is a key architectural invariant: roles granted or revoked on-chain are immediately reflected in the UI — there is no separate off-chain permission database.

How the authority chain works:

  1. Role assignments are made directly on-chain via the AccessManager contract
  2. Role events (RoleGranted, RoleRevoked) are emitted and indexed by DALP's chain indexer
  3. The UI queries indexed on-chain state — never a separate database — to determine what features and actions to render
  4. Write operations require: (1) an active platform session (Better Auth) AND (2) the appropriate on-chain role — neither alone is sufficient
  5. Role granted on-chain → indexer processes the event → UI reflects the change immediately

Key invariant: The chain is the source of truth. If a role is revoked on-chain, the UI hides or disables the corresponding operation without any manual synchronization step.

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 only a valid session. Write operations require both the platform permission and the on-chain role.

Role taxonomy

26 distinct roles organized into four layers (excluding one deprecated role):

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

Layer 1: Platform roles

Organization-scoped, managed by Better Auth.

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, system state
feedsManagerRegister, replace, and remove feeds in the FeedsDirectory

Note: addonManager from v1 is still defined in DALPPeopleRoles.sol for backward compatibility but is deprecated and 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

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 Better Auth's organization system.

  • Single-tenant: All users in one organization. Creation blocked after the first exists.
  • Multi-tenant: Separate organizations with isolated membership, roles, assets, compliance records, and audit trails.

Tenant boundaries: Isolation enforced at the database query level on every API request. Cross-tenant operations are not possible.

On this page