The Admin Role Management system provides comprehensive role-based access control for the Credence trust protocol. It implements a hierarchical role structure with secure assignment, revocation, and management capabilities.
The system implements three distinct roles with clear privilege separation:
- Highest privilege level
- Can manage all other admins
- Can assign/revoke any role
- Can modify contract configuration
- Cannot be removed if they're the last super admin
- Intermediate privilege level
- Can manage operators
- Can assign/revoke operator roles
- Can perform most administrative tasks
- Cannot manage other admins or super admins
- Basic privilege level
- Can perform limited operational tasks
- Cannot manage other users
- Cannot assign roles
- Support for multiple administrators at each role level
- Configurable minimum and maximum admin limits
- Prevents single points of failure
- Secure role assignment with authorization checks
- Role-based permissions for management operations
- Audit trail through event emission
- Prevents removal of the last admin at any role level
- Configurable minimum admin requirements
- Ensures system continuity
- Admin deactivation and reactivation
- Maintains audit history during deactivation
- Preserves role assignments during inactive periods
- Role-based access control for all operations
- Prevents privilege escalation
- Validates caller permissions before execution
- Address validation for all admin operations
- Bounds checking for configuration parameters
- Prevention of duplicate admin assignments
- Comprehensive event logging for all admin operations
- Audit trail for compliance and monitoring
- Real-time notification of role changes
- Guard against reentrancy attacks
- Atomic operation execution
- State consistency guarantees
initialize(env, super_admin, min_admins, max_admins)- Initializes the contract with a super admin
- Sets minimum and maximum admin limits
- Emits
admin_initializedevent
add_admin(env, caller, new_admin, role)- Adds a new admin with specified role
- Requires appropriate authorization level
- Emits
admin_addedevent
remove_admin(env, caller, admin_to_remove)- Removes an admin from the system
- Validates minimum admin requirements
- Emits
admin_removedevent
update_admin_role(env, caller, admin_address, new_role)- Updates an admin's role
- Maintains audit trail
- Emits
admin_role_updatedevent
deactivate_admin(env, caller, admin_address)- Deactivates an admin temporarily
- Preserves admin history
- Emits
admin_deactivatedevent
reactivate_admin(env, caller, admin_address)- Reactivates a deactivated admin
- Restores full privileges
- Emits
admin_reactivatedevent
get_admin_info(env, admin_address)- Returns detailed information about an admin
- Includes role, assignment history, and status
is_admin(env, address)- Checks if an address is an active admin
- Returns boolean result
has_role_at_least(env, address, required_role)- Checks if address has at least the specified role level
- Useful for authorization checks
get_all_admins(env)- Returns list of all admin addresses
- Includes both active and inactive admins
get_admins_by_role(env, role)- Returns list of admins with specific role
- Useful for role-based queries
min_admins: Minimum number of admins required (default: 1)max_admins: Maximum number of admins allowed (default: 100)
- Super Admin: Can only be assigned by Super Admin
- Admin: Can be assigned by Super Admin
- Operator: Can be assigned by Super Admin or Admin
// Initialize contract with super admin
admin_contract.initialize(env, super_admin_address, 1, 100);
// Add additional admins
admin_contract.add_admin(env, super_admin_address, admin_address, AdminRole::Admin);
admin_contract.add_admin(env, admin_address, operator_address, AdminRole::Operator);// Promote operator to admin
admin_contract.update_admin_role(env, super_admin_address, operator_address, AdminRole::Admin);
// Temporarily deactivate admin
admin_contract.deactivate_admin(env, super_admin_address, admin_address);
// Reactivate admin when needed
admin_contract.reactivate_admin(env, super_admin_address, admin_address);// Check if user has admin privileges
if admin_contract.is_admin(env, user_address) {
// Proceed with admin operation
}
// Check specific role requirements
if admin_contract.has_role_at_least(env, user_address, AdminRole::Admin) {
// Proceed with admin-level operation
}The contract emits the following events for audit and monitoring:
admin_initialized: Contract initializationadmin_added: New admin addedadmin_removed: Admin removedadmin_role_updated: Admin role changedadmin_deactivated: Admin deactivatedadmin_reactivated: Admin reactivated
- System prevents removal of last admin at any role level
- Configurable minimum admin requirements
- Ensures administrative continuity
- Strict role hierarchy enforcement
- Authorization checks for all operations
- Self-assignment restrictions for higher roles
- Complete event logging for all operations
- Immutable role assignment history
- Compliance-friendly audit capabilities
- Maintain multiple admins at each role level
- Distribute responsibilities across different addresses
- Regularly review and update admin assignments
- Follow principle of least privilege
- Assign minimum necessary roles
- Regularly audit role assignments
- Monitor admin events for suspicious activity
- Implement alerting for critical operations
- Regular security reviews of admin permissions
The admin contract can be integrated with other Credence contracts to provide centralized role management:
// Check admin permissions in other contracts
let admin_contract = AdminContractClient::new(&env, &admin_contract_address);
if admin_contract.is_admin(&env, &caller) {
// Proceed with protected operation
}The contract includes comprehensive tests covering:
- Role hierarchy enforcement
- Authorization checks
- Edge cases and boundary conditions
- Security scenarios
- Large-scale operations
Run tests with:
cargo test -p admin- Soroban CLI installed
- Appropriate network configuration
- Admin addresses prepared
- Build the contract:
cargo build --target wasm32-unknown-unknown --release -p admin - Deploy to network:
soroban contract deploy --wasm target/wasm32-unknown-unknown/release/admin.wasm - Initialize with super admin: Call
initializefunction - Add additional admins as needed
- Verify admin functionality
- Test role assignments
- Configure monitoring for admin events
- Document admin procedures and responsibilities