+
+
+ {$t.profile?.security_read_only_note ||
+ "This section is read-only. Role changes are managed in Admin → Users."}
+
+
+
+
+
+ {$t.profile?.current_role || "Current Role"}
+
+
+ {securitySummary.current_role ||
+ $t.common?.not_available ||
+ "N/A"}
+
+
+
+
+
+ {$t.profile?.role_source || "Role Source"}
+
+
+ {securitySummary.role_source ||
+ securitySummary.auth_source ||
+ $t.common?.not_available ||
+ "N/A"}
+
+
+
+
+
+
+ {$t.profile?.permissions || "Permissions"}
+
+ {#if securitySummary.permissions.length > 0}
+
+ {#each securitySummary.permissions as permission (permission.key)}
+
+ {permission.allowed ? "✔" : "✖"}
+ {permission.key}
+
+ {/each}
+
+ {:else}
+
+ {$t.profile?.permission_none || "No permissions available"}
+
+ {/if}
+
+
+
+
+
+ {$t.profile?.git_integration || "Git Integration (PAT)"}
+
+
+
+
+
+
+
+
+
+
+
+ {$t.profile?.git_token || "GitLab / GitHub Token"}
+
+
+
+
+
+
+
+ {$t.profile?.git_token_hint ||
+ "Token is never returned in plain text. Leave empty to keep current token."}
+
+
+ {#if hasGitPersonalAccessToken}
+
+ {$t.profile?.git_token_masked_label || "Current token"}:
+
+ {gitPersonalAccessTokenMasked || "***"}
+
+
+ {:else}
+
+ {$t.profile?.git_token_not_set || "Token is not set"}
+
+ {/if}
+
+
+
+
+
+ {$t.profile?.user_preferences || "User Preferences"}
+
+
+
+
+
+
+
+
+
+
+
- {#if visibleValidationErrors.length > 0}
-
- {#each visibleValidationErrors as errorText}
-
{errorText}
- {/each}
-
- {/if}
-
-
-
-
-
- {/if}
-
+ {#if visibleValidationErrors.length > 0}
+
+ {#each visibleValidationErrors as errorText}
+
{errorText}
+ {/each}
+
+ {/if}
+
+
+
+
+
+
+ {/if}
\ No newline at end of file
diff --git a/frontend/src/routes/profile/__tests__/profile-preferences.integration.test.js b/frontend/src/routes/profile/__tests__/profile-preferences.integration.test.js
index 92202b1f..a1d758e7 100644
--- a/frontend/src/routes/profile/__tests__/profile-preferences.integration.test.js
+++ b/frontend/src/routes/profile/__tests__/profile-preferences.integration.test.js
@@ -53,7 +53,7 @@ vi.mock("$lib/i18n", () => ({
common: { cancel: "Cancel" },
profile: {
title: "Profile",
- description: "Manage your dashboard filter preferences.",
+ description: "Manage your profile preferences, Git integration, and access view.",
dashboard_preferences: "Dashboard Preferences",
superset_environment: "Superset Environment",
superset_environment_placeholder: "Select environment",
@@ -88,6 +88,21 @@ describe("profile-preferences.integration", () => {
user_id: "u-1",
superset_username: null,
show_only_my_dashboards: false,
+ git_username: null,
+ git_email: null,
+ has_git_personal_access_token: false,
+ git_personal_access_token_masked: null,
+ start_page: "dashboards",
+ auto_open_task_drawer: true,
+ dashboards_table_density: "comfortable",
+ },
+ security: {
+ read_only: true,
+ auth_source: "adfs",
+ current_role: "Data Engineer",
+ role_source: "adfs",
+ roles: ["Data Engineer"],
+ permissions: [],
},
});
@@ -97,6 +112,21 @@ describe("profile-preferences.integration", () => {
user_id: "u-1",
superset_username: "john_doe",
show_only_my_dashboards: true,
+ git_username: null,
+ git_email: null,
+ has_git_personal_access_token: false,
+ git_personal_access_token_masked: null,
+ start_page: "dashboards",
+ auto_open_task_drawer: true,
+ dashboards_table_density: "comfortable",
+ },
+ security: {
+ read_only: true,
+ auth_source: "adfs",
+ current_role: "Data Engineer",
+ role_source: "adfs",
+ roles: ["Data Engineer"],
+ permissions: [],
},
});
});
@@ -145,6 +175,11 @@ describe("profile-preferences.integration", () => {
expect(mockedApi.updateProfilePreferences).toHaveBeenCalledWith({
superset_username: "john_doe",
show_only_my_dashboards: true,
+ git_username: null,
+ git_email: null,
+ start_page: "dashboards",
+ auto_open_task_drawer: true,
+ dashboards_table_density: "comfortable",
});
expect(mockedAddToast).toHaveBeenCalledWith("Preferences saved", "success");
});
@@ -160,6 +195,21 @@ describe("profile-preferences.integration", () => {
user_id: "u-1",
superset_username: "manual_user",
show_only_my_dashboards: true,
+ git_username: null,
+ git_email: null,
+ has_git_personal_access_token: false,
+ git_personal_access_token_masked: null,
+ start_page: "dashboards",
+ auto_open_task_drawer: true,
+ dashboards_table_density: "comfortable",
+ },
+ security: {
+ read_only: true,
+ auth_source: "adfs",
+ current_role: "Data Engineer",
+ role_source: "adfs",
+ roles: ["Data Engineer"],
+ permissions: [],
},
});
@@ -189,6 +239,11 @@ describe("profile-preferences.integration", () => {
expect(mockedApi.updateProfilePreferences).toHaveBeenCalledWith({
superset_username: "manual_user",
show_only_my_dashboards: true,
+ git_username: null,
+ git_email: null,
+ start_page: "dashboards",
+ auto_open_task_drawer: true,
+ dashboards_table_density: "comfortable",
});
});
});
diff --git a/frontend/src/routes/profile/__tests__/profile-settings-state.integration.test.js b/frontend/src/routes/profile/__tests__/profile-settings-state.integration.test.js
index 33ebcd6c..2d6118c5 100644
--- a/frontend/src/routes/profile/__tests__/profile-settings-state.integration.test.js
+++ b/frontend/src/routes/profile/__tests__/profile-settings-state.integration.test.js
@@ -51,7 +51,7 @@ vi.mock("$lib/i18n", () => ({
common: { cancel: "Cancel" },
profile: {
title: "Profile",
- description: "Manage your dashboard filter preferences.",
+ description: "Manage your profile preferences, Git integration, and access view.",
dashboard_preferences: "Dashboard Preferences",
superset_environment: "Superset Environment",
superset_environment_placeholder: "Select environment",
@@ -96,6 +96,21 @@ describe("profile-settings-state.integration", () => {
user_id: "u-1",
superset_username: "john_doe",
show_only_my_dashboards: true,
+ git_username: null,
+ git_email: null,
+ has_git_personal_access_token: false,
+ git_personal_access_token_masked: null,
+ start_page: "dashboards",
+ auto_open_task_drawer: true,
+ dashboards_table_density: "comfortable",
+ },
+ security: {
+ read_only: true,
+ auth_source: "adfs",
+ current_role: "Data Engineer",
+ role_source: "adfs",
+ roles: ["Data Engineer"],
+ permissions: [],
},
});
@@ -139,6 +154,21 @@ describe("profile-settings-state.integration", () => {
user_id: "u-1",
superset_username: "john_doe",
show_only_my_dashboards: true,
+ git_username: null,
+ git_email: null,
+ has_git_personal_access_token: false,
+ git_personal_access_token_masked: null,
+ start_page: "dashboards",
+ auto_open_task_drawer: true,
+ dashboards_table_density: "comfortable",
+ },
+ security: {
+ read_only: true,
+ auth_source: "adfs",
+ current_role: "Data Engineer",
+ role_source: "adfs",
+ roles: ["Data Engineer"],
+ permissions: [],
},
})
.mockResolvedValueOnce({
@@ -147,6 +177,21 @@ describe("profile-settings-state.integration", () => {
user_id: "u-1",
superset_username: "new_user",
show_only_my_dashboards: true,
+ git_username: null,
+ git_email: null,
+ has_git_personal_access_token: false,
+ git_personal_access_token_masked: null,
+ start_page: "dashboards",
+ auto_open_task_drawer: true,
+ dashboards_table_density: "comfortable",
+ },
+ security: {
+ read_only: true,
+ auth_source: "adfs",
+ current_role: "Data Engineer",
+ role_source: "adfs",
+ roles: ["Data Engineer"],
+ permissions: [],
},
});
@@ -156,6 +201,21 @@ describe("profile-settings-state.integration", () => {
user_id: "u-1",
superset_username: "new_user",
show_only_my_dashboards: true,
+ git_username: null,
+ git_email: null,
+ has_git_personal_access_token: false,
+ git_personal_access_token_masked: null,
+ start_page: "dashboards",
+ auto_open_task_drawer: true,
+ dashboards_table_density: "comfortable",
+ },
+ security: {
+ read_only: true,
+ auth_source: "adfs",
+ current_role: "Data Engineer",
+ role_source: "adfs",
+ roles: ["Data Engineer"],
+ permissions: [],
},
});
@@ -178,6 +238,11 @@ describe("profile-settings-state.integration", () => {
expect(mockedApi.updateProfilePreferences).toHaveBeenCalledWith({
superset_username: "new_user",
show_only_my_dashboards: true,
+ git_username: null,
+ git_email: null,
+ start_page: "dashboards",
+ auto_open_task_drawer: true,
+ dashboards_table_density: "comfortable",
});
});
diff --git a/frontend/src/routes/settings/git/+page.svelte b/frontend/src/routes/settings/git/+page.svelte
index 51c520f4..c6693414 100644
--- a/frontend/src/routes/settings/git/+page.svelte
+++ b/frontend/src/routes/settings/git/+page.svelte
@@ -11,34 +11,37 @@