Some checks failed
CI/CD Pipeline / Test Suite (push) Has been cancelled
CI/CD Pipeline / Security Audit (push) Has been cancelled
CI/CD Pipeline / Performance Benchmarks (push) Has been cancelled
Rust CI / Security Audit (push) Has been cancelled
Rust CI / Check + Test + Lint (nightly) (push) Has been cancelled
Rust CI / Check + Test + Lint (stable) (push) Has been cancelled
CI/CD Pipeline / Build Docker Image (push) Has been cancelled
CI/CD Pipeline / Deploy to Staging (push) Has been cancelled
CI/CD Pipeline / Deploy to Production (push) Has been cancelled
CI/CD Pipeline / Cleanup (push) Has been cancelled
547 lines
13 KiB
Markdown
547 lines
13 KiB
Markdown
# Admin Dashboard System
|
|
|
|
A comprehensive admin dashboard built on top of the existing Rustelo authentication and content management infrastructure.
|
|
|
|
## 🚀 Features
|
|
|
|
### ✅ **User Management**
|
|
- View, create, edit, and manage users
|
|
- Role assignment and permission management
|
|
- User status management (Active, Inactive, Suspended, Pending)
|
|
- Bulk user operations
|
|
- User activity tracking
|
|
|
|
### ✅ **Role-Based Access Control (RBAC)**
|
|
- Create and manage custom roles
|
|
- Assign granular permissions
|
|
- Hierarchical role inheritance
|
|
- System role protection
|
|
- Permission auditing
|
|
|
|
### ✅ **Content Management**
|
|
- Multi-source content support (Database + Files)
|
|
- Content types: Blog, Page, Article, Documentation, Tutorial
|
|
- Content formats: Markdown, HTML, Plain Text
|
|
- Content states: Draft, Published, Archived, Scheduled
|
|
- SEO metadata management
|
|
- File upload capabilities
|
|
- Content analytics and view tracking
|
|
|
|
### ✅ **Internationalization**
|
|
- Full i18n support (English/Spanish)
|
|
- Localized admin interface
|
|
- Easy to extend with additional languages
|
|
|
|
### ✅ **Database Abstraction**
|
|
- Works with PostgreSQL and SQLite
|
|
- Automatic database type detection
|
|
- Unified query interface
|
|
|
|
## 📁 Project Structure
|
|
|
|
```
|
|
template/client/src/
|
|
├── components/admin/ # Admin-specific components
|
|
│ ├── AdminLayout.rs # Main admin layout with navigation
|
|
│ └── mod.rs
|
|
├── pages/admin/ # Admin page components
|
|
│ ├── Dashboard.rs # Admin dashboard with stats
|
|
│ ├── Users.rs # User management
|
|
│ ├── Roles.rs # Role management
|
|
│ ├── Content.rs # Content management
|
|
│ └── mod.rs
|
|
└── examples/
|
|
└── admin_integration.rs # Integration examples
|
|
|
|
template/server/src/
|
|
├── auth/ # Authentication system
|
|
│ ├── rbac_service.rs # RBAC implementation
|
|
│ ├── middleware.rs # Auth middleware
|
|
│ └── routes.rs # Auth routes
|
|
├── content/ # Content management
|
|
│ ├── service.rs # Content service
|
|
│ ├── repository.rs # Data access
|
|
│ ├── file_loader.rs # File-based content
|
|
│ └── routes.rs # Content API routes
|
|
└── database/ # Database abstraction
|
|
├── mod.rs # Database pool management
|
|
├── auth.rs # Auth-related queries
|
|
└── rbac.rs # RBAC queries
|
|
|
|
template/shared/src/
|
|
├── auth.rs # Shared auth types
|
|
└── content.rs # Shared content types
|
|
|
|
template/content/
|
|
└── texts.toml # i18n translations
|
|
```
|
|
|
|
## 🛠️ Setup
|
|
|
|
### 1. Enable Required Features
|
|
|
|
In your `Cargo.toml`:
|
|
|
|
```toml
|
|
[features]
|
|
default = ["auth", "content-db", "rbac"]
|
|
auth = ["dep:jsonwebtoken", "dep:argon2"]
|
|
content-db = ["dep:pulldown-cmark", "dep:syntect"]
|
|
rbac = ["dep:serde_json"]
|
|
```
|
|
|
|
### 2. Database Setup
|
|
|
|
The admin dashboard works with your existing database. Ensure migrations are run:
|
|
|
|
```bash
|
|
# PostgreSQL
|
|
sqlx migrate run --database-url postgresql://user:pass@localhost/db
|
|
|
|
# SQLite
|
|
sqlx migrate run --database-url sqlite:data/app.db
|
|
```
|
|
|
|
### 3. Environment Configuration
|
|
|
|
Add to your `.env` file:
|
|
|
|
```env
|
|
# Database (choose one)
|
|
DATABASE_URL=postgresql://user:pass@localhost/db
|
|
# DATABASE_URL=sqlite:data/app.db
|
|
|
|
# Authentication
|
|
JWT_SECRET=your-super-secret-jwt-key
|
|
JWT_EXPIRATION_HOURS=24
|
|
|
|
# Content Management
|
|
CONTENT_SOURCE=both # database, files, or both
|
|
CONTENT_DIR=./content
|
|
```
|
|
|
|
### 4. Admin User Setup
|
|
|
|
Create an initial admin user:
|
|
|
|
```bash
|
|
# Using the existing auth system
|
|
cargo run --bin create-admin-user
|
|
```
|
|
|
|
Or via API:
|
|
|
|
```bash
|
|
curl -X POST http://localhost:3030/api/auth/register \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"email": "admin@yourapp.com",
|
|
"password": "secure-password",
|
|
"roles": ["admin"]
|
|
}'
|
|
```
|
|
|
|
## 🔗 Integration
|
|
|
|
### Router Integration
|
|
|
|
Add admin routes to your main app:
|
|
|
|
```rust
|
|
use crate::components::admin::AdminLayout;
|
|
use leptos_router::*;
|
|
|
|
#[component]
|
|
pub fn App() -> impl IntoView {
|
|
view! {
|
|
<Router>
|
|
<Routes>
|
|
// Public routes
|
|
<Route path="/" view=HomePage />
|
|
<Route path="/about" view=AboutPage />
|
|
|
|
// Protected admin routes
|
|
<Route path="/admin/*" view=AdminLayout />
|
|
</Routes>
|
|
</Router>
|
|
}
|
|
}
|
|
```
|
|
|
|
### Navigation Integration
|
|
|
|
Add admin link to your navigation:
|
|
|
|
```rust
|
|
use crate::auth::use_auth;
|
|
|
|
#[component]
|
|
pub fn Navigation() -> impl IntoView {
|
|
let auth = use_auth();
|
|
|
|
view! {
|
|
<nav>
|
|
<a href="/">Home</a>
|
|
<a href="/about">About</a>
|
|
|
|
// Admin link - only for admin users
|
|
<Show when=move || auth.has_role("admin")>
|
|
<a href="/admin">Admin Dashboard</a>
|
|
</Show>
|
|
</nav>
|
|
}
|
|
}
|
|
```
|
|
|
|
### Authentication Guard
|
|
|
|
Protect admin routes with authentication:
|
|
|
|
```rust
|
|
#[component]
|
|
pub fn ProtectedAdminRoute() -> impl IntoView {
|
|
let auth = use_auth();
|
|
|
|
view! {
|
|
<Show
|
|
when=move || auth.is_authenticated() && auth.has_role("admin")
|
|
fallback=|| view! { <div>"Access Denied"</div> }
|
|
>
|
|
<AdminLayout />
|
|
</Show>
|
|
}
|
|
}
|
|
```
|
|
|
|
## 🎨 Customization
|
|
|
|
### Styling
|
|
|
|
The admin dashboard uses Tailwind CSS classes. Customize the appearance by:
|
|
|
|
1. **Override CSS classes** in your components
|
|
2. **Extend Tailwind config** for custom colors/spacing
|
|
3. **Create custom admin themes** by modifying the AdminLayout component
|
|
|
|
### Adding New Admin Pages
|
|
|
|
1. Create a new component in `pages/admin/`:
|
|
|
|
```rust
|
|
// pages/admin/Analytics.rs
|
|
#[component]
|
|
pub fn AdminAnalytics() -> impl IntoView {
|
|
let i18n = use_i18n();
|
|
|
|
view! {
|
|
<div class="min-h-screen bg-gray-50">
|
|
<div class="py-6">
|
|
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
|
<h1 class="text-3xl font-bold text-gray-900">
|
|
{move || i18n.t("admin.analytics.title")}
|
|
</h1>
|
|
// Your analytics content here
|
|
</div>
|
|
</div>
|
|
</div>
|
|
}
|
|
}
|
|
```
|
|
|
|
2. Add the route to AdminLayout:
|
|
|
|
```rust
|
|
// In AdminLayout.rs
|
|
<Routes>
|
|
<Route path="/admin" view=AdminDashboard />
|
|
<Route path="/admin/users" view=AdminUsers />
|
|
<Route path="/admin/roles" view=AdminRoles />
|
|
<Route path="/admin/content" view=AdminContent />
|
|
<Route path="/admin/analytics" view=AdminAnalytics /> // New route
|
|
</Routes>
|
|
```
|
|
|
|
3. Add navigation item:
|
|
|
|
```rust
|
|
// In AdminLayout.rs navigation
|
|
<AdminNavItem
|
|
section=AdminSection::Analytics
|
|
current_section=current_section
|
|
i18n=i18n.clone()
|
|
/>
|
|
```
|
|
|
|
### Adding Translations
|
|
|
|
Add new translations to `content/texts.toml`:
|
|
|
|
```toml
|
|
[en]
|
|
"admin.analytics.title" = "Analytics Dashboard"
|
|
"admin.analytics.subtitle" = "View application metrics and insights"
|
|
|
|
[es]
|
|
"admin.analytics.title" = "Panel de Analíticas"
|
|
"admin.analytics.subtitle" = "Ver métricas y conocimientos de la aplicación"
|
|
```
|
|
|
|
## 🔒 Security
|
|
|
|
### Authentication
|
|
|
|
- JWT-based authentication
|
|
- Secure password hashing with Argon2
|
|
- Session management
|
|
- OAuth2 integration (Google, GitHub)
|
|
- Two-factor authentication (2FA/TOTP)
|
|
|
|
### Authorization
|
|
|
|
- Role-based access control (RBAC)
|
|
- Granular permissions
|
|
- Route-level protection
|
|
- API endpoint protection
|
|
- Hierarchical roles
|
|
|
|
### Best Practices
|
|
|
|
1. **Always verify admin role** before showing admin UI
|
|
2. **Protect API endpoints** with RBAC middleware
|
|
3. **Use HTTPS** in production
|
|
4. **Implement rate limiting** for admin actions
|
|
5. **Audit admin activities** for security compliance
|
|
|
|
## 📊 Content Management
|
|
|
|
### Content Sources
|
|
|
|
The system supports multiple content sources:
|
|
|
|
- **Database**: Dynamic content stored in PostgreSQL/SQLite
|
|
- **Files**: Static content from markdown/HTML files
|
|
- **Both**: Hybrid approach combining database and file content
|
|
|
|
### Content Types
|
|
|
|
- **Blog**: Blog posts and articles
|
|
- **Page**: Static pages
|
|
- **Article**: Long-form content
|
|
- **Documentation**: Technical documentation
|
|
- **Tutorial**: Step-by-step guides
|
|
- **Custom**: User-defined content types
|
|
|
|
### Content Workflow
|
|
|
|
1. **Create**: Content starts as a draft
|
|
2. **Edit**: Authors can modify content
|
|
3. **Review**: Optional review process
|
|
4. **Publish**: Make content live
|
|
5. **Schedule**: Publish at a specific time
|
|
6. **Archive**: Remove from public view
|
|
|
|
### File Upload
|
|
|
|
Support for various file types:
|
|
- **Markdown** (.md, .markdown)
|
|
- **HTML** (.html)
|
|
- **Text** (.txt)
|
|
- **Images** (for featured images)
|
|
- **Documents** (PDFs, etc.)
|
|
|
|
## 🌐 API Endpoints
|
|
|
|
### Authentication
|
|
- `POST /api/auth/login` - User login
|
|
- `POST /api/auth/logout` - User logout
|
|
- `GET /api/auth/me` - Get current user
|
|
- `POST /api/auth/refresh` - Refresh token
|
|
|
|
### User Management
|
|
- `GET /api/admin/users` - List users
|
|
- `POST /api/admin/users` - Create user
|
|
- `PUT /api/admin/users/:id` - Update user
|
|
- `DELETE /api/admin/users/:id` - Delete user
|
|
|
|
### Role Management
|
|
- `GET /api/admin/roles` - List roles
|
|
- `POST /api/admin/roles` - Create role
|
|
- `PUT /api/admin/roles/:id` - Update role
|
|
- `DELETE /api/admin/roles/:id` - Delete role
|
|
|
|
### Content Management
|
|
- `GET /api/admin/content` - List content
|
|
- `POST /api/admin/content` - Create content
|
|
- `PUT /api/admin/content/:id` - Update content
|
|
- `DELETE /api/admin/content/:id` - Delete content
|
|
- `POST /api/admin/content/upload` - Upload files
|
|
|
|
### Analytics
|
|
- `GET /api/admin/stats` - Dashboard statistics
|
|
- `GET /api/admin/analytics` - Detailed analytics
|
|
|
|
## 🧪 Testing
|
|
|
|
### Unit Tests
|
|
|
|
```bash
|
|
# Test admin components
|
|
cargo test admin --features "auth,content-db,rbac"
|
|
|
|
# Test specific functionality
|
|
cargo test auth::rbac::tests
|
|
cargo test content::service::tests
|
|
```
|
|
|
|
### Integration Tests
|
|
|
|
```bash
|
|
# Test full admin workflow
|
|
cargo test integration::admin --features "auth,content-db,rbac"
|
|
```
|
|
|
|
### End-to-End Tests
|
|
|
|
```bash
|
|
# Run with headless browser
|
|
cargo test e2e::admin_dashboard
|
|
```
|
|
|
|
## 🚀 Deployment
|
|
|
|
### Production Build
|
|
|
|
```bash
|
|
# Build with all admin features
|
|
cargo build --release --features "tls,auth,content-db,rbac"
|
|
```
|
|
|
|
### Docker Deployment
|
|
|
|
```dockerfile
|
|
FROM rust:1.75 as builder
|
|
WORKDIR /app
|
|
COPY . .
|
|
RUN cargo build --release --features "tls,auth,content-db,rbac"
|
|
|
|
FROM debian:bookworm-slim
|
|
RUN apt-get update && apt-get install -y ca-certificates
|
|
COPY --from=builder /app/target/release/server /usr/local/bin/
|
|
COPY --from=builder /app/content /app/content
|
|
EXPOSE 3030
|
|
CMD ["server"]
|
|
```
|
|
|
|
### Environment Variables
|
|
|
|
```env
|
|
# Production configuration
|
|
DATABASE_URL=postgresql://user:pass@db:5432/production_db
|
|
JWT_SECRET=super-secure-production-secret
|
|
RUST_LOG=info
|
|
ENVIRONMENT=production
|
|
|
|
# TLS configuration
|
|
TLS_CERT_PATH=/etc/ssl/certs/app.crt
|
|
TLS_KEY_PATH=/etc/ssl/private/app.key
|
|
|
|
# Admin settings
|
|
ADMIN_EMAIL=admin@yourcompany.com
|
|
ADMIN_REGISTRATION_ENABLED=false
|
|
```
|
|
|
|
## 📈 Performance
|
|
|
|
### Optimization Tips
|
|
|
|
1. **Database Indexing**: Ensure proper indexes on user/content tables
|
|
2. **Caching**: Enable content caching for better performance
|
|
3. **Pagination**: Use pagination for large datasets
|
|
4. **Lazy Loading**: Load admin components only when needed
|
|
5. **Bundle Optimization**: Split admin code into separate bundles
|
|
|
|
### Monitoring
|
|
|
|
- **Database queries**: Monitor slow queries
|
|
- **Memory usage**: Track memory consumption
|
|
- **Response times**: Monitor API response times
|
|
- **Error rates**: Track error rates and patterns
|
|
|
|
## 🔧 Troubleshooting
|
|
|
|
### Common Issues
|
|
|
|
**Admin dashboard not loading**
|
|
- Check authentication state
|
|
- Verify admin role assignment
|
|
- Check browser console for errors
|
|
|
|
**Permission denied errors**
|
|
- Verify user has admin role
|
|
- Check RBAC configuration
|
|
- Review middleware setup
|
|
|
|
**Content not displaying**
|
|
- Check content source configuration
|
|
- Verify database connection
|
|
- Check file permissions for file-based content
|
|
|
|
**Database connection issues**
|
|
- Verify DATABASE_URL format
|
|
- Check database connectivity
|
|
- Review migration status
|
|
|
|
### Debug Mode
|
|
|
|
Enable debug logging:
|
|
|
|
```bash
|
|
RUST_LOG=debug cargo run
|
|
```
|
|
|
|
Check specific modules:
|
|
|
|
```bash
|
|
RUST_LOG=rustelo::auth=debug,rustelo::content=debug cargo run
|
|
```
|
|
|
|
## 🤝 Contributing
|
|
|
|
### Adding Features
|
|
|
|
1. Follow the existing architecture patterns
|
|
2. Add comprehensive tests
|
|
3. Update documentation
|
|
4. Add i18n translations
|
|
5. Ensure accessibility compliance
|
|
|
|
### Code Style
|
|
|
|
- Use `rustfmt` for formatting
|
|
- Follow Rust naming conventions
|
|
- Add documentation comments
|
|
- Write descriptive commit messages
|
|
|
|
### Pull Request Process
|
|
|
|
1. Create feature branch
|
|
2. Implement changes with tests
|
|
3. Update documentation
|
|
4. Submit PR with description
|
|
5. Address review feedback
|
|
|
|
## 📄 License
|
|
|
|
This admin dashboard system is part of the Rustelo framework and is licensed under the MIT License.
|
|
|
|
## 🆘 Support
|
|
|
|
- **Documentation**: [Full Documentation](https://yourusername.github.io/rustelo)
|
|
- **Issues**: [GitHub Issues](https://github.com/yourusername/rustelo/issues)
|
|
- **Discussions**: [GitHub Discussions](https://github.com/yourusername/rustelo/discussions)
|
|
- **Examples**: See `examples/admin_integration.rs` for complete integration examples
|
|
|
|
---
|
|
|
|
Built with ❤️ using Rust, Leptos, and modern web technologies.
|