diff --git a/packages/console/src/consts/page-tabs.ts b/packages/console/src/consts/page-tabs.ts
index 6bce50ab6bb..55dca2099e2 100644
--- a/packages/console/src/consts/page-tabs.ts
+++ b/packages/console/src/consts/page-tabs.ts
@@ -4,6 +4,7 @@ export enum ApplicationDetailsTabs {
Logs = 'logs',
Branding = 'branding',
Permissions = 'permissions',
+ Rules = 'rules',
Organizations = 'organizations',
AttributeMapping = 'attribute-mapping',
}
diff --git a/packages/console/src/pages/ApplicationDetails/ApplicationDetailsContent/ApplicationAccessControl/index.module.scss b/packages/console/src/pages/ApplicationDetails/ApplicationDetailsContent/ApplicationAccessControl/index.module.scss
new file mode 100644
index 00000000000..7585f88d08c
--- /dev/null
+++ b/packages/console/src/pages/ApplicationDetails/ApplicationDetailsContent/ApplicationAccessControl/index.module.scss
@@ -0,0 +1,68 @@
+@use '@/scss/underscore' as _;
+
+.notification {
+ margin-block-start: _.unit(3);
+}
+
+.loading {
+ display: flex;
+ justify-content: center;
+ padding: _.unit(6) 0;
+ color: var(--color-primary-50);
+}
+
+.ruleRows {
+ display: flex;
+ flex-direction: column;
+ gap: _.unit(3);
+ margin-block-start: _.unit(5);
+}
+
+.ruleRowsHeader {
+ display: flex;
+ flex-direction: column;
+ gap: _.unit(1);
+}
+
+.ruleRowsTitle {
+ font: var(--font-title-3);
+ color: var(--color-text);
+}
+
+.ruleRowsDescription {
+ font: var(--font-body-2);
+ color: var(--color-text-secondary);
+}
+
+.ruleRow {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: _.unit(4);
+ padding: _.unit(4);
+ border: 1px solid var(--color-divider);
+ border-radius: 8px;
+}
+
+.ruleContent {
+ display: flex;
+ flex-direction: column;
+ min-width: 0;
+ gap: _.unit(1);
+}
+
+.ruleTitle {
+ font: var(--font-body-1);
+ color: var(--color-text);
+}
+
+.ruleDescription {
+ font: var(--font-body-2);
+ color: var(--color-text-secondary);
+}
+
+.ruleCount {
+ flex-shrink: 0;
+ font: var(--font-label-2);
+ color: var(--color-text-secondary);
+}
diff --git a/packages/console/src/pages/ApplicationDetails/ApplicationDetailsContent/ApplicationAccessControl/index.tsx b/packages/console/src/pages/ApplicationDetails/ApplicationDetailsContent/ApplicationAccessControl/index.tsx
new file mode 100644
index 00000000000..6391411fb68
--- /dev/null
+++ b/packages/console/src/pages/ApplicationDetails/ApplicationDetailsContent/ApplicationAccessControl/index.tsx
@@ -0,0 +1,186 @@
+import {
+ type ApplicationAccessControl as ApplicationAccessControlRules,
+ type ApplicationResponse,
+} from '@logto/schemas';
+import { useEffect, useState } from 'react';
+import { toast } from 'react-hot-toast';
+import { useTranslation } from 'react-i18next';
+import useSWR from 'swr';
+
+import FormCard from '@/components/FormCard';
+import FormField from '@/ds-components/FormField';
+import InlineNotification from '@/ds-components/InlineNotification';
+import { Ring } from '@/ds-components/Spinner';
+import Switch from '@/ds-components/Switch';
+import useApi, { type RequestError } from '@/hooks/use-api';
+
+import styles from './index.module.scss';
+import { getOrganizationRoleRuleCount, hasApplicationAccessControlRules } from './utils';
+
+type RuleRowProps = {
+ readonly title: string;
+ readonly description: string;
+ readonly count: number;
+};
+
+function RuleRow({ title, description, count }: RuleRowProps) {
+ const { t } = useTranslation(undefined, { keyPrefix: 'admin_console' });
+
+ return (
+
+
+
{title}
+
{description}
+
+
+ {t('application_details.access_control.rule_count', { count })}
+
+
+ );
+}
+
+type Props = {
+ readonly application: ApplicationResponse;
+ readonly isActive: boolean;
+ readonly onApplicationUpdated: () => void;
+};
+
+function ApplicationAccessControl({ application, isActive, onApplicationUpdated }: Props) {
+ const { id, appLevelAccessControlEnabled } = application;
+ const { t } = useTranslation(undefined, { keyPrefix: 'admin_console' });
+ const api = useApi();
+ const [isEnabled, setIsEnabled] = useState(appLevelAccessControlEnabled);
+ const [isUpdatingEnabled, setIsUpdatingEnabled] = useState(false);
+
+ const {
+ data: accessControl,
+ error,
+ isLoading,
+ mutate,
+ } = useSWR(
+ isActive && `api/applications/${id}/access-control`
+ );
+
+ useEffect(() => {
+ setIsEnabled(appLevelAccessControlEnabled);
+ }, [appLevelAccessControlEnabled]);
+
+ const hasAccessControlRules = accessControl && hasApplicationAccessControlRules(accessControl);
+ const isEnableBlocked = !isEnabled && !hasAccessControlRules;
+
+ const onEnabledChange = async (enabled: boolean) => {
+ if (isUpdatingEnabled) {
+ return;
+ }
+
+ if (enabled && !hasAccessControlRules) {
+ toast.error(t('application_details.access_control.enable_without_rules_notice'));
+ return;
+ }
+
+ setIsEnabled(enabled);
+ setIsUpdatingEnabled(true);
+
+ try {
+ await api
+ .patch(`api/applications/${id}`, {
+ json: { appLevelAccessControlEnabled: enabled },
+ })
+ .json();
+ onApplicationUpdated();
+ toast.success(t('general.saved'));
+ } catch {
+ setIsEnabled(appLevelAccessControlEnabled);
+ // The global API error handler has already surfaced the error.
+ } finally {
+ setIsUpdatingEnabled(false);
+ }
+ };
+
+ return (
+
+
+ {
+ void onEnabledChange(checked);
+ }}
+ />
+
+ {!isEnabled && accessControl && !hasAccessControlRules && (
+
+ {t('application_details.access_control.enable_without_rules_notice')}
+
+ )}
+
+ {t(
+ isEnabled
+ ? 'application_details.access_control.enabled_notice'
+ : 'application_details.access_control.disabled_notice'
+ )}
+
+ {isLoading && (
+
+
+
+ )}
+ {error && (
+ {
+ void mutate();
+ }}
+ >
+ {t('application_details.access_control.load_error')}
+
+ )}
+ {accessControl && (
+
+
+
+ {t('application_details.access_control.rules')}
+
+
+ {t(
+ hasApplicationAccessControlRules(accessControl)
+ ? 'application_details.access_control.rules_description'
+ : 'application_details.access_control.empty_rules_description'
+ )}
+
+
+
+
+
+
+
+ )}
+
+ );
+}
+
+export default ApplicationAccessControl;
diff --git a/packages/console/src/pages/ApplicationDetails/ApplicationDetailsContent/ApplicationAccessControl/utils.test.ts b/packages/console/src/pages/ApplicationDetails/ApplicationDetailsContent/ApplicationAccessControl/utils.test.ts
new file mode 100644
index 00000000000..20701c93314
--- /dev/null
+++ b/packages/console/src/pages/ApplicationDetails/ApplicationDetailsContent/ApplicationAccessControl/utils.test.ts
@@ -0,0 +1,33 @@
+import { createDefaultApplicationAccessControl } from '@logto/schemas';
+
+import { getOrganizationRoleRuleCount, hasApplicationAccessControlRules } from './utils';
+
+describe('application access control utils', () => {
+ it('counts organization role rules by role assignment', () => {
+ expect(
+ getOrganizationRoleRuleCount({
+ ...createDefaultApplicationAccessControl(),
+ organizationRoleRules: [
+ {
+ organizationId: 'organization_1',
+ organizationRoleIds: ['role_1', 'role_2'],
+ },
+ {
+ organizationId: 'organization_2',
+ organizationRoleIds: ['role_3'],
+ },
+ ],
+ })
+ ).toBe(3);
+ });
+
+ it('detects any configured access control rule', () => {
+ expect(hasApplicationAccessControlRules(createDefaultApplicationAccessControl())).toBe(false);
+ expect(
+ hasApplicationAccessControlRules({
+ ...createDefaultApplicationAccessControl(),
+ organizationIds: ['organization_1'],
+ })
+ ).toBe(true);
+ });
+});
diff --git a/packages/console/src/pages/ApplicationDetails/ApplicationDetailsContent/ApplicationAccessControl/utils.ts b/packages/console/src/pages/ApplicationDetails/ApplicationDetailsContent/ApplicationAccessControl/utils.ts
new file mode 100644
index 00000000000..c5f1632656c
--- /dev/null
+++ b/packages/console/src/pages/ApplicationDetails/ApplicationDetailsContent/ApplicationAccessControl/utils.ts
@@ -0,0 +1,19 @@
+import type { ApplicationAccessControl } from '@logto/schemas';
+
+export const getOrganizationRoleRuleCount = ({ organizationRoleRules }: ApplicationAccessControl) =>
+ organizationRoleRules.reduce(
+ (count, { organizationRoleIds }) => count + organizationRoleIds.length,
+ 0
+ );
+
+export const hasApplicationAccessControlRules = ({
+ userIds,
+ userRoleIds,
+ organizationIds,
+ organizationRoleRules,
+}: ApplicationAccessControl) =>
+ userIds.length > 0 ||
+ userRoleIds.length > 0 ||
+ organizationIds.length > 0 ||
+ getOrganizationRoleRuleCount({ userIds, userRoleIds, organizationIds, organizationRoleRules }) >
+ 0;
diff --git a/packages/console/src/pages/ApplicationDetails/ApplicationDetailsContent/MachineToMachineTabs.tsx b/packages/console/src/pages/ApplicationDetails/ApplicationDetailsContent/MachineToMachineTabs.tsx
new file mode 100644
index 00000000000..94d5ed4ceae
--- /dev/null
+++ b/packages/console/src/pages/ApplicationDetails/ApplicationDetailsContent/MachineToMachineTabs.tsx
@@ -0,0 +1,58 @@
+import { type ApplicationResponse } from '@logto/schemas';
+import { Trans } from 'react-i18next';
+
+import EmptyDataPlaceholder from '@/components/EmptyDataPlaceholder';
+import OrganizationList from '@/components/OrganizationList';
+import { ApplicationDetailsTabs } from '@/consts';
+import TabWrapper from '@/ds-components/TabWrapper';
+import TextLink from '@/ds-components/TextLink';
+import { organizations } from '@/hooks/use-console-routes/routes/organizations';
+
+import MachineLogs from './MachineLogs';
+import MachineToMachineApplicationRoles from './MachineToMachineApplicationRoles';
+import styles from './index.module.scss';
+
+type Props = {
+ readonly application: ApplicationResponse;
+ readonly activeTab?: string;
+};
+
+function MachineToMachineTabs({ application, activeTab }: Props) {
+ return (
+ <>
+
+
+
+
+
+
+
+ }}
+ />
+ }
+ />
+ }
+ />
+
+ >
+ );
+}
+
+export default MachineToMachineTabs;
diff --git a/packages/console/src/pages/ApplicationDetails/ApplicationDetailsContent/index.tsx b/packages/console/src/pages/ApplicationDetails/ApplicationDetailsContent/index.tsx
index 5b0c09b67e8..beac25da23c 100644
--- a/packages/console/src/pages/ApplicationDetails/ApplicationDetailsContent/index.tsx
+++ b/packages/console/src/pages/ApplicationDetails/ApplicationDetailsContent/index.tsx
@@ -16,16 +16,13 @@ import ApplicationIcon from '@/components/ApplicationIcon';
import DetailsForm from '@/components/DetailsForm';
import DetailsPageHeader from '@/components/DetailsPage/DetailsPageHeader';
import Drawer from '@/components/Drawer';
-import EmptyDataPlaceholder from '@/components/EmptyDataPlaceholder';
-import OrganizationList from '@/components/OrganizationList';
import UnsavedChangesAlertModal from '@/components/UnsavedChangesAlertModal';
import { ApplicationDetailsTabs, logtoThirdPartyGuideLink, protectedApp } from '@/consts';
+import { isDevFeaturesEnabled } from '@/consts/env';
import DeleteConfirmModal from '@/ds-components/DeleteConfirmModal';
import TabNav, { TabNavItem } from '@/ds-components/TabNav';
import TabWrapper from '@/ds-components/TabWrapper';
-import TextLink from '@/ds-components/TextLink';
import useApi from '@/hooks/use-api';
-import { organizations } from '@/hooks/use-console-routes/routes/organizations';
import useDocumentationUrl from '@/hooks/use-documentation-url';
import useTenantPathname from '@/hooks/use-tenant-pathname';
import { applicationTypeI18nKey } from '@/types/applications';
@@ -34,12 +31,12 @@ import { trySubmitSafe } from '@/utils/form';
import Branding from '../components/Branding';
import Permissions from '../components/Permissions';
+import ApplicationAccessControl from './ApplicationAccessControl';
import BackchannelLogout from './BackchannelLogout';
import ConcurrentDeviceLimit from './ConcurrentDeviceLimit';
import EndpointsAndCredentials, { type ApplicationSecretRow } from './EndpointsAndCredentials';
import GuideDrawer from './GuideDrawer';
-import MachineLogs from './MachineLogs';
-import MachineToMachineApplicationRoles from './MachineToMachineApplicationRoles';
+import MachineToMachineTabs from './MachineToMachineTabs';
import RefreshTokenSettings from './RefreshTokenSettings';
import Settings from './Settings';
import TokenExchangeSettings from './TokenExchangeSettings';
@@ -81,6 +78,7 @@ function ApplicationDetailsContent({ data, secrets, oidcConfig, onApplicationUpd
ApplicationType.Traditional,
ApplicationType.Protected,
].includes(data.type);
+ const hasRules = isDevFeaturesEnabled && data.type !== ApplicationType.MachineToMachine;
const onSubmit = handleSubmit(
trySubmitSafe(async (formData) => {
@@ -214,6 +212,11 @@ function ApplicationDetailsContent({ data, secrets, oidcConfig, onApplicationUpd
{t('application_details.branding.name')}
)}
+ {hasRules && (
+
+ {t('application_details.access_control.name')}
+
+ )}
- {/* Protected apps will reference this section in component */}
{data.type !== ApplicationType.Protected && (
{data.type === ApplicationType.MachineToMachine && (
- <>
-
-
-
-
-
-
-
- }}
- />
- }
- />
- }
- />
-
- >
+
)}
{data.isThirdParty && (
@@ -301,6 +271,15 @@ function ApplicationDetailsContent({ data, secrets, oidcConfig, onApplicationUpd
)}
+ {hasRules && (
+
+
+
+ )}
>
);
}
diff --git a/packages/phrases/src/locales/ar/translation/admin-console/application-details.ts b/packages/phrases/src/locales/ar/translation/admin-console/application-details.ts
index 2f928f844c0..b37fc48f96e 100644
--- a/packages/phrases/src/locales/ar/translation/admin-console/application-details.ts
+++ b/packages/phrases/src/locales/ar/translation/admin-console/application-details.ts
@@ -120,6 +120,37 @@ const application_details = {
field_custom_data_tip:
'معلومات تطبيق مخصصة إضافية غير مدرجة في خصائص التطبيق المحددة مسبقًا ، مثل الإعدادات والتكوينات الخاصة بالأعمال.',
custom_data_invalid: 'يجب أن تكون البيانات المخصصة كائن JSON صالح',
+ access_control: {
+ name: 'القواعد',
+ title: 'التحكم في الوصول على مستوى التطبيق',
+ description:
+ 'قيّد المستخدمين الذين يمكنهم تسجيل الدخول إلى هذا التطبيق عن طريق تكوين قواعد الوصول.',
+ enable: 'تمكين التحكم في الوصول',
+ enable_description:
+ 'يمكن فقط للمستخدمين المطابقين لقاعدة مكونة واحدة على الأقل الوصول إلى هذا التطبيق.',
+ enable_without_rules_notice: 'أضف قاعدة وصول واحدة على الأقل قبل تمكين التحكم في الوصول.',
+ enabled_notice:
+ 'التحكم في الوصول مفعّل. يمكن فقط للمستخدمين المطابقين لقاعدة واحدة على الأقل الوصول إلى هذا التطبيق.',
+ disabled_notice:
+ 'التحكم في الوصول متوقف. يمكن لجميع المستخدمين المسجلين الوصول إلى هذا التطبيق.',
+ load_error: 'فشل تحميل قواعد التحكم في الوصول.',
+ rules: 'قواعد الوصول',
+ rules_description: 'يمكن للمستخدمين الوصول إلى هذا التطبيق عند مطابقة أي قاعدة مكونة.',
+ empty_rules_description: 'لم يتم تكوين أي قواعد بعد.',
+ rule_count: '{{count}} قاعدة',
+ rule_count_other: '{{count}} قواعد',
+ rule_users: 'المستخدمون',
+ rule_users_description: 'يمكن لمستخدمين محددين الوصول إلى هذا التطبيق.',
+ rule_user_roles: 'أدوار المستخدمين',
+ rule_user_roles_description:
+ 'يمكن للمستخدمين المعينين لأدوار المستخدم المحددة الوصول إلى هذا التطبيق.',
+ rule_organizations: 'المؤسسات',
+ rule_organizations_description:
+ 'يمكن لجميع الأعضاء الحاليين والمستقبليين في المؤسسات المحددة الوصول إلى هذا التطبيق.',
+ rule_organization_roles: 'أدوار المؤسسة',
+ rule_organization_roles_description:
+ 'يمكن للأعضاء الذين لديهم أدوار المؤسسة المحددة في المؤسسات المحددة الوصول إلى هذا التطبيق.',
+ },
branding: {
name: 'العلامة التجارية',
description: 'قم بتخصيص شعار التطبيق ولون العلامة التجارية لتجربة المستوى التطبيق.',
diff --git a/packages/phrases/src/locales/de/translation/admin-console/application-details.ts b/packages/phrases/src/locales/de/translation/admin-console/application-details.ts
index 09954ffcdcb..e70ba944c19 100644
--- a/packages/phrases/src/locales/de/translation/admin-console/application-details.ts
+++ b/packages/phrases/src/locales/de/translation/admin-console/application-details.ts
@@ -123,6 +123,39 @@ const application_details = {
field_custom_data_tip:
'Zusätzliche benutzerdefinierte Anwendungsinformationen, die nicht in den vordefinierten Anwendungseigenschaften aufgeführt sind, wie z. B. geschäftsspezifische Einstellungen und Konfigurationen.',
custom_data_invalid: 'Benutzerdefinierte Daten müssen ein gültiges JSON-Objekt sein',
+ access_control: {
+ name: 'Regeln',
+ title: 'App-level Zugriffskontrolle',
+ description:
+ 'Schränken Sie ein, welche Benutzer sich bei dieser Anwendung anmelden können, indem Sie Zugriffsregeln konfigurieren.',
+ enable: 'Zugriffskontrolle aktivieren',
+ enable_description:
+ 'Nur Benutzer, die mindestens einer konfigurierten Regel entsprechen, können auf diese App zugreifen.',
+ enable_without_rules_notice:
+ 'Fügen Sie mindestens eine Zugriffsregel hinzu, bevor Sie die Zugriffskontrolle aktivieren.',
+ enabled_notice:
+ 'Die Zugriffskontrolle ist aktiviert. Nur Benutzer, die mindestens einer Regel entsprechen, können auf diese App zugreifen.',
+ disabled_notice:
+ 'Die Zugriffskontrolle ist deaktiviert. Alle registrierten Benutzer können auf diese App zugreifen.',
+ load_error: 'Zugriffsregeln konnten nicht geladen werden.',
+ rules: 'Zugriffsregeln',
+ rules_description:
+ 'Benutzer können auf diese App zugreifen, wenn sie einer der konfigurierten Regeln entsprechen.',
+ empty_rules_description: 'Es sind noch keine Regeln konfiguriert.',
+ rule_count: '{{count}} Regel',
+ rule_count_other: '{{count}} Regeln',
+ rule_users: 'Benutzer',
+ rule_users_description: 'Bestimmte Benutzer können auf diese App zugreifen.',
+ rule_user_roles: 'Benutzerrollen',
+ rule_user_roles_description:
+ 'Benutzer mit ausgewählten Benutzerrollen können auf diese App zugreifen.',
+ rule_organizations: 'Organisationen',
+ rule_organizations_description:
+ 'Alle aktuellen und zukünftigen Mitglieder der ausgewählten Organisationen können auf diese App zugreifen.',
+ rule_organization_roles: 'Organisationsrollen',
+ rule_organization_roles_description:
+ 'Mitglieder mit ausgewählten Organisationsrollen in ausgewählten Organisationen können auf diese App zugreifen.',
+ },
branding: {
name: 'Branding',
description:
diff --git a/packages/phrases/src/locales/en/translation/admin-console/application-details.ts b/packages/phrases/src/locales/en/translation/admin-console/application-details.ts
index b44228cd8f8..5d0f6b71afd 100644
--- a/packages/phrases/src/locales/en/translation/admin-console/application-details.ts
+++ b/packages/phrases/src/locales/en/translation/admin-console/application-details.ts
@@ -120,6 +120,34 @@ const application_details = {
field_custom_data_tip:
'Additional custom application info not listed in the pre-defined application properties, such as business-specific settings and configurations.',
custom_data_invalid: 'Custom data must be a valid JSON object',
+ access_control: {
+ name: 'Rules',
+ title: 'App-level access control',
+ description:
+ 'Restrict which users can sign in to this application by configuring access rules.',
+ enable: 'Enable access control',
+ enable_description: 'Only users who match at least one configured rule can access this app.',
+ enable_without_rules_notice: 'Add at least one access rule before enabling access control.',
+ enabled_notice:
+ 'Access control is on. Only users who match at least one rule can access this app.',
+ disabled_notice: 'Access control is off. All registered users can access this app.',
+ load_error: 'Failed to load access control rules.',
+ rules: 'Access rules',
+ rules_description: 'Users can access this app when they match any one of the configured rules.',
+ empty_rules_description: 'No rules are configured yet.',
+ rule_count: '{{count}} rule',
+ rule_count_other: '{{count}} rules',
+ rule_users: 'Users',
+ rule_users_description: 'Specific users can access this app.',
+ rule_user_roles: 'User roles',
+ rule_user_roles_description: 'Users assigned to selected user roles can access this app.',
+ rule_organizations: 'Organizations',
+ rule_organizations_description:
+ 'All current and future members of selected organizations can access this app.',
+ rule_organization_roles: 'Organization roles',
+ rule_organization_roles_description:
+ 'Members with selected organization roles in selected organizations can access this app.',
+ },
branding: {
name: 'Branding',
description: 'Customize your app logo and branding color for the app-level experience.',
diff --git a/packages/phrases/src/locales/es/translation/admin-console/application-details.ts b/packages/phrases/src/locales/es/translation/admin-console/application-details.ts
index a2e8a027802..5568600d524 100644
--- a/packages/phrases/src/locales/es/translation/admin-console/application-details.ts
+++ b/packages/phrases/src/locales/es/translation/admin-console/application-details.ts
@@ -122,6 +122,39 @@ const application_details = {
field_custom_data_tip:
'Información personalizada adicional de la aplicación no listada en las propiedades predefinidas de la aplicación, como configuraciones específicas del negocio.',
custom_data_invalid: 'Los datos personalizados deben ser un objeto JSON válido',
+ access_control: {
+ name: 'Reglas',
+ title: 'Control de acceso a nivel de aplicación',
+ description:
+ 'Restringe qué usuarios pueden iniciar sesión en esta aplicación configurando reglas de acceso.',
+ enable: 'Habilitar control de acceso',
+ enable_description:
+ 'Solo los usuarios que coincidan con al menos una regla configurada pueden acceder a esta aplicación.',
+ enable_without_rules_notice:
+ 'Agrega al menos una regla de acceso antes de habilitar el control de acceso.',
+ enabled_notice:
+ 'El control de acceso está activado. Solo los usuarios que coincidan con al menos una regla pueden acceder a esta aplicación.',
+ disabled_notice:
+ 'El control de acceso está desactivado. Todos los usuarios registrados pueden acceder a esta aplicación.',
+ load_error: 'No se pudieron cargar las reglas de control de acceso.',
+ rules: 'Reglas de acceso',
+ rules_description:
+ 'Los usuarios pueden acceder a esta aplicación cuando coinciden con cualquiera de las reglas configuradas.',
+ empty_rules_description: 'Aún no hay reglas configuradas.',
+ rule_count: '{{count}} regla',
+ rule_count_other: '{{count}} reglas',
+ rule_users: 'Usuarios',
+ rule_users_description: 'Usuarios específicos pueden acceder a esta aplicación.',
+ rule_user_roles: 'Roles de usuario',
+ rule_user_roles_description:
+ 'Los usuarios asignados a los roles de usuario seleccionados pueden acceder a esta aplicación.',
+ rule_organizations: 'Organizaciones',
+ rule_organizations_description:
+ 'Todos los miembros actuales y futuros de las organizaciones seleccionadas pueden acceder a esta aplicación.',
+ rule_organization_roles: 'Roles de organización',
+ rule_organization_roles_description:
+ 'Los miembros con los roles de organización seleccionados en las organizaciones seleccionadas pueden acceder a esta aplicación.',
+ },
branding: {
name: 'Marca',
description:
diff --git a/packages/phrases/src/locales/fr/translation/admin-console/application-details.ts b/packages/phrases/src/locales/fr/translation/admin-console/application-details.ts
index 1a40920b290..031592752f4 100644
--- a/packages/phrases/src/locales/fr/translation/admin-console/application-details.ts
+++ b/packages/phrases/src/locales/fr/translation/admin-console/application-details.ts
@@ -121,6 +121,39 @@ const application_details = {
field_custom_data_tip:
'Informations supplémentaires personnalisées de l’application non listées dans les propriétés prédéfinies de l’application, telles que les paramètres et configurations spécifiques à l’entreprise.',
custom_data_invalid: 'Les données personnalisées doivent être un objet JSON valide.',
+ access_control: {
+ name: 'Règles',
+ title: 'Contrôle d’accès au niveau de l’application',
+ description:
+ 'Limitez les utilisateurs autorisés à se connecter à cette application en configurant des règles d’accès.',
+ enable: 'Activer le contrôle d’accès',
+ enable_description:
+ 'Seuls les utilisateurs correspondant à au moins une règle configurée peuvent accéder à cette application.',
+ enable_without_rules_notice:
+ 'Ajoutez au moins une règle d’accès avant d’activer le contrôle d’accès.',
+ enabled_notice:
+ 'Le contrôle d’accès est activé. Seuls les utilisateurs correspondant à au moins une règle peuvent accéder à cette application.',
+ disabled_notice:
+ 'Le contrôle d’accès est désactivé. Tous les utilisateurs inscrits peuvent accéder à cette application.',
+ load_error: 'Échec du chargement des règles de contrôle d’accès.',
+ rules: 'Règles d’accès',
+ rules_description:
+ 'Les utilisateurs peuvent accéder à cette application lorsqu’ils correspondent à l’une des règles configurées.',
+ empty_rules_description: 'Aucune règle n’est encore configurée.',
+ rule_count: '{{count}} règle',
+ rule_count_other: '{{count}} règles',
+ rule_users: 'Utilisateurs',
+ rule_users_description: 'Des utilisateurs spécifiques peuvent accéder à cette application.',
+ rule_user_roles: 'Rôles utilisateur',
+ rule_user_roles_description:
+ 'Les utilisateurs associés aux rôles utilisateur sélectionnés peuvent accéder à cette application.',
+ rule_organizations: 'Organisations',
+ rule_organizations_description:
+ 'Tous les membres actuels et futurs des organisations sélectionnées peuvent accéder à cette application.',
+ rule_organization_roles: 'Rôles d’organisation',
+ rule_organization_roles_description:
+ 'Les membres disposant des rôles d’organisation sélectionnés dans les organisations sélectionnées peuvent accéder à cette application.',
+ },
branding: {
name: 'Marque',
description:
diff --git a/packages/phrases/src/locales/it/translation/admin-console/application-details.ts b/packages/phrases/src/locales/it/translation/admin-console/application-details.ts
index 2f20e46a288..b9be9e5a958 100644
--- a/packages/phrases/src/locales/it/translation/admin-console/application-details.ts
+++ b/packages/phrases/src/locales/it/translation/admin-console/application-details.ts
@@ -122,6 +122,39 @@ const application_details = {
field_custom_data_tip:
"Ulteriori informazioni personalizzate sull'applicazione non elencate nelle proprietà predefinite dell'applicazione, come impostazioni e configurazioni specifiche del business.",
custom_data_invalid: 'I dati personalizzati devono essere un oggetto JSON valido',
+ access_control: {
+ name: 'Regole',
+ title: 'Controllo accessi a livello di app',
+ description:
+ 'Limita quali utenti possono accedere a questa applicazione configurando regole di accesso.',
+ enable: 'Abilita controllo accessi',
+ enable_description:
+ 'Solo gli utenti che corrispondono ad almeno una regola configurata possono accedere a questa app.',
+ enable_without_rules_notice:
+ 'Aggiungi almeno una regola di accesso prima di abilitare il controllo accessi.',
+ enabled_notice:
+ 'Il controllo accessi è attivo. Solo gli utenti che corrispondono ad almeno una regola possono accedere a questa app.',
+ disabled_notice:
+ 'Il controllo accessi è disattivato. Tutti gli utenti registrati possono accedere a questa app.',
+ load_error: 'Impossibile caricare le regole di controllo accessi.',
+ rules: 'Regole di accesso',
+ rules_description:
+ 'Gli utenti possono accedere a questa app quando corrispondono a una qualsiasi delle regole configurate.',
+ empty_rules_description: 'Non è stata ancora configurata alcuna regola.',
+ rule_count: '{{count}} regola',
+ rule_count_other: '{{count}} regole',
+ rule_users: 'Utenti',
+ rule_users_description: 'Utenti specifici possono accedere a questa app.',
+ rule_user_roles: 'Ruoli utente',
+ rule_user_roles_description:
+ 'Gli utenti assegnati ai ruoli utente selezionati possono accedere a questa app.',
+ rule_organizations: 'Organizzazioni',
+ rule_organizations_description:
+ 'Tutti i membri attuali e futuri delle organizzazioni selezionate possono accedere a questa app.',
+ rule_organization_roles: 'Ruoli organizzazione',
+ rule_organization_roles_description:
+ 'I membri con i ruoli organizzazione selezionati nelle organizzazioni selezionate possono accedere a questa app.',
+ },
branding: {
name: 'Marchio',
description: "Personalizza il nome e il logo dell'applicazione sullo schermo del consenso.",
diff --git a/packages/phrases/src/locales/ja/translation/admin-console/application-details.ts b/packages/phrases/src/locales/ja/translation/admin-console/application-details.ts
index 121baf14fdf..0c2326a558e 100644
--- a/packages/phrases/src/locales/ja/translation/admin-console/application-details.ts
+++ b/packages/phrases/src/locales/ja/translation/admin-console/application-details.ts
@@ -121,6 +121,38 @@ const application_details = {
field_custom_data_tip:
'事前定義されたアプリケーションプロパティにリストされていない追加のカスタムアプリケーション情報。例えば、ビジネス固有の設定と構成。',
custom_data_invalid: 'カスタムデータは有効な JSON オブジェクトである必要があります',
+ access_control: {
+ name: 'ルール',
+ title: 'アプリレベルのアクセス制御',
+ description: 'アクセスルールを設定して、このアプリにサインインできるユーザーを制限します。',
+ enable: 'アクセス制御を有効化',
+ enable_description:
+ '設定済みのルールに少なくとも 1 つ一致するユーザーのみが、このアプリにアクセスできます。',
+ enable_without_rules_notice:
+ 'アクセス制御を有効にする前に、少なくとも 1 つのアクセスルールを追加してください。',
+ enabled_notice:
+ 'アクセス制御は有効です。少なくとも 1 つのルールに一致するユーザーのみが、このアプリにアクセスできます。',
+ disabled_notice:
+ 'アクセス制御は無効です。登録済みのすべてのユーザーがこのアプリにアクセスできます。',
+ load_error: 'アクセス制御ルールの読み込みに失敗しました。',
+ rules: 'アクセスルール',
+ rules_description:
+ 'ユーザーはいずれかの設定済みルールに一致すると、このアプリにアクセスできます。',
+ empty_rules_description: 'まだルールが設定されていません。',
+ rule_count: '{{count}} 件のルール',
+ rule_count_other: '{{count}} 件のルール',
+ rule_users: 'ユーザー',
+ rule_users_description: '特定のユーザーがこのアプリにアクセスできます。',
+ rule_user_roles: 'ユーザーロール',
+ rule_user_roles_description:
+ '選択したユーザーロールに割り当てられたユーザーがこのアプリにアクセスできます。',
+ rule_organizations: '組織',
+ rule_organizations_description:
+ '選択した組織の現在および将来のすべてのメンバーがこのアプリにアクセスできます。',
+ rule_organization_roles: '組織ロール',
+ rule_organization_roles_description:
+ '選択した組織内で選択した組織ロールを持つメンバーがこのアプリにアクセスできます。',
+ },
branding: {
name: 'ブランディング',
description: 'Consent 画面上でアプリケーションの表示名とロゴをカスタマイズします。',
diff --git a/packages/phrases/src/locales/ko/translation/admin-console/application-details.ts b/packages/phrases/src/locales/ko/translation/admin-console/application-details.ts
index dca47175bcd..fa4f2dbd0e3 100644
--- a/packages/phrases/src/locales/ko/translation/admin-console/application-details.ts
+++ b/packages/phrases/src/locales/ko/translation/admin-console/application-details.ts
@@ -120,6 +120,33 @@ const application_details = {
field_custom_data_tip:
'사전 정의된 애플리케이션 속성에 나열되지 않은 추가 사용자 지정 애플리케이션 정보, 비즈니스 관련 설정 및 구성과 같은 항목들.',
custom_data_invalid: '사용자 지정 데이터는 유효한 JSON 객체여야 합니다',
+ access_control: {
+ name: '규칙',
+ title: '앱 수준 접근 제어',
+ description: '접근 규칙을 구성하여 이 애플리케이션에 로그인할 수 있는 사용자를 제한합니다.',
+ enable: '접근 제어 사용',
+ enable_description: '구성된 규칙 중 하나 이상과 일치하는 사용자만 이 앱에 접근할 수 있습니다.',
+ enable_without_rules_notice: '접근 제어를 사용하기 전에 접근 규칙을 하나 이상 추가하세요.',
+ enabled_notice:
+ '접근 제어가 켜져 있습니다. 하나 이상의 규칙과 일치하는 사용자만 이 앱에 접근할 수 있습니다.',
+ disabled_notice: '접근 제어가 꺼져 있습니다. 등록된 모든 사용자가 이 앱에 접근할 수 있습니다.',
+ load_error: '접근 제어 규칙을 불러오지 못했습니다.',
+ rules: '접근 규칙',
+ rules_description: '사용자는 구성된 규칙 중 하나와 일치하면 이 앱에 접근할 수 있습니다.',
+ empty_rules_description: '아직 구성된 규칙이 없습니다.',
+ rule_count: '{{count}}개 규칙',
+ rule_count_other: '{{count}}개 규칙',
+ rule_users: '사용자',
+ rule_users_description: '특정 사용자가 이 앱에 접근할 수 있습니다.',
+ rule_user_roles: '사용자 역할',
+ rule_user_roles_description: '선택한 사용자 역할에 할당된 사용자가 이 앱에 접근할 수 있습니다.',
+ rule_organizations: '조직',
+ rule_organizations_description:
+ '선택한 조직의 현재 및 향후 모든 구성원이 이 앱에 접근할 수 있습니다.',
+ rule_organization_roles: '조직 역할',
+ rule_organization_roles_description:
+ '선택한 조직에서 선택한 조직 역할을 가진 구성원이 이 앱에 접근할 수 있습니다.',
+ },
branding: {
name: '브랜딩',
description: '동의 화면에서 앱의 표시 이름과 로고를 사용자 정의하세요.',
diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/application-details.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/application-details.ts
index 16369dd90df..63c711b07a4 100644
--- a/packages/phrases/src/locales/pl-pl/translation/admin-console/application-details.ts
+++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/application-details.ts
@@ -121,6 +121,39 @@ const application_details = {
field_custom_data_tip:
'Dodatkowe niestandardowe informacje o aplikacji, które nie są wymienione w predefiniowanych właściwościach aplikacji, takie jak ustawienia i konfiguracje specyficzne dla biznesu.',
custom_data_invalid: 'Dane niestandardowe muszą być poprawnym obiektem JSON',
+ access_control: {
+ name: 'Reguły',
+ title: 'Kontrola dostępu na poziomie aplikacji',
+ description:
+ 'Ogranicz, którzy użytkownicy mogą logować się do tej aplikacji, konfigurując reguły dostępu.',
+ enable: 'Włącz kontrolę dostępu',
+ enable_description:
+ 'Tylko użytkownicy pasujący do co najmniej jednej skonfigurowanej reguły mogą uzyskać dostęp do tej aplikacji.',
+ enable_without_rules_notice:
+ 'Dodaj co najmniej jedną regułę dostępu przed włączeniem kontroli dostępu.',
+ enabled_notice:
+ 'Kontrola dostępu jest włączona. Tylko użytkownicy pasujący do co najmniej jednej reguły mogą uzyskać dostęp do tej aplikacji.',
+ disabled_notice:
+ 'Kontrola dostępu jest wyłączona. Wszyscy zarejestrowani użytkownicy mogą uzyskać dostęp do tej aplikacji.',
+ load_error: 'Nie udało się załadować reguł kontroli dostępu.',
+ rules: 'Reguły dostępu',
+ rules_description:
+ 'Użytkownicy mogą uzyskać dostęp do tej aplikacji, gdy pasują do dowolnej skonfigurowanej reguły.',
+ empty_rules_description: 'Nie skonfigurowano jeszcze żadnych reguł.',
+ rule_count: '{{count}} reguła',
+ rule_count_other: '{{count}} reguł',
+ rule_users: 'Użytkownicy',
+ rule_users_description: 'Określeni użytkownicy mogą uzyskać dostęp do tej aplikacji.',
+ rule_user_roles: 'Role użytkowników',
+ rule_user_roles_description:
+ 'Użytkownicy przypisani do wybranych ról użytkownika mogą uzyskać dostęp do tej aplikacji.',
+ rule_organizations: 'Organizacje',
+ rule_organizations_description:
+ 'Wszyscy obecni i przyszli członkowie wybranych organizacji mogą uzyskać dostęp do tej aplikacji.',
+ rule_organization_roles: 'Role organizacji',
+ rule_organization_roles_description:
+ 'Członkowie z wybranymi rolami organizacji w wybranych organizacjach mogą uzyskać dostęp do tej aplikacji.',
+ },
branding: {
name: 'Branding',
description: 'Dostosuj nazwę i logo aplikacji na ekranie zgody.',
diff --git a/packages/phrases/src/locales/pt-br/translation/admin-console/application-details.ts b/packages/phrases/src/locales/pt-br/translation/admin-console/application-details.ts
index 951f0a0cd18..90cb2f0ac04 100644
--- a/packages/phrases/src/locales/pt-br/translation/admin-console/application-details.ts
+++ b/packages/phrases/src/locales/pt-br/translation/admin-console/application-details.ts
@@ -121,6 +121,39 @@ const application_details = {
field_custom_data_tip:
'Informações adicionais personalizadas da aplicação não listadas nas propriedades pré-definidas da aplicação, como configurações e configurações específicas dos negócios.',
custom_data_invalid: 'Os dados personalizados devem ser um objeto JSON válido',
+ access_control: {
+ name: 'Regras',
+ title: 'Controle de acesso no nível do aplicativo',
+ description:
+ 'Restrinja quais usuários podem entrar neste aplicativo configurando regras de acesso.',
+ enable: 'Ativar controle de acesso',
+ enable_description:
+ 'Somente usuários que corresponderem a pelo menos uma regra configurada podem acessar este app.',
+ enable_without_rules_notice:
+ 'Adicione pelo menos uma regra de acesso antes de ativar o controle de acesso.',
+ enabled_notice:
+ 'O controle de acesso está ativado. Somente usuários que corresponderem a pelo menos uma regra podem acessar este app.',
+ disabled_notice:
+ 'O controle de acesso está desativado. Todos os usuários registrados podem acessar este app.',
+ load_error: 'Falha ao carregar as regras de controle de acesso.',
+ rules: 'Regras de acesso',
+ rules_description:
+ 'Os usuários podem acessar este app quando corresponderem a qualquer uma das regras configuradas.',
+ empty_rules_description: 'Nenhuma regra foi configurada ainda.',
+ rule_count: '{{count}} regra',
+ rule_count_other: '{{count}} regras',
+ rule_users: 'Usuários',
+ rule_users_description: 'Usuários específicos podem acessar este app.',
+ rule_user_roles: 'Funções de usuário',
+ rule_user_roles_description:
+ 'Usuários atribuídos às funções de usuário selecionadas podem acessar este app.',
+ rule_organizations: 'Organizações',
+ rule_organizations_description:
+ 'Todos os membros atuais e futuros das organizações selecionadas podem acessar este app.',
+ rule_organization_roles: 'Funções da organização',
+ rule_organization_roles_description:
+ 'Membros com as funções da organização selecionadas nas organizações selecionadas podem acessar este app.',
+ },
branding: {
name: 'Branding',
description:
diff --git a/packages/phrases/src/locales/pt-pt/translation/admin-console/application-details.ts b/packages/phrases/src/locales/pt-pt/translation/admin-console/application-details.ts
index be6c6bf22ba..f576cb2baaf 100644
--- a/packages/phrases/src/locales/pt-pt/translation/admin-console/application-details.ts
+++ b/packages/phrases/src/locales/pt-pt/translation/admin-console/application-details.ts
@@ -121,6 +121,39 @@ const application_details = {
field_custom_data_tip:
'Informações personalizadas adicionais da aplicação não listadas nas propriedades predefinidas da aplicação, como configurações e configurações específicas de negócios.',
custom_data_invalid: 'Os dados personalizados devem ser um objeto JSON válido',
+ access_control: {
+ name: 'Regras',
+ title: 'Controlo de acesso ao nível da aplicação',
+ description:
+ 'Restrinja que utilizadores podem iniciar sessão nesta aplicação configurando regras de acesso.',
+ enable: 'Ativar controlo de acesso',
+ enable_description:
+ 'Apenas os utilizadores que correspondam a pelo menos uma regra configurada podem aceder a esta aplicação.',
+ enable_without_rules_notice:
+ 'Adicione pelo menos uma regra de acesso antes de ativar o controlo de acesso.',
+ enabled_notice:
+ 'O controlo de acesso está ativo. Apenas os utilizadores que correspondam a pelo menos uma regra podem aceder a esta aplicação.',
+ disabled_notice:
+ 'O controlo de acesso está desativado. Todos os utilizadores registados podem aceder a esta aplicação.',
+ load_error: 'Falha ao carregar as regras de controlo de acesso.',
+ rules: 'Regras de acesso',
+ rules_description:
+ 'Os utilizadores podem aceder a esta aplicação quando corresponderem a qualquer uma das regras configuradas.',
+ empty_rules_description: 'Ainda não foram configuradas regras.',
+ rule_count: '{{count}} regra',
+ rule_count_other: '{{count}} regras',
+ rule_users: 'Utilizadores',
+ rule_users_description: 'Utilizadores específicos podem aceder a esta aplicação.',
+ rule_user_roles: 'Funções de utilizador',
+ rule_user_roles_description:
+ 'Utilizadores atribuídos às funções de utilizador selecionadas podem aceder a esta aplicação.',
+ rule_organizations: 'Organizações',
+ rule_organizations_description:
+ 'Todos os membros atuais e futuros das organizações selecionadas podem aceder a esta aplicação.',
+ rule_organization_roles: 'Funções da organização',
+ rule_organization_roles_description:
+ 'Membros com as funções da organização selecionadas nas organizações selecionadas podem aceder a esta aplicação.',
+ },
branding: {
name: 'Marca',
description: 'Personalize o nome e o logótipo da sua aplicação no ecrã de consentimento.',
diff --git a/packages/phrases/src/locales/ru/translation/admin-console/application-details.ts b/packages/phrases/src/locales/ru/translation/admin-console/application-details.ts
index b5fc727b8ea..daea93ba033 100644
--- a/packages/phrases/src/locales/ru/translation/admin-console/application-details.ts
+++ b/packages/phrases/src/locales/ru/translation/admin-console/application-details.ts
@@ -121,6 +121,39 @@ const application_details = {
field_custom_data_tip:
'Дополнительная информация о приложении, не указанная в предопределенных свойствах приложения, такая как настройки и конфигурации, специфичные для бизнеса.',
custom_data_invalid: 'Пользовательские данные должны быть допустимым объектом JSON',
+ access_control: {
+ name: 'Правила',
+ title: 'Контроль доступа на уровне приложения',
+ description:
+ 'Ограничьте, какие пользователи могут входить в это приложение, настроив правила доступа.',
+ enable: 'Включить контроль доступа',
+ enable_description:
+ 'Доступ к приложению получат только пользователи, соответствующие хотя бы одному настроенному правилу.',
+ enable_without_rules_notice:
+ 'Добавьте хотя бы одно правило доступа перед включением контроля доступа.',
+ enabled_notice:
+ 'Контроль доступа включен. Доступ к приложению получат только пользователи, соответствующие хотя бы одному правилу.',
+ disabled_notice:
+ 'Контроль доступа выключен. Все зарегистрированные пользователи могут получить доступ к этому приложению.',
+ load_error: 'Не удалось загрузить правила контроля доступа.',
+ rules: 'Правила доступа',
+ rules_description:
+ 'Пользователи могут получить доступ к приложению, если соответствуют любому из настроенных правил.',
+ empty_rules_description: 'Правила еще не настроены.',
+ rule_count: '{{count}} правило',
+ rule_count_other: '{{count}} правил',
+ rule_users: 'Пользователи',
+ rule_users_description: 'Указанные пользователи могут получить доступ к этому приложению.',
+ rule_user_roles: 'Роли пользователей',
+ rule_user_roles_description:
+ 'Пользователи, назначенные на выбранные роли пользователей, могут получить доступ к этому приложению.',
+ rule_organizations: 'Организации',
+ rule_organizations_description:
+ 'Все текущие и будущие участники выбранных организаций могут получить доступ к этому приложению.',
+ rule_organization_roles: 'Роли организации',
+ rule_organization_roles_description:
+ 'Участники с выбранными ролями организации в выбранных организациях могут получить доступ к этому приложению.',
+ },
branding: {
name: 'Брендинг',
description: 'Настройте отображаемое имя и логотип вашего приложения на экране согласия.',
diff --git a/packages/phrases/src/locales/th/translation/admin-console/application-details.ts b/packages/phrases/src/locales/th/translation/admin-console/application-details.ts
index bc28f41a951..de024e2fa3f 100644
--- a/packages/phrases/src/locales/th/translation/admin-console/application-details.ts
+++ b/packages/phrases/src/locales/th/translation/admin-console/application-details.ts
@@ -120,6 +120,35 @@ const application_details = {
field_custom_data_tip:
'ข้อมูลเพิ่มเติมที่ไม่อยู่ในคุณสมบัติแอปที่กำหนดไว้ล่วงหน้าเช่น ข้อมูลธุรกิจหรือการตั้งค่าเฉพาะ',
custom_data_invalid: 'ข้อมูลกำหนดเองต้องเป็น JSON object ที่ถูกต้อง',
+ access_control: {
+ name: 'กฎ',
+ title: 'การควบคุมการเข้าถึงระดับแอป',
+ description: 'จำกัดผู้ใช้ที่สามารถเข้าสู่ระบบแอปนี้ได้โดยกำหนดค่ากฎการเข้าถึง',
+ enable: 'เปิดใช้งานการควบคุมการเข้าถึง',
+ enable_description:
+ 'เฉพาะผู้ใช้ที่ตรงกับกฎที่กำหนดไว้อย่างน้อยหนึ่งข้อเท่านั้นที่เข้าถึงแอปนี้ได้',
+ enable_without_rules_notice:
+ 'เพิ่มกฎการเข้าถึงอย่างน้อยหนึ่งข้อก่อนเปิดใช้งานการควบคุมการเข้าถึง',
+ enabled_notice:
+ 'เปิดการควบคุมการเข้าถึงแล้ว เฉพาะผู้ใช้ที่ตรงกับกฎอย่างน้อยหนึ่งข้อเท่านั้นที่เข้าถึงแอปนี้ได้',
+ disabled_notice: 'ปิดการควบคุมการเข้าถึงแล้ว ผู้ใช้ที่ลงทะเบียนทั้งหมดสามารถเข้าถึงแอปนี้ได้',
+ load_error: 'โหลดกฎการควบคุมการเข้าถึงไม่สำเร็จ',
+ rules: 'กฎการเข้าถึง',
+ rules_description: 'ผู้ใช้สามารถเข้าถึงแอปนี้ได้เมื่อตรงกับกฎที่กำหนดไว้ข้อใดข้อหนึ่ง',
+ empty_rules_description: 'ยังไม่ได้กำหนดค่ากฎใด ๆ',
+ rule_count: '{{count}} กฎ',
+ rule_count_other: '{{count}} กฎ',
+ rule_users: 'ผู้ใช้',
+ rule_users_description: 'ผู้ใช้ที่ระบุสามารถเข้าถึงแอปนี้ได้',
+ rule_user_roles: 'บทบาทผู้ใช้',
+ rule_user_roles_description: 'ผู้ใช้ที่ได้รับบทบาทผู้ใช้ที่เลือกสามารถเข้าถึงแอปนี้ได้',
+ rule_organizations: 'องค์กร',
+ rule_organizations_description:
+ 'สมาชิกปัจจุบันและอนาคตทั้งหมดขององค์กรที่เลือกสามารถเข้าถึงแอปนี้ได้',
+ rule_organization_roles: 'บทบาทองค์กร',
+ rule_organization_roles_description:
+ 'สมาชิกที่มีบทบาทองค์กรที่เลือกในองค์กรที่เลือกสามารถเข้าถึงแอปนี้ได้',
+ },
branding: {
name: 'การสร้างแบรนด์',
description: 'ปรับแต่งโลโก้แอปและสีแบรนด์สำหรับประสบการณ์ในระดับแอป',
diff --git a/packages/phrases/src/locales/tr-tr/translation/admin-console/application-details.ts b/packages/phrases/src/locales/tr-tr/translation/admin-console/application-details.ts
index 5d33dd5de6f..e01622cbf42 100644
--- a/packages/phrases/src/locales/tr-tr/translation/admin-console/application-details.ts
+++ b/packages/phrases/src/locales/tr-tr/translation/admin-console/application-details.ts
@@ -120,6 +120,38 @@ const application_details = {
field_custom_data_tip:
'Önceden tanımlanmış uygulama özelliklerinde listelenmeyen ek özel uygulama bilgileri, iş ile ilgili ayarlar ve yapılandırmalar gibi.',
custom_data_invalid: 'Özel veri geçerli bir JSON nesnesi olmalıdır',
+ access_control: {
+ name: 'Kurallar',
+ title: 'Uygulama düzeyinde erişim kontrolü',
+ description:
+ 'Erişim kuralları yapılandırarak bu uygulamada kimlerin oturum açabileceğini sınırlayın.',
+ enable: 'Erişim kontrolünü etkinleştir',
+ enable_description:
+ 'Yapılandırılmış kurallardan en az biriyle eşleşen kullanıcılar bu uygulamaya erişebilir.',
+ enable_without_rules_notice:
+ 'Erişim kontrolünü etkinleştirmeden önce en az bir erişim kuralı ekleyin.',
+ enabled_notice:
+ 'Erişim kontrolü açık. En az bir kuralla eşleşen kullanıcılar bu uygulamaya erişebilir.',
+ disabled_notice: 'Erişim kontrolü kapalı. Tüm kayıtlı kullanıcılar bu uygulamaya erişebilir.',
+ load_error: 'Erişim kontrolü kuralları yüklenemedi.',
+ rules: 'Erişim kuralları',
+ rules_description:
+ 'Kullanıcılar yapılandırılmış kurallardan herhangi biriyle eşleştiğinde bu uygulamaya erişebilir.',
+ empty_rules_description: 'Henüz yapılandırılmış kural yok.',
+ rule_count: '{{count}} kural',
+ rule_count_other: '{{count}} kural',
+ rule_users: 'Kullanıcılar',
+ rule_users_description: 'Belirli kullanıcılar bu uygulamaya erişebilir.',
+ rule_user_roles: 'Kullanıcı rolleri',
+ rule_user_roles_description:
+ 'Seçilen kullanıcı rollerine atanmış kullanıcılar bu uygulamaya erişebilir.',
+ rule_organizations: 'Organizasyonlar',
+ rule_organizations_description:
+ 'Seçilen organizasyonların mevcut ve gelecekteki tüm üyeleri bu uygulamaya erişebilir.',
+ rule_organization_roles: 'Organizasyon rolleri',
+ rule_organization_roles_description:
+ 'Seçilen organizasyonlarda seçilen organizasyon rollerine sahip üyeler bu uygulamaya erişebilir.',
+ },
branding: {
name: 'Markalama',
description: 'Uygulamanızın adını ve logosunu açıklama ekranında özelleştirin.',
diff --git a/packages/phrases/src/locales/zh-cn/translation/admin-console/application-details.ts b/packages/phrases/src/locales/zh-cn/translation/admin-console/application-details.ts
index 751f2d56a89..80781a15a40 100644
--- a/packages/phrases/src/locales/zh-cn/translation/admin-console/application-details.ts
+++ b/packages/phrases/src/locales/zh-cn/translation/admin-console/application-details.ts
@@ -114,6 +114,30 @@ const application_details = {
field_custom_data_tip:
'不在预定义的应用程序属性中列出的其他自定义应用程序信息,例如业务特定的设置和配置。',
custom_data_invalid: '自定义数据必须是有效的 JSON 对象',
+ access_control: {
+ name: '规则',
+ title: '应用级访问控制',
+ description: '通过配置访问规则,限制哪些用户可以登录此应用。',
+ enable: '启用访问控制',
+ enable_description: '仅允许匹配至少一条已配置规则的用户访问此应用。',
+ enable_without_rules_notice: '请先添加至少一条访问规则,再启用访问控制。',
+ enabled_notice: '访问控制已开启。只有匹配至少一条规则的用户可以访问此应用。',
+ disabled_notice: '访问控制已关闭。所有已注册用户都可以访问此应用。',
+ load_error: '加载访问控制规则失败。',
+ rules: '访问规则',
+ rules_description: '用户匹配任意一条已配置规则时即可访问此应用。',
+ empty_rules_description: '尚未配置任何规则。',
+ rule_count: '{{count}} 条规则',
+ rule_count_other: '{{count}} 条规则',
+ rule_users: '用户',
+ rule_users_description: '指定用户可以访问此应用。',
+ rule_user_roles: '用户角色',
+ rule_user_roles_description: '拥有所选用户角色的用户可以访问此应用。',
+ rule_organizations: '组织',
+ rule_organizations_description: '所选组织中的当前和未来成员都可以访问此应用。',
+ rule_organization_roles: '组织角色',
+ rule_organization_roles_description: '在所选组织中拥有所选组织角色的成员可以访问此应用。',
+ },
branding: {
name: '品牌化',
description: '在授权屏幕上自定义应用程序的显示名称和标识。',
diff --git a/packages/phrases/src/locales/zh-hk/translation/admin-console/application-details.ts b/packages/phrases/src/locales/zh-hk/translation/admin-console/application-details.ts
index f3f0fe6ba5a..07a8b9c46a8 100644
--- a/packages/phrases/src/locales/zh-hk/translation/admin-console/application-details.ts
+++ b/packages/phrases/src/locales/zh-hk/translation/admin-console/application-details.ts
@@ -114,6 +114,30 @@ const application_details = {
field_custom_data_tip:
'額外的自定義應用程式資訊,不在預定義的應用程式屬性中列出,例如業務特定的設定和配置。',
custom_data_invalid: '自定義資料必須是一個有效的 JSON 對象',
+ access_control: {
+ name: '規則',
+ title: '應用程式級別訪問控制',
+ description: '透過配置訪問規則,限制哪些用戶可以登入此應用程式。',
+ enable: '啟用訪問控制',
+ enable_description: '僅允許符合至少一條已配置規則的用戶訪問此應用程式。',
+ enable_without_rules_notice: '請先新增至少一條訪問規則,再啟用訪問控制。',
+ enabled_notice: '訪問控制已開啟。只有符合至少一條規則的用戶可以訪問此應用程式。',
+ disabled_notice: '訪問控制已關閉。所有已註冊用戶都可以訪問此應用程式。',
+ load_error: '載入訪問控制規則失敗。',
+ rules: '訪問規則',
+ rules_description: '用戶符合任一條已配置規則時即可訪問此應用程式。',
+ empty_rules_description: '尚未配置任何規則。',
+ rule_count: '{{count}} 條規則',
+ rule_count_other: '{{count}} 條規則',
+ rule_users: '用戶',
+ rule_users_description: '指定用戶可以訪問此應用程式。',
+ rule_user_roles: '用戶角色',
+ rule_user_roles_description: '擁有所選用戶角色的用戶可以訪問此應用程式。',
+ rule_organizations: '組織',
+ rule_organizations_description: '所選組織中的現有和未來成員都可以訪問此應用程式。',
+ rule_organization_roles: '組織角色',
+ rule_organization_roles_description: '在所選組織中擁有所選組織角色的成員可以訪問此應用程式。',
+ },
branding: {
name: '品牌推廣',
description: '在同意屏幕上自訂您應用程式的顯示名稱和標誌。',
diff --git a/packages/phrases/src/locales/zh-tw/translation/admin-console/application-details.ts b/packages/phrases/src/locales/zh-tw/translation/admin-console/application-details.ts
index 3f8798bbc6a..25c4b460717 100644
--- a/packages/phrases/src/locales/zh-tw/translation/admin-console/application-details.ts
+++ b/packages/phrases/src/locales/zh-tw/translation/admin-console/application-details.ts
@@ -113,6 +113,30 @@ const application_details = {
field_custom_data: '自定義資料',
field_custom_data_tip: '額外的自定義應用資訊,不在預定義的應用屬性中,例如業務特定的設置和配置。',
custom_data_invalid: '自定義資料必須是有效的 JSON 對象',
+ access_control: {
+ name: '規則',
+ title: '應用程式層級存取控制',
+ description: '透過配置存取規則,限制哪些使用者可以登入此應用程式。',
+ enable: '啟用存取控制',
+ enable_description: '僅允許符合至少一條已配置規則的使用者存取此應用程式。',
+ enable_without_rules_notice: '請先新增至少一條存取規則,再啟用存取控制。',
+ enabled_notice: '存取控制已開啟。只有符合至少一條規則的使用者可以存取此應用程式。',
+ disabled_notice: '存取控制已關閉。所有已註冊使用者都可以存取此應用程式。',
+ load_error: '載入存取控制規則失敗。',
+ rules: '存取規則',
+ rules_description: '使用者符合任一條已配置規則時即可存取此應用程式。',
+ empty_rules_description: '尚未配置任何規則。',
+ rule_count: '{{count}} 條規則',
+ rule_count_other: '{{count}} 條規則',
+ rule_users: '使用者',
+ rule_users_description: '指定使用者可以存取此應用程式。',
+ rule_user_roles: '使用者角色',
+ rule_user_roles_description: '擁有所選使用者角色的使用者可以存取此應用程式。',
+ rule_organizations: '組織',
+ rule_organizations_description: '所選組織中的目前與未來成員都可以存取此應用程式。',
+ rule_organization_roles: '組織角色',
+ rule_organization_roles_description: '在所選組織中擁有所選組織角色的成員可以存取此應用程式。',
+ },
branding: {
name: '品牌',
description: '在同意畫面上自訂應用程式的顯示名稱和標誌。',