Dashboard
The dashboard feature exposes three distinct role-scoped surfaces: the user dashboard, the group admin dashboard, and the alliance admin dashboard. Each is rendered server-side with MiniJinja templates and driven by HTMX partial replacements.
Role hierarchy
| Role | Access | Permission check |
|---|---|---|
| Authenticated user | /dashboard/user |
Session presence only |
| Group admin | /dashboard/group |
user_has_selected_group_permission middleware |
| Alliance admin | /dashboard/alliance |
user_has_alliance_dashboard_permission middleware |
Permission enforcement
Permissions are injected at the router level in ocg-server/src/router/dashboard.rs via axum middleware::from_fn_with_state layers that run before each route group. The middleware variants are:
auth::user_has_selected_group_permission(GroupPermission::*)— verifies the acting user holds the named permission in the currently selected group.auth::user_has_selected_alliance_permission(AlliancePermission::*)— verifies the permission within the selected alliance.auth::user_has_alliance_dashboard_permission— broad alliance admin gate.
Write operations carry their own stricter permission layer on top of the read-only layer.
User dashboard
Implemented in ocg-server/src/handlers/dashboard/user/. Sections include:
- Profile — account settings and profile editing.
- Mock interviews — submitted requests, matched pairs, scheduling and feedback.
- Session proposals — CFS (call for speakers) submissions, co-speaker invitations, accept/reject flows.
- Submissions — resubmit or withdraw submitted CFS entries.
Group dashboard
Implemented in ocg-server/src/handlers/dashboard/group/ with sub-modules for each functional area. Permission layers are applied per area:
| Area | Required permission |
|---|---|
| Events (read/write) | GroupPermission::EventsWrite |
| Members (write) | GroupPermission::MembersWrite |
| Settings (write) | GroupPermission::SettingsWrite |
| Sponsors / store (write) | GroupPermission::SponsorsWrite |
| Team management | GroupPermission::TeamWrite |
Sections include event management, attendee notifications, member join-request approval/rejection, phone-request approval, LinkedIn block-listing, spotlights, intentional-dating introductions, sponsor management, store items, and the accelerator sub-dashboard.
Database queries backing the group dashboard are centralised in ocg-server/src/db/dashboard/group.rs (1 979 lines, the largest non-test file in the project).
Alliance dashboard
Implemented in ocg-server/src/handlers/dashboard/alliance/. Permission layers:
| Area | Required permission |
|---|---|
| Read views | AlliancePermission::Read |
| Group/landscape mutations | AlliancePermission::GroupsWrite |
| Settings mutations | AlliancePermission::SettingsWrite |
| Taxonomy mutations | AlliancePermission::TaxonomyWrite |
Sections include analytics (with publishable public reports), email template management, event category management, group activation/deactivation, landscape management, partner integrations, regions, settings, and team management. Alliance creation is a platform-level endpoint behind AlliancePermission and is accessible from /dashboard/alliance/create.
Common utilities
ocg-server/src/handlers/dashboard/common.rs provides search_user, a shared endpoint mounted under both group and user dashboard routers for finding users by name or email.
Active contributors
Cintia Sánchez García, Sako Mammadov, Sergio Castaño Arteaga, Shahriyar Mammadov