- Add complete dark mode system with theme context and toggle - Implement dark mode toggle component in navigation menu - Add client-side routing with SSR-safe signal handling - Fix language selector styling for better dark mode compatibility - Add documentation system with mdBook integration - Improve navigation menu with proper external/internal link handling - Add comprehensive project documentation and configuration - Enhance theme system with localStorage persistence - Fix arena panic issues during server-side rendering - Add proper TypeScript configuration and build optimizations 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
7.1 KiB
7.1 KiB
RBAC System Summary - Optional Feature for Rustelo
🎯 Overview
RBAC (Role-Based Access Control) is an optional feature in Rustelo that provides advanced access control beyond basic role-based authentication. It's disabled by default and can be enabled incrementally based on your application's needs.
🚦 Feature Status
Default State: ❌ DISABLED
Purpose: Enhanced security and granular access control
Complexity: Moderate to High
Performance Impact: Low (when caching enabled)
🔧 When to Use RBAC
✅ Use RBAC When You Need:
- Database-level access restrictions
- File system access control
- Content management with complex permissions
- User categorization (departments, teams, clearance levels)
- Audit logging for compliance
- Multi-tenant applications
- Enterprise-grade security
❌ Skip RBAC When You Have:
- Simple applications with basic user roles
- Single-tenant applications
- Prototypes or MVPs
- Teams preferring simplicity
- Limited security requirements
📊 Configuration Options
1. Disabled (Default)
# No RBAC configuration needed
ENABLE_RBAC=false
- Uses basic role-based authentication (Admin, Moderator, User, Guest)
- Simple and fast
- Perfect for most applications
2. Basic RBAC
# Minimal RBAC with user categories
ENABLE_RBAC=true
ENABLE_RBAC_CATEGORIES=true
ENABLE_RBAC_CACHING=true
- Adds user categories (admin, editor, viewer, finance, hr, it)
- Maintains simplicity while adding flexibility
- Good for small to medium organizations
3. Resource-Specific RBAC
# RBAC for specific resource types
ENABLE_RBAC=true
ENABLE_RBAC_DATABASE=true # Database access control
ENABLE_RBAC_FILES=true # File access control
ENABLE_RBAC_CONTENT=true # Content access control
ENABLE_RBAC_CATEGORIES=true
ENABLE_RBAC_CACHING=true
- Granular control over specific resources
- Ideal for applications with mixed access patterns
4. Full RBAC
# All RBAC features enabled
ENABLE_RBAC=true
ENABLE_RBAC_DATABASE=true
ENABLE_RBAC_FILES=true
ENABLE_RBAC_CONTENT=true
ENABLE_RBAC_API=true
ENABLE_RBAC_CATEGORIES=true
ENABLE_RBAC_TAGS=true
ENABLE_RBAC_CACHING=true
ENABLE_RBAC_AUDIT=true
ENABLE_RBAC_TOML_CONFIG=true
ENABLE_RBAC_HIERARCHICAL=true
ENABLE_RBAC_DYNAMIC_RULES=true
- Enterprise-grade access control
- Complete audit trail
- Maximum flexibility and security
🏗️ Architecture Impact
Without RBAC (Default)
Request → Auth Middleware → Role Check → Handler
- Simple and fast
- Uses existing User.roles field
- Basic permission checks in handlers
With RBAC Enabled
Request → Auth Middleware → RBAC Middleware → Access Rules → Handler
- Advanced permission evaluation
- Database-driven access rules
- Cached results for performance
- Comprehensive audit logging
📈 Migration Strategy
Phase 1: Start Simple
# Begin with default authentication
ENABLE_RBAC=false
Phase 2: Add Categories
# When you need user organization
ENABLE_RBAC=true
ENABLE_RBAC_CATEGORIES=true
Phase 3: Add Resource Control
# When you need granular access
ENABLE_RBAC_DATABASE=true # or FILES, CONTENT, API
Phase 4: Production Features
# When you need enterprise features
ENABLE_RBAC_CACHING=true
ENABLE_RBAC_AUDIT=true
🛠️ Implementation Examples
Basic Usage (No RBAC)
// Simple role-based check
if user.has_role(&Role::Admin) {
// Allow admin operations
}
RBAC Usage (When Enabled)
// Advanced access control
let access_result = rbac_service
.check_database_access(&user, "analytics", "read")
.await?;
match access_result {
AccessResult::Allow => { /* proceed */ }
AccessResult::Deny => { /* forbidden */ }
AccessResult::RequireAdditionalAuth => { /* 2FA required */ }
}
Conditional Middleware
// Middleware is applied only when RBAC is enabled
let app = Router::new()
.route("/api/database/:db", get(handler))
.apply_rbac_if_enabled(&rbac_service);
📊 Performance Considerations
Without RBAC
- Latency: ~1ms per request
- Memory: Minimal overhead
- Database: No additional queries
With RBAC (Caching Enabled)
- Latency: ~2-3ms per request (first access)
- Latency: ~1ms per request (cached)
- Memory: ~50MB for cache (10k users)
- Database: 1 query per unique permission check
With RBAC (No Caching)
- Latency: ~5-10ms per request
- Database: 2-5 queries per request
🔍 Comparison Matrix
| Feature | Basic Auth | Basic RBAC | Full RBAC |
|---|---|---|---|
| Setup Complexity | ⭐ | ⭐⭐ | ⭐⭐⭐⭐ |
| Learning Curve | ⭐ | ⭐⭐ | ⭐⭐⭐ |
| Performance | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
| Flexibility | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| Security | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| Audit Capability | ⭐ | ⭐⭐ | ⭐⭐⭐⭐⭐ |
| Enterprise Ready | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
🚀 Getting Started
Step 1: Choose Your Level
- Prototype/MVP: Keep RBAC disabled
- Small Team: Enable basic RBAC with categories
- Growing Business: Add resource-specific controls
- Enterprise: Enable full RBAC
Step 2: Configure Environment
Copy the relevant configuration from config/rbac.env.example:
# For basic RBAC
cp config/rbac.env.example .env
# Edit .env and set ENABLE_RBAC=true
Step 3: Run Migrations
# RBAC migrations run automatically when enabled
cargo run
Step 4: Configure Access Rules
# Edit config/rbac.toml (if TOML config enabled)
# Or use the API endpoints to manage rules
❓ Decision Tree
Do you need access control beyond basic roles?
├─ No → Keep RBAC disabled ✅
└─ Yes → Do you need database/file-level control?
├─ No → Enable basic RBAC with categories
└─ Yes → Do you need audit logging?
├─ No → Enable resource-specific RBAC
└─ Yes → Enable full RBAC
🔗 Related Documentation
- Full RBAC Documentation - Complete implementation guide
- Configuration Reference - All environment variables
- API Documentation - Usage examples
- Migration Guide - How to upgrade existing apps
💡 Best Practices
- Start Simple: Begin without RBAC, add when needed
- Incremental Adoption: Enable features one at a time
- Performance First: Always enable caching in production
- Security Review: Audit rules regularly when using full RBAC
- Documentation: Document your access patterns and rules
🎯 Summary
RBAC in Rustelo is designed to be:
- Optional - Use it only when you need it
- Incremental - Add features gradually
- Performance-conscious - Optimized for production use
- Flexible - Adapts to your security requirements
- Backward-compatible - Existing apps work without changes
Choose the level that fits your application's complexity and security requirements. You can always upgrade later as your needs evolve.