Skip to content

Fix/registration role consistency#197

Merged
Nitya-003 merged 4 commits intoNitya-003:mainfrom
navin-oss:fix/registration-role-consistency
Mar 8, 2026
Merged

Fix/registration role consistency#197
Nitya-003 merged 4 commits intoNitya-003:mainfrom
navin-oss:fix/registration-role-consistency

Conversation

@navin-oss
Copy link
Contributor

  • Import VALID_ROLES and ROLES from constants/permissions.js

    • Centralized source of truth for all role definitions
    • Ensures consistency across authentication layer
  • Update registerSchema to use VALID_ROLES enum

    • Changed from hardcoded ['farmer', 'mandi', 'transporter', 'retailer']
    • Now supports: farmer, mandi, transporter, retailer, quality_inspector, admin, super_admin
    • Added dynamic error message showing all valid roles
    • Set default role to ROLES.FARMER for backwards compatibility
  • Update walletRegisterSchema to use VALID_ROLES enum

    • Same role validation as email/password registration
    • Consistent error messaging
    • Default role assignment

Impact:

  • Admins can now be registered through the API (previously impossible)
  • Quality inspectors can be registered directly (was only via database seeding)
  • All 7 roles defined in permissions.js are now available for registration
  • Prevents future role inconsistency between layers
  • Maintains backwards compatibility with default farmer role

… missing batch controller functions

- Fix nonce validation in walletLogin and walletRegister to prevent replay attacks
  * Always require stored nonce instead of falling back to constant string
  * Return 401 error if no nonce exists for the address
- Add missing controller functions to batchController.js:
  * createBatch - handles batch creation with transaction support
  * getBatch - retrieves single batch by ID
  * getAllBatches - alias for getBatches (consistency)
  * updateBatch - handles batch updates with stage transitions
  * recallBatch - admin-only batch recall functionality
- These functions prevent future import errors if routes are extracted from server.js
…in sync failures

- Add comprehensive documentation in STAGE_CONSISTENCY_GUIDE.md
  * Explains critical importance of stage consistency across layers
  * Documents the 4-stage supply chain model (farmer, mandi, transport, retailer)
  * Provides step-by-step guide for making stage changes safely
  * Lists common mistakes and troubleshooting steps

- Enhance backend/constants/stages.js with:
  * STAGE_TO_NUMBER mapping for blockchain contract compatibility
  * getStageNumber() function for safe string-to-enum conversion
  * validateStageMapping() function to verify consistency on startup
  * Detailed JSDoc comments explaining critical dependencies

- Update blockchainWorker.js to use centralized stage mapping:
  * Import getStageNumber() from constants/stages.js
  * Replace hardcoded stageMap with centralized function
  * Eliminates duplication and prevents drift between layers

- Add automatic validation in server.js:
  * Run validateStageMapping() on application startup
  * Exit immediately with clear error if mismatch detected
  * Prevents blockchain sync failures due to configuration errors

This ensures that any future changes to stages will be caught at startup
before they can cause blockchain synchronization issues or data corruption.
…ation check

- Remove duplicate generateBatchId() in server.js (lines 313-337)
  * First implementation didn't support optional session parameter
  * Second implementation (kept) properly handles both with/without session
  * Eliminates code duplication and potential confusion

- Add critical admin role check in updateBatchStatus() in batchController.js
  * Verify req.user.role === 'admin' before allowing status changes
  * Return 403 Forbidden error if user is not admin
  * Add security logging for audit trail of admin actions
  * Prevents unauthorized users from flagging/unflagging batches

These fixes address:
1. Code quality issue with duplicate function definitions
2. Security vulnerability allowing any authenticated user to change batch status
- Import VALID_ROLES and ROLES from constants/permissions.js
  * Centralized source of truth for all role definitions
  * Ensures consistency across authentication layer

- Update registerSchema to use VALID_ROLES enum
  * Changed from hardcoded ['farmer', 'mandi', 'transporter', 'retailer']
  * Now supports: farmer, mandi, transporter, retailer, quality_inspector, admin, super_admin
  * Added dynamic error message showing all valid roles
  * Set default role to ROLES.FARMER for backwards compatibility

- Update walletRegisterSchema to use VALID_ROLES enum
  * Same role validation as email/password registration
  * Consistent error messaging
  * Default role assignment

Impact:
- Admins can now be registered through the API (previously impossible)
- Quality inspectors can be registered directly (was only via database seeding)
- All 7 roles defined in permissions.js are now available for registration
- Prevents future role inconsistency between layers
- Maintains backwards compatibility with default farmer role
@netlify
Copy link

netlify bot commented Mar 8, 2026

Deploy Preview for roaring-ganache-c7465f failed. Why did it fail? →

Name Link
🔨 Latest commit 5abca87
🔍 Latest deploy log https://app.netlify.com/projects/roaring-ganache-c7465f/deploys/69ad76f1ea91af0009147d96

@navin-oss
Copy link
Contributor Author

Please consider updating the label to medium.

@Nitya-003 Nitya-003 added bug Something isn't working apertre3.0 Easy Easy to solve. labels Mar 8, 2026
@Nitya-003 Nitya-003 merged commit ffd5f50 into Nitya-003:main Mar 8, 2026
0 of 9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

apertre3.0 bug Something isn't working Easy Easy to solve.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants