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",