11 KiB
Feature Specification: User Profile Dashboard Filter
Feature Branch: 024-user-dashboard-filter
Created: 2026-03-04
Status: Draft
Input: User description: "Необходимо добавить страницу пользовательского профиля. В странице стоит указать следующие настройки - показывать по умолчанию только мои дашборды. Для этого в настройках следует указать поле для аккаунта Apache Superset, и дальше фильтровать все дашборды по имени owners | modified_by"
Clarifications
Session 2026-03-04
- Q: How should username mapping work if users switch between different Superset environments? → A: One global Superset username for all environments.
- Q: What exact filter logic should be used for owners and modified_by? → A: Include dashboard if username matches owners OR modified_by.
- Q: How should username matching work between saved profile username and dashboard fields? → A: Compare case-insensitively and trim surrounding spaces.
- Q: Who is allowed to edit the dashboard filter settings on the profile page? → A: Only the logged-in user can edit their own profile settings.
- Q: Where should the default "my dashboards" filter be applied in the product? → A: Only on the main dashboards list page.
- Q: Should profile binding support querying Apache Superset accounts from a selected environment? → A: Yes, provide account lookup from Superset environment during account binding.
User Scenarios & Testing (mandatory)
User Story 1 - Configure Dashboard Filter Preference (Priority: P1)
As a data analyst working with Apache Superset dashboards, I want to configure my profile to show only dashboards I own or have modified, so that I can quickly access my work without scrolling through irrelevant dashboards.
Why this priority: This is the core value of the feature - personalization of the dashboard view to improve user productivity. Without this, the feature provides no value.
Independent Test: Can be fully tested by navigating to the profile page, entering a Superset username, enabling the filter, saving preferences, and verifying that only matching dashboards appear in the dashboard list.
Acceptance Scenarios:
- Given the user is on their profile page, When they enter a valid Apache Superset username and enable "Show only my dashboards", Then the system saves their preference and applies the filter to the dashboard list
- Given the user has saved their filter preference, When they navigate to the dashboard list, Then only dashboards where they are listed as owner or modifier are displayed
- Given the user has enabled the filter, When they disable it and save, Then the dashboard list shows all available dashboards again
- Given the user is binding their Apache Superset account, When they select a Superset environment in profile settings, Then the system loads available Superset accounts and allows selecting one for binding
- Given the user enters an invalid username format, When they attempt to save, Then the system displays a validation error and prevents saving
User Story 2 - Manage Profile Settings (Priority: P2)
As a user, I want to access and modify my profile settings from a dedicated page, so that I can control my dashboard viewing preferences at any time.
Why this priority: While essential for the feature to work, this is a supporting capability that enables the core filtering functionality. It can be implemented alongside the filtering logic.
Independent Test: Can be tested by navigating to the profile page, viewing current settings, making changes, and verifying persistence across sessions.
Acceptance Scenarios:
- Given the user has previously saved their preferences, When they navigate to the profile page, Then their current settings are displayed (username and filter toggle state)
- Given the user is on the profile page, When they click "Cancel" without saving changes, Then their previous settings remain unchanged
- Given the user modifies their settings, When they click "Save", Then the changes persist and are reflected immediately in the dashboard list
- Given a user attempts to edit another user's profile settings, When they submit changes, Then the system denies the action and keeps the target user's settings unchanged
User Story 3 - Override Dashboard Filter (Priority: P3)
As a user, I want to temporarily view all dashboards even when my filter is enabled, so that I can explore dashboards owned by others when needed.
Why this priority: This enhances usability by providing flexibility. Users may occasionally need to see all dashboards without permanently changing their preference.
Independent Test: Can be tested by having a filter enabled, then using a clear/remove filter option on the dashboard list to temporarily show all dashboards.
Acceptance Scenarios:
- Given the user has enabled "Show only my dashboards", When they click the filter indicator on the dashboard list, Then all dashboards are displayed and the filter is temporarily disabled
- Given the user has temporarily disabled the filter, When they navigate away and return to the dashboard list, Then their original filter preference is still applied
Edge Cases
- What happens when the user's Superset username is changed in Apache Superset after they've configured their filter?
- How does the system handle a user who has no dashboards as owner or modifier?
- What happens when the Apache Superset connection is unavailable when the user tries to save preferences?
- How does the system handle special characters or very long usernames?
- What happens when one user has different usernames across Superset environments?
- How does the system behave if the Superset account lookup request fails or returns partial data?
- How does the system behave if the user has never configured their profile settings?
Requirements (mandatory)
Functional Requirements
- FR-001: System MUST provide a user profile page accessible from the main application interface
- FR-002: Profile page MUST include a text input field for Apache Superset username
- FR-003: Profile page MUST include a toggle control for "Show only my dashboards by default" setting
- FR-004: System MUST validate that the username field is not empty when the filter toggle is enabled
- FR-005: System MUST validate that the username does not contain spaces or invalid characters
- FR-006: System MUST persist user profile settings across sessions
- FR-007: When the filter is enabled, dashboard list MUST include a dashboard if the user's username matches the owners field OR the modified_by field
- FR-008: When the filter is enabled, dashboard list MUST exclude dashboards where the user's username matches neither owners nor modified_by
- FR-009: System MUST apply the filter immediately after saving profile preferences on the main dashboards list page
- FR-010: Dashboard list MUST display a visual indicator when a filter is active
- FR-011: System MUST allow users to temporarily clear the filter from the dashboard list view
- FR-012: System MUST restore the user's filter preference when returning to the dashboard list after temporarily clearing it
- FR-013: System MUST display appropriate error messages when settings cannot be saved
- FR-014: System MUST display a success confirmation when settings are saved successfully
- FR-015: System MUST handle the case where no dashboards match the filter criteria with an appropriate empty state message
- FR-016: System MUST use one global Apache Superset username per user profile across all Superset environments
- FR-017: System MUST match usernames using case-insensitive comparison after trimming leading and trailing spaces in both saved username and dashboard fields
- FR-018: System MUST allow users to edit only their own dashboard filter settings and MUST prevent edits to other users' settings
- FR-019: System MUST NOT auto-apply this default filter outside the main dashboards list page
- FR-020: While binding Apache Superset account in profile settings, system MUST allow selecting a Superset environment for account lookup
- FR-021: For selected environment, system MUST request and display available Superset accounts for user selection during binding
- FR-022: If Superset account lookup is unavailable, system MUST show a non-blocking error and allow manual username entry
Key Entities
- User Profile: Stores user preferences including one global Apache Superset username and dashboard filter setting. Key attributes: username (text, global across environments), show_only_my_dashboards (boolean)
- Dashboard: Represents an Apache Superset dashboard. Key attributes: dashboard_id, title, owner (username), modified_by (username), last_modified_date
- Filter Preference: Represents the user's saved filtering behavior. Key attributes: enabled (boolean), username (text), filter_type (owners_or_modified_by)
- Superset Account Candidate: Represents an account returned from selected Superset environment lookup for profile binding. Key attributes: environment_id, username, display_name
Success Criteria (mandatory)
Measurable Outcomes
- SC-001: Users can configure their dashboard filter preference in under 30 seconds
- SC-002: After saving preferences, users see the dashboard list update to the filtered view within 2 seconds
- SC-003: 95% of users successfully save their profile settings on first attempt
- SC-004: Users report a 50% reduction in time spent finding their dashboards in surveys
- SC-005: During peak usage, users can save preferences reliably without noticeable slowdowns
- SC-006: Filter correctly identifies user-owned dashboards with 99% accuracy based on owner and modified_by fields
- SC-007: Profile settings persist correctly across 100% of user sessions
Assumptions
- Users have an existing Apache Superset account with a unique username
- The application can access dashboard metadata that includes owner and modified_by identifiers
- The application has an existing user authentication system that can be extended with profile settings
- Dashboard list page exists and can be modified to support filtering
- Apache Superset username format follows standard conventions (alphanumeric, underscores, hyphens allowed)
- Each user has one global Superset username that is used in all environments
- Configured Superset environments expose account listing data that can be queried during profile binding