Skip to content

Commit ae522f4

Browse files
feat(admin-ui): revamp Cedarling Policy, Role & Mapping as per Figma (#2645)
1 parent 556dfd6 commit ae522f4

38 files changed

+2078
-839
lines changed

admin-ui/app/constants/ui.ts

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,48 @@ export const GRADIENT_POSITION = {
2525
} as const
2626

2727
export const ELLIPSE_SIZE = '200% 160%'
28+
29+
export const CEDARLING_CONFIG_SPACING = {
30+
ALERT_TO_INPUT: 30,
31+
LABEL_MB: 7,
32+
INPUT_HEIGHT: 52,
33+
INPUT_TO_RADIO: 44,
34+
RADIO_LABEL_MB: 8,
35+
HELPER_MT: 10,
36+
BUTTONS_MT: 50,
37+
ALERT_PADDING_TOP: 22,
38+
ALERT_PADDING_BOTTOM: 20,
39+
ALERT_PADDING_LEFT: 56,
40+
ALERT_PADDING_RIGHT: 24,
41+
ALERT_ICON_LEFT: 25,
42+
ALERT_ICON_TOP: 22,
43+
ALERT_TITLE_MB: 8,
44+
RADIO_GROUP_GAP: 25,
45+
INPUT_PADDING_VERTICAL: 14,
46+
INPUT_PADDING_HORIZONTAL: 21,
47+
BUTTON_OFFSET_TOP: 4,
48+
TOOLTIP_MAX_WIDTH: 320,
49+
ICON_SIZE_MD: 24,
50+
} as const
51+
52+
export const MAPPING_SPACING = {
53+
PAGE_PADDING_TOP: 53,
54+
ALERT_TO_CARD: 24,
55+
CARD_PADDING: 33,
56+
CARD_HEADER_HEIGHT: 73,
57+
CARD_BORDER_RADIUS: 16,
58+
CARD_MARGIN_BOTTOM: 16,
59+
PERMISSION_ROW_GAP: 20,
60+
PERMISSION_ITEM_GAP: 30,
61+
CHECKBOX_SIZE: 22,
62+
CHECKBOX_LABEL_GAP: 9,
63+
CHECKBOX_BORDER_RADIUS: 5,
64+
CHECKBOX_BORDER_WIDTH: 2,
65+
CHECK_ICON_SIZE: 14,
66+
INFO_ALERT_PADDING_VERTICAL: 16,
67+
INFO_ALERT_PADDING_HORIZONTAL: 24,
68+
INFO_ALERT_GAP: 16,
69+
INFO_ALERT_BORDER_RADIUS: 6,
70+
INFO_ICON_SIZE: 24,
71+
CONTENT_PADDING_TOP: 27,
72+
} as const

admin-ui/app/context/theme/config.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ const createLightTheme = () => {
1010
background,
1111
lightBackground: customColors.whiteSmoke,
1212
fontColor: text,
13+
textMuted: customColors.textSecondary,
1314
borderColor: border,
1415
inputBackground: customColors.lightInputBg,
1516
menu: {
@@ -25,6 +26,19 @@ const createLightTheme = () => {
2526
dashboard: {
2627
supportCard: customColors.white,
2728
},
29+
card: {
30+
background: customColors.white,
31+
border: customColors.lightBorder,
32+
},
33+
infoAlert: {
34+
background: customColors.cedarInfoBgLight,
35+
border: customColors.cedarInfoBorderLight,
36+
text: customColors.cedarInfoTextLight,
37+
icon: customColors.cedarInfoTextLight,
38+
},
39+
checkbox: {
40+
uncheckedBorder: customColors.sidebarHoverBg,
41+
},
2842
}
2943
}
3044

@@ -37,6 +51,7 @@ const createDarkTheme = () => {
3751
background,
3852
lightBackground: customColors.primaryDark,
3953
fontColor: text,
54+
textMuted: customColors.textMutedDark,
4055
borderColor: border,
4156
inputBackground: customColors.darkInputBg,
4257
menu: {
@@ -52,6 +67,19 @@ const createDarkTheme = () => {
5267
dashboard: {
5368
supportCard: customColors.darkCardBg,
5469
},
70+
card: {
71+
background: customColors.cedarCardBgDark,
72+
border: customColors.cedarCardBorderDark,
73+
},
74+
infoAlert: {
75+
background: customColors.cedarCardBgDark,
76+
border: customColors.cedarCardBorderDark,
77+
text: customColors.cedarTextSecondaryDark,
78+
icon: customColors.cedarTextTertiaryDark,
79+
},
80+
checkbox: {
81+
uncheckedBorder: customColors.cedarCardBorderDark,
82+
},
5583
}
5684
}
5785

admin-ui/app/context/theme/constants.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
export const THEME_LIGHT = 'light'
22
export const THEME_DARK = 'dark'
3-
export const DEFAULT_THEME = THEME_LIGHT
3+
export const DEFAULT_THEME = THEME_DARK
44

55
export const THEME_VALUES = [THEME_LIGHT, THEME_DARK] as const
66

admin-ui/app/customColors.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,14 @@ export const customColors = {
4040
buttonLightBg: '#f4f6f8',
4141
darkBorderGradientBase: '#00d5e6',
4242
ribbonShadowColor: '#1a237e',
43+
// Cedarling configuration specific (synced with Figma light & dark themes)
44+
cedarCardBgDark: '#10375e',
45+
cedarCardBorderDark: '#224f7c',
46+
cedarTextSecondaryDark: '#c9dbec',
47+
cedarTextTertiaryDark: '#72a1d1',
48+
cedarInfoBgLight: '#e5f6fd',
49+
cedarInfoBorderLight: '#a6d3e6',
50+
cedarInfoTextLight: '#4f8196',
4351
} as const
4452

4553
/**

admin-ui/app/locales/en/translation.json

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -817,6 +817,7 @@
817817
"no_configuration_loaded": "No configuration loaded",
818818
"insufficient_permissions_to_modify": "You do not have permission to modify this configuration",
819819
"action_commit_question": "Audit log: Want to apply changes made on this page?",
820+
"action_commit_question_title": "Confirm Changes",
820821
"licenseAuditLog": "Do you really want to reset the existing license?",
821822
"action_deletion_question": "Do you really want to delete this item?",
822823
"action_deletion_for": "Deletion confirmation for",
@@ -856,6 +857,8 @@
856857
"partial_update_failure": "Some configurations failed to update. Please review and try again.",
857858
"min_characters": "Minimum {{count}} characters",
858859
"field_required": "This field is required",
860+
"remote": "Remote",
861+
"default": "Default",
859862
"default_policy_store_is_used": "Admin UI is already using default policy-store for access control.",
860863
"insufficient_token_read_permission": "Access to token data is not granted.",
861864
"try_again_later": "Please try again later",
@@ -883,9 +886,13 @@
883886
"mapping_added_successfully": "Mapping added successfully",
884887
"error_adding_mapping": "Failed to add mapping",
885888
"error_loading_mapping": "Failed to load role-permission mappings",
889+
"no_role_mappings_found": "No role mappings found",
886890
"permissions_count_one": "{{count}} permission",
887891
"permissions_count_other": "{{count}} permissions",
892+
"permissions_count": "{{count, plural, one {{count}} permission} other {{count}} permissions}}",
888893
"no_permissions_assigned": "No permissions assigned",
894+
"out_of": "out of",
895+
"permission_label": "Permission",
889896
"see_configurations": "See Configuration",
890897
"manage_configurations": "Manage Configurations",
891898
"fetching_project_details": "Fetching project details...",
@@ -1881,9 +1888,16 @@
18811888
"point3": "3. Make the required modifications in the policies for Admin UI access control and save the changes.",
18821889
"point4": "4. Make sure the hostname of the OpenID Configuration Endpoint matches with the hostname of your OpenId Provider.",
18831890
"point5": "5. Copy the Policy Store URL.",
1884-
"point6": "6. Open Cedarling Policy Store configuration screen on Admin UI and add the copied Policy Store URL in Admin UI Remote Policy Store field. Set Policy Retrieval Point field to Remote to use the remote Policy Store URL for the GUI access control.",
1891+
"point6": "6. Open Cedarling Policy Store configuration screen on Admin UI and add the copied Policy Store URL in Admin UI Remote Policy Store field. Set Policy Retrieval Point field to Remote to use the remote Policy Store URL for the Admin UI access control.",
18851892
"useRemotePolicyStore": "It is recommended to set it to Default for production. If set to Default, it will use the Admin-UI storage for Cedarling authorization. Enable Default mode and use the refresh button to store or update GitHub policies on the Admin-UI Server.",
1886-
"updateRemotePolicyStoreOnServer": "Click here to update the default policy-store JSON with the version available from the configured remote URL."
1893+
"updateRemotePolicyStoreOnServer": "Click here to update the default policy-store JSON with the version available from the configured remote URL.",
1894+
"policyUrlDisabledWhenDefault": "Policy URL is disabled when Default is selected.",
1895+
"policyStoreUrlInvalidError": "Policy Store URL must be a valid HTTP or HTTPS URL.",
1896+
"agamaLabPolicyDesigner": "Agama Lab's Policy Designer",
1897+
"gluuFlexAdminUiPolicyStoreDisplay": "Gluu Flex Admin UI Policy Store",
1898+
"auditPolicyStoreUrlUpdated": "Policy Store URL configuration updated",
1899+
"auditSyncRoleToScopesMappings": "Sync role to scopes mappings",
1900+
"auditSetPolicyStoreAsDefault": "Set policy store as default"
18871901
},
18881902
"mappings": {
18891903
"note_prefix": "Configure",

admin-ui/app/locales/es/translation.json

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -819,6 +819,7 @@
819819
"insufficient_permissions_to_modify": "No tiene permiso para modificar esta configuración",
820820
"insufficient_token_read_permission": "El acceso a los datos del token no está concedido.",
821821
"action_commit_question": "Registro de auditoría: ¿Desea aplicar los cambios realizados en esta página?",
822+
"action_commit_question_title": "Confirmar cambios",
822823
"licenseAuditLog": "¿Realmente desea restablecer la licencia existente?",
823824
"action_deletion_question": "¿Realmente desea eliminar este elemento?",
824825
"action_deletion_for": "Confirmación de eliminación para",
@@ -858,6 +859,8 @@
858859
"partial_update_failure": "Algunas configuraciones no se pudieron actualizar. Por favor, revise e intente de nuevo.",
859860
"min_characters": "Mínimo {{count}} caracteres",
860861
"field_required": "Este campo es obligatorio",
862+
"remote": "Remoto",
863+
"default": "Predeterminado",
861864
"try_again_later": "Por favor intente de nuevo más tarde",
862865
"loading_attributes": "Cargando atributos",
863866
"error_processiong_request": "Error al procesar la solicitud.",
@@ -881,9 +884,13 @@
881884
"mapping_added_successfully": "Mapeo agregado correctamente",
882885
"error_adding_mapping": "Error al agregar el mapeo",
883886
"error_loading_mapping": "Error al cargar los mapeos de roles y permisos",
887+
"no_role_mappings_found": "No se encontraron mapeos de roles",
884888
"permissions_count_one": "{{count}} permiso",
885889
"permissions_count_other": "{{count}} permisos",
890+
"permissions_count": "{{count, plural, one {{count}} permiso} other {{count}} permisos}}",
886891
"no_permissions_assigned": "No hay permisos asignados",
892+
"out_of": "de",
893+
"permission_label": "Permiso",
887894
"see_configurations": "Ver Configuración",
888895
"manage_configurations": "Gestionar Configuraciones",
889896
"fetching_project_details": "Obteniendo detalles del proyecto...",
@@ -1871,9 +1878,16 @@
18711878
"point3": "3. Realizar las modificaciones necesarias en las políticas para el control de acceso de la Admin UI y guardar los cambios.",
18721879
"point4": "4. Asegúrese de que el nombre de host del Endpoint de Configuración de OpenID coincida con el nombre de host de su Proveedor OpenID.",
18731880
"point5": "5. Copiar la URL del Almacén de Políticas.",
1874-
"point6": "6. Abra la pantalla de configuración del Almacén de Políticas de Cedarling en la Admin UI y agregue la URL del Almacén de Políticas copiada en el campo Almacén de Políticas Remoto de la Admin UI. Configure el campo Punto de Recuperación de Políticas como Remoto para usar la URL del Almacén de Políticas remoto para el control de acceso de la interfaz gráfica.",
1881+
"point6": "6. Abra la pantalla de configuración del Almacén de Políticas de Cedarling en la Admin UI y agregue la URL del Almacén de Políticas copiada en el campo Almacén de Políticas Remoto de la Admin UI. Configure el campo Punto de Recuperación de Políticas como Remoto para usar la URL del Almacén de Políticas remoto para el control de acceso de la Admin UI.",
18751882
"useRemotePolicyStore": "Se recomienda establecerlo en Predeterminado para producción. Si se establece en Predeterminado, utilizará el almacenamiento de la interfaz de administración para la autorización de Cedarling. Active el modo Predeterminado y utilice el botón de actualización para guardar o actualizar las políticas de GitHub en el servidor de la interfaz de administración.",
1876-
"updateRemotePolicyStoreOnServer": "Haga clic aquí para actualizar el JSON del almacén de políticas predeterminado con la versión disponible en la URL remota configurada."
1883+
"updateRemotePolicyStoreOnServer": "Haga clic aquí para actualizar el JSON del almacén de políticas predeterminado con la versión disponible en la URL remota configurada.",
1884+
"policyUrlDisabledWhenDefault": "La URL de la política está deshabilitada cuando se selecciona Predeterminado.",
1885+
"policyStoreUrlInvalidError": "La URL del almacén de políticas debe ser una URL HTTP o HTTPS válida.",
1886+
"agamaLabPolicyDesigner": "Diseñador de políticas de Agama Lab",
1887+
"gluuFlexAdminUiPolicyStoreDisplay": "Almacén de políticas de la interfaz de administración de Gluu Flex",
1888+
"auditPolicyStoreUrlUpdated": "Configuración de la URL del almacén de políticas actualizada",
1889+
"auditSyncRoleToScopesMappings": "Sincronizar rol con asignaciones de ámbitos",
1890+
"auditSetPolicyStoreAsDefault": "Establecer almacén de políticas predeterminado"
18771891
},
18781892
"mappings": {
18791893
"note_prefix": "Configurar",

admin-ui/app/locales/fr/translation.json

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -707,6 +707,8 @@
707707
"partial_update_failure": "Certaines configurations n'ont pas pu être mises à jour. Veuillez vérifier et réessayer.",
708708
"min_characters": "Minimum {{count}} caractères",
709709
"field_required": "Ce champ est obligatoire",
710+
"remote": "Distant",
711+
"default": "Par défaut",
710712
"credentials": "Credentials",
711713
"view_configuration": "Afficher la configuration",
712714
"new_role": "Nouveau rôle",
@@ -766,6 +768,7 @@
766768
"invalid_json_error": "Valeur JSON invalide.",
767769
"invalid_url_error": "URL invalide ou URL non autorisée.",
768770
"action_commit_question": "Journal d'audit : vous souhaitez appliquer les modifications apportées sur cette page ?",
771+
"action_commit_question_title": "Confirmer les modifications",
769772
"licenseAuditLog": "Voulez-vous vraiment réinitialiser la licence existante ?",
770773
"action_deletion_question": "Voulez-vous vraiment supprimer cet élément ?",
771774
"action_deletion_for": "Confirmation de suppression pour",
@@ -815,9 +818,13 @@
815818
"mapping_added_successfully": "Mappage ajouté avec succès",
816819
"error_adding_mapping": "Échec de l'ajout du mappage",
817820
"error_loading_mapping": "Échec du chargement des mappages rôle-permission",
821+
"no_role_mappings_found": "Aucun mappage de rôles trouvé",
818822
"permissions_count_one": "{{count}} permission",
819823
"permissions_count_other": "{{count}} permissions",
824+
"permissions_count": "{{count, plural, one {{count}} permission} other {{count}} permissions}}",
820825
"no_permissions_assigned": "Aucune permission attribuée",
826+
"out_of": "sur",
827+
"permission_label": "Permission",
821828
"see_configurations": "Voir configuration",
822829
"manage_configurations": "Gérer les configurations",
823830
"fetching_project_details": "Récupération des détails du projet...",
@@ -1732,9 +1739,16 @@
17321739
"point3": "3. Effectuer les modifications nécessaires dans les politiques pour le contrôle d’accès de l’Admin UI et enregistrer les changements.",
17331740
"point4": "4. Assurez-vous que le nom d’hôte du point de terminaison de configuration OpenID correspond au nom d’hôte de votre fournisseur OpenID.",
17341741
"point5": "5. Copier l’URL du magasin de politiques.",
1735-
"point6": "6. Ouvrez l’écran de configuration du magasin de politiques Cedarling dans l’Admin UI et ajoutez l’URL du magasin de politiques copiée dans le champ Magasin de politiques distant de l’Admin UI. Définissez le champ Point de récupération des politiques sur Distant afin d’utiliser l’URL du magasin de politiques distant pour le contrôle d’accès de l’interface graphique.",
1742+
"point6": "6. Ouvrez l’écran de configuration du magasin de politiques Cedarling dans l’Admin UI et ajoutez l’URL du magasin de politiques copiée dans le champ Magasin de politiques distant de l’Admin UI. Définissez le champ Point de récupération des politiques sur Distant afin d’utiliser l’URL du magasin de politiques distant pour le contrôle d’accès de l’Admin UI.",
17361743
"useRemotePolicyStore": "Il est recommandé de définir cette option sur « Par défaut » en production. Si cette option est définie, le stockage de l’interface d’administration sera utilisé pour l’autorisation Cedarling. Activez le mode « Par défaut » et utilisez le bouton d’actualisation pour enregistrer ou mettre à jour les politiques GitHub sur le serveur de l’interface d’administration.",
1737-
"updateRemotePolicyStoreOnServer": "Cliquez ici pour mettre à jour le fichier JSON du magasin de politiques par défaut avec la version disponible à partir de l'URL distante configurée."
1744+
"updateRemotePolicyStoreOnServer": "Cliquez ici pour mettre à jour le fichier JSON du magasin de politiques par défaut avec la version disponible à partir de l'URL distante configurée.",
1745+
"policyUrlDisabledWhenDefault": "L'URL de la stratégie est désactivée lorsque Par défaut est sélectionné.",
1746+
"policyStoreUrlInvalidError": "L'URL du magasin de politiques doit être une URL HTTP ou HTTPS valide.",
1747+
"agamaLabPolicyDesigner": "Concepteur de stratégies Agama Lab",
1748+
"gluuFlexAdminUiPolicyStoreDisplay": "Gluu Flex Admin UI Policy Store",
1749+
"auditPolicyStoreUrlUpdated": "Configuration de l'URL du magasin de politiques mise à jour",
1750+
"auditSyncRoleToScopesMappings": "Synchroniser les rôles avec les mappages de portées",
1751+
"auditSetPolicyStoreAsDefault": "Définir le magasin de politiques par défaut"
17381752
},
17391753
"mappings": {
17401754
"note_prefix": "Configure",

0 commit comments

Comments
 (0)