Skip to content

Instantly share code, notes, and snippets.

@sambacha
Created July 3, 2024 00:24
Show Gist options
  • Save sambacha/b3c0d59e584675f534d4d3de1193e736 to your computer and use it in GitHub Desktop.
Save sambacha/b3c0d59e584675f534d4d3de1193e736 to your computer and use it in GitHub Desktop.
Endpoint user1 user2 user3 user4
/balance GET GET GET GET
/transfers GET GET GET
POST POST
/settings PATCH

This shows an access control matrix for a banking website whereby user1 has reporting access (to view /balance only) and user2 has auditing access (read-only access to view balance and a list of transactions), user3 has read-write access (can create transactions), and user4 has full administrative access (can change account settings).

Endpoint user1 user2 user3 user4
/balance GET GET GET GET
$/$ transfers GET GET GET
$2 / 3:$ POST
/settings $3 / 3:$ PATCH
Roles Definition:
REPORTER_ROLE: Can only view the balance.
AUDITOR_ROLE: Can view the balance and transfers.
USER_ROLE: Can view the balance, view, and propose transfers.
ADMIN_ROLE: Can view the balance, view and propose transfers, and propose settings changes.
Threshold-Based Approval:
Transfers require at least 2 approvals (TRANSFER_THRESHOLD).
Settings changes require all 3 admins to approve (SETTINGS_THRESHOLD).
Proposals:
Transfers and settings changes are proposed and stored in mappings.
Approvals are tracked using EnumerableSet for each proposal.
Functions:
balanceOf: Checks if the caller has the appropriate role before returning the balance.
proposeTransfer: Allows users or admins to propose a transfer.
approveTransfer: Allows users or admins to approve a transfer proposal.
proposeSettingsChange: Allows admins to propose a settings change.
approveSettingsChange: Allows admins to approve a settings change proposal.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment