From 037bff9aa3edecbe39c614e45151c82d21273965 Mon Sep 17 00:00:00 2001 From: Ibrahim Serdar Acikgoz Date: Fri, 27 Jun 2025 09:37:58 +0200 Subject: [PATCH] [MM-64491] Fix system attributes section not appearting w/o a license (#32133) --- .../admin_console/admin_definition.tsx | 29 +++++++++++++-- .../features/user_attributes.tsx | 37 +++++++++++++++++++ webapp/channels/src/i18n/en.json | 2 + 3 files changed, 64 insertions(+), 4 deletions(-) create mode 100644 webapp/channels/src/components/admin_console/feature_discovery/features/user_attributes.tsx diff --git a/webapp/channels/src/components/admin_console/admin_definition.tsx b/webapp/channels/src/components/admin_console/admin_definition.tsx index 42b717e8d9..9e00a025f8 100644 --- a/webapp/channels/src/components/admin_console/admin_definition.tsx +++ b/webapp/channels/src/components/admin_console/admin_definition.tsx @@ -83,6 +83,7 @@ import { SystemRolesFeatureDiscovery, } from './feature_discovery/features'; import AttributeBasedAccessControlFeatureDiscovery from './feature_discovery/features/attribute_based_access_control'; +import UserAttributesFeatureDiscovery from './feature_discovery/features/user_attributes'; import FeatureFlags, {messages as featureFlagsMessages} from './feature_flags'; import GroupDetails from './group_settings/group_details'; import GroupSettings from './group_settings/group_settings'; @@ -584,10 +585,7 @@ const AdminDefinition: AdminDefinitionType = { /> ), sectionTitle: defineMessage({id: 'admin.sidebar.systemAttributes', defaultMessage: 'System Attributes'}), - isHidden: it.not(it.all( - it.minLicenseTier(LicenseSkus.Enterprise), - it.configIsTrue('FeatureFlags', 'CustomProfileAttributes'), - )), + isHidden: it.not(it.userHasReadPermissionOnSomeResources(RESOURCE_KEYS.USER_MANAGEMENT)), subsections: { system_properties: { url: 'system_attributes/user_attributes', @@ -602,6 +600,29 @@ const AdminDefinition: AdminDefinitionType = { component: SystemProperties, }, }, + user_attributes_feature_discovery: { + url: 'system_attributes/user_attributes', + isDiscovery: true, + title: defineMessage({id: 'admin.sidebar.user_attributes', defaultMessage: 'User Attributes'}), + isHidden: it.any( + it.minLicenseTier(LicenseSkus.Enterprise), + it.not(it.enterpriseReady), + it.configIsFalse('FeatureFlags', 'CustomProfileAttributes'), + ), + schema: { + id: 'SystemProperties', + name: defineMessage({id: 'admin.sidebar.user_attributes', defaultMessage: 'User Attributes'}), + settings: [ + { + type: 'custom', + component: UserAttributesFeatureDiscovery, + key: 'UserAttributesFeatureDiscovery', + isDisabled: it.not(it.userHasWritePermissionOnResource(RESOURCE_KEYS.ABOUT.EDITION_AND_LICENSE)), + }, + ], + }, + restrictedIndicator: getRestrictedIndicator(true, LicenseSkus.EnterpriseAdvanced), + }, access_control_policy_details_edit: { url: `system_attributes/attribute_based_access_control/edit_policy/:policy_id(${ID_PATH_PATTERN})`, isHidden: it.any( diff --git a/webapp/channels/src/components/admin_console/feature_discovery/features/user_attributes.tsx b/webapp/channels/src/components/admin_console/feature_discovery/features/user_attributes.tsx new file mode 100644 index 0000000000..3f00b259d8 --- /dev/null +++ b/webapp/channels/src/components/admin_console/feature_discovery/features/user_attributes.tsx @@ -0,0 +1,37 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import React from 'react'; +import {defineMessage} from 'react-intl'; + +import {LicenseSkus} from 'utils/constants'; + +import GroupsSVG from './images/groups_svg'; + +import FeatureDiscovery from '../index'; + +const UserAttributesFeatureDiscovery: React.FC = () => { + return ( + + } + /> + ); +}; + +export default UserAttributesFeatureDiscovery; diff --git a/webapp/channels/src/i18n/en.json b/webapp/channels/src/i18n/en.json index f15cdf6f1c..a6d3dd7161 100644 --- a/webapp/channels/src/i18n/en.json +++ b/webapp/channels/src/i18n/en.json @@ -3079,6 +3079,8 @@ "admin.teamSettings.teamDetail.teamName": "Team Name:", "admin.trial_banner.trial-request.error": "Trial license could not be retrieved. Visit {trialInfoLink} to request a license.", "admin.true": "True", + "admin.user_attributes_feature_discovery.desc": "Define and manage organization-specific user profile attributes as that can synchronize with your AD/LDAP or SAML identity provider.", + "admin.user_attributes_feature_discovery.title": "Add critical metadata to user profiles using custom user attributes with Mattermost Enterprise", "admin.user_grid.channel_admin": "Channel Admin", "admin.user_grid.guest": "Guest", "admin.user_grid.name": "Name",