Skip to main content
Version: Current

Roles, permissions, approvals and segregation

Makronexus access is permission-based. A role such as school_bursar, bursar, finance_clerk or finance_officer is an assignment label; the effective resource:action abilities determine what the user can see or do.

Audience: Finance users, administrators, reviewers, implementers and auditors
Learning time: 40 minutes

Learning outcomes

You will be able to:

  • distinguish roles from effective permissions;
  • name exact permissions for common Finance actions;
  • explain maker-checker and independent certification;
  • design a minimum-access responsibility split;
  • diagnose a denied or missing workspace safely.

Access model

The backend is authoritative. The browser does not decide whether a permission combination is toxic.

Roles are not permissions

Current role labels include:

  • school_bursar and bursar;
  • finance_clerk;
  • finance_officer;
  • school/tenant administrators;
  • principals and school heads;
  • other staff, parent and student roles.

Do not write “only administrators can…” unless an exact product rule proves that statement.

Use:

The action requires financial_payment:refund.

Not:

Ask an administrator.

Permission syntax

Current product code accepts ability forms such as:

  • resource:action;
  • resource.action;
  • wildcard forms such as resource:* or *.

Finance documentation uses the canonical resource:action form.

Action aliases can support read/list/view and edit/update behaviour in parts of the frontend. The endpoint’s named permission remains the authoritative requirement.

Domain-entry permissions

A user can enter the Finance domain when they hold at least one relevant Finance ability. Current domain access checks include:

  • financial_fee:view;
  • financial_invoice:view;
  • financial_payment:view;
  • financial_receipt:view;
  • financial_receipt_template:list;
  • student_payment_profile:list;
  • student_financial_summary:view;
  • fee_discount_program:list;
  • fee_discount:read;
  • school_bank_setting:view;
  • scholarship view abilities;
  • process setup, accounting-book and approval-matrix read/list/readiness abilities;
  • approval-request read/list abilities.

Entry into the domain does not grant every Finance page or action.

Core billing permissions

ActionExact permission
Create school feefinancial_fee:create
List school feesfinancial_fee:list
Update school feefinancial_fee:update
Archive school feefinancial_fee:delete
Create payment planfinancial_payment_plan:create
List payment plansfinancial_payment_plan:list
Update payment planfinancial_payment_plan:update
Archive payment planfinancial_payment_plan:delete
Create invoicefinancial_invoice:create
List invoicefinancial_invoice:list
Read invoicefinancial_invoice:read
Update invoicefinancial_invoice:update
Archive invoicefinancial_invoice:delete
Send invoicefinancial_invoice:send
Approve invoicefinancial_invoice:approve
Reject invoicefinancial_invoice:reject
Create credit notefinancial_credit_note:create
Read/list credit notesfinancial_credit_note:read / list
Update/archive credit notefinancial_credit_note:update / delete
Approve/reject credit notefinancial_credit_note:approve / reject
Apply credit notefinancial_credit_note:apply

Invoice cancellation currently uses the invoice update permission in the API route catalogue.

Payment permissions

ActionExact permission
Capture paymentfinancial_payment:create
List paymentfinancial_payment:list
Read paymentfinancial_payment:read
Update paymentfinancial_payment:update
Verify paymentfinancial_payment:verify
Allocate paymentfinancial_payment:allocate
Reconcile paymentfinancial_payment:reconcile
View statisticsfinancial_payment:statistics
Search paymentfinancial_payment:search
Refund paymentfinancial_payment:refund
Delete eligible paymentfinancial_payment:delete

A navigation page may use financial_payment:view; the backend mutation uses the exact action above.

Receipt permissions

ActionExact permission
Issue receiptfinancial_receipt:create
List/read receiptfinancial_receipt:list / read
View receipt statisticsfinancial_receipt:statistics
Create duplicatefinancial_receipt:duplicate
Resend receiptfinancial_receipt:resend
Cancel receiptfinancial_receipt:cancel
Read/update receipt settingsfinancial_receipt_settings:read / update
Maintain receipt templatesthe applicable financial_receipt_template:* action

Read access to receipts does not grant cancellation or reissue authority.

General Ledger permissions

ActionExact permission
Create GL accountgl_account:create
List/read GL accountgl_account:list / read
Update GL accountgl_account:update
Soft-delete eligible GL accountgl_account:delete
Create journalgl_journal_entry:create
List/read journalgl_journal_entry:list / read
Reverse journalgl_journal_entry:reverse
Read GL statementsgl:statements

Setup and control permissions

AreaCurrent abilities
Process setupfinancial_process_setup:read, list, readiness
Accounting booksfinancial_accounting_book:read, list and mutation abilities where configured
Approval matrixfinancial_approval_matrix:read, list, simulate and configured mutations
Approval requestsfinancial_approval_request:read, list and decision permissions in the approval workflow
Posting controlsfinance_control:read, list, request_change, approve, readiness, manage_policy
Posting exceptionsfinance_posting_exception:list and applicable resolution action
FX controlfinancial_fx:manage
Finance access certificationfinance_access_control:read, scan, certify

The exact toxic permission rules are loaded from the backend. Documentation must not reproduce or guess the catalogue.

Approval is an action, not a role

An approver must have:

  1. the exact decision permission;
  2. the correct tenant and school scope;
  3. an eligible request/object state;
  4. independence required by the workflow;
  5. supporting evidence and, where required, a comment or reason.

An approver should not approve merely because the button is visible.

Maker-checker pattern

The same person can perform multiple duties only when policy, effective access and transaction-specific controls permit it. The safer default for sensitive work is separation.

Segregation model

DutyCreates or changesShould be independently checked by
Fee makerpricing configurationfee approver/Finance manager
Billing operatorbilling run or invoicebilling reviewer/approver
Cashierpayment and receiptverifier and cash-up reviewer
Allocatorinvoice allocationscollections reviewer for exceptions
Refund requesterrefund request/evidenceauthorised refund approver
Journal makerdraft/manual journaljournal reviewer/poster
Posteraccounting effectclose/reconciliation reviewer
Reconcilermatches external/internal evidenceclose or assurance reviewer
Access administratorroles and grantsaccess-control scanner/certifier
Scan creatoraccess scanindependent certifier

Access-control certification boundaries

The current Finance access-control workspace enforces:

  • the browser does not calculate toxic pairs;
  • a scan with violations cannot be certified;
  • a stale clean scan cannot be certified;
  • missing current-user identity fails closed;
  • the scan creator cannot certify their own run;
  • the backend rechecks certification boundaries;
  • IAM mutations invalidate the exact certification state;
  • role, grant, scan and certification mutations require a live server result.

This control addresses standing access. Transaction-specific maker-checker can add further restrictions.

Minimum-access examples

Cashier

Likely needs only the exact assigned collection abilities, for example:

  • payment create/read as required;
  • receipt create/read as required;
  • student summary view;
  • no refund, reconciliation, GL reversal, approval-matrix or access-certification ability unless explicitly assigned.

Bursar

May need broader billing and collection review abilities, but approval and refund powers should still be considered separately.

Accountant

May need GL account/journal/statement and reconciliation abilities without payment capture or receipt cancellation.

Administrator

May maintain users, roles and setup access without being the transaction approver or certifier.

These are design patterns, not product default role mappings.

Permission request template

Request:

FieldExample
UserTariro Moyo
School scopeMupfure Learning Academy
Business responsibilityverify captured payments
Exact abilityfinancial_payment:verify
Durationpermanent or time-bound
Data scopeschool-wide
ApproverFinance manager
Separation conflict checkedpayment creator must not self-verify
Review date30 September 2026

Avoid requests for *, finance:* or “full access” unless a documented emergency procedure and approval justify them.

Diagnosing denied access

Control anti-patterns

Anti-patternRiskBetter control
Give administrator to solve one missing pageexcessive standing accessgrant exact ability
Creator approves own requesterror or fraud remains uncheckedindependent checker
Cashier also reconciles all own collectionsfalse matches or concealed shortageindependent reconciliation
Access admin certifies own scanself-reviewindependent certifier
Share one Finance loginno actor traceabilityindividual accounts
Use wildcard permanentlyuncontrolled future accessscoped abilities and review
Remove evidence to “clean up”audit destructionappend-only correction

Mupfure scenario

A finance clerk records a USD 300 payment. The school’s design separates:

  • clerk: financial_payment:create;
  • bursar: financial_payment:verify;
  • accountant: financial_payment:reconcile;
  • receipt officer or clerk: financial_receipt:create;
  • reviewer: read-only audit evidence;
  • administrator: role/grant maintenance;
  • independent security reviewer: finance_access_control:certify.

The exact assignment can differ, but each ability and conflict must be deliberate.

Verification checklist

  • User identity is individual.
  • Tenant and school scope are correct.
  • Exact resource:action ability is named.
  • Role label is not used as proof.
  • Object state permits the action.
  • Required approver is independent.
  • Creator cannot certify the same exact state.
  • Wildcard access is avoided.
  • Time-bound or exceptional access has an expiry/review.
  • Denied-state evidence is captured before escalation.

Knowledge check

  1. Does school_bursar prove invoice approval access?
  2. Which permission captures a payment?
  3. Which permission reverses a GL journal?
  4. Can a clean access scan be certified by its creator?
  5. Why can a user see Payments but fail to refund?

Answer guide

  1. No; inspect effective permissions.
  2. financial_payment:create.
  3. gl_journal_entry:reverse.
  4. No.
  5. Read/view and refund are separate abilities.