5.6 KiB
Data Model: User Profile Dashboard Filter
Overview
This model defines persistent and transient entities needed to:
- store per-user dashboard filter preferences,
- support Superset account lookup by selected environment during profile binding,
- apply deterministic dashboard filtering on the main dashboards list page.
1) UserDashboardPreference (persistent)
Purpose: Stores the authenticated user’s saved profile settings for dashboard filtering.
Fields
preference_id(string/uuid, required, unique)user_id(string, required, unique, FK ->users.id)superset_username(string, optional)superset_username_normalized(string, optional)show_only_my_dashboards(boolean, required, defaultfalse)created_at(datetime, required)updated_at(datetime, required)
Validation Rules
user_idmust be unique (one preference record per user).- If
show_only_my_dashboards = true,superset_usernamemust be non-empty and valid. superset_username_normalizedmust betrim(lower(superset_username))when username exists.- A user can mutate only their own preference record.
Lifecycle Notes
unconfigured->configured_disabled(username optional, toggle off)configured_disabled->configured_enabled(valid username + toggle on)configured_enabled->configured_disabled(toggle off, username may be retained)
2) SupersetAccountLookupRequest (transient)
Purpose: Represents a profile-page request to fetch account candidates from a selected Superset environment.
Fields
requester_user_id(string, required)environment_id(string, required)search(string, optional)page_index(integer, required, default0, min0)page_size(integer, required, default20, min1, max100)sort_column(enum, required, defaultusername)
Allowed:username,first_name,last_name,emailsort_order(enum, required, defaultdesc)
Allowed:asc,desc
Validation Rules
requester_user_idmust be authenticated user identity.environment_idmust exist in configured environments.- Pagination and sort values must respect allowed bounds/enums.
Integration Note
Backend may translate these fields into Superset-compatible query style (including pageIndex, sortColumn, sortOrder) when contacting selected environment.
3) SupersetAccountCandidate (transient)
Purpose: Canonical account option returned to frontend from selected Superset environment.
Fields
environment_id(string, required)username(string, required)display_name(string, optional)email(string, optional)is_active(boolean, optional)
Validation Rules
usernamemust be non-empty.- Candidate list should be deduplicated by normalized username per environment response.
- Payload must remain stable even if upstream Superset shape differs.
4) DashboardActorProjection (derived, transient)
Purpose: Normalized actor fields used for deterministic filter matching.
Fields
dashboard_id(integer, required)owners_tokens(array[string], required)modified_by_token(string, optional)match_reason(enum, required)
Allowed:owners,modified_by,none
Validation Rules
owners_tokensmust contain trimmed unique non-empty tokens.modified_by_tokenmust be trimmed when present.- Matching uses case-insensitive compare against
superset_username_normalized.
5) DashboardProfileFilterContext (transient)
Purpose: Carries effective profile-filter state for dashboards list response.
Fields
user_id(string, required)apply_profile_default(boolean, required)override_show_all(boolean, required)effective_filter_applied(boolean, required)effective_username(string, optional)source_page(enum, required)
Allowed:dashboards_main,other
Validation Rules
- Auto-apply is valid only when
source_page = dashboards_main. - If
override_show_all = true,effective_filter_appliedmust befalse. - If preference toggle is disabled,
effective_filter_appliedmust befalse.
6) ProfileSaveResult (transient)
Purpose: Normalized save response used by profile page UX feedback.
Fields
status(enum, required)
Allowed:success,errormessage(string, optional)validation_errors(array[string], optional)saved_preference(UserDashboardPreference, optional)
Validation Rules
saved_preferencepresent only for successful save.validation_errorspresent only for invalid input scenarios.
Relationships
User1 — 1UserDashboardPreferenceEnvironment1 — NSupersetAccountLookupRequest(runtime)SupersetAccountLookupRequest1 — NSupersetAccountCandidate(runtime)UserDashboardPreference+DashboardActorProjection-> filtered dashboard list projectionDashboardProfileFilterContextdecorates dashboards response behavior/state
State Model Highlights
Profile Binding Flow
idle -> environment_selected -> lookup_loading -> lookup_loaded|lookup_failed -> save_loading -> save_success|save_error
Dashboards Filter Flow (main list page)
default_apply -> active_filtered -> temporary_show_all -> leave_page -> default_apply_restored
Data Consistency & Security Invariants
- Preference mutations are always scoped to authenticated user identity.
- Bound username normalization is deterministic and identical across save and match paths.
- Temporary "show all" override does not mutate saved preference.
- Account lookup errors never force data loss; manual username fallback remains available.