From 79c2a53acaf2807e77bbbd9bbac247322d8c2663 Mon Sep 17 00:00:00 2001 From: Xiao Yijun Date: Fri, 29 Mar 2024 15:28:51 +0800 Subject: [PATCH] refactor(console): move organization template into a signle page --- .../console/src/assets/icons/research.svg | 3 + packages/console/src/consts/external-links.ts | 2 + packages/console/src/consts/page-tabs.ts | 5 + .../ConsoleContent/Sidebar/hook.tsx | 5 + .../src/containers/ConsoleContent/index.tsx | 17 +++ .../ds-components/CardTitle/index.module.scss | 4 - .../src/ds-components/CardTitle/index.tsx | 13 +-- .../OrgPermissions/index.module.scss | 11 ++ .../OrgPermissions/index.tsx | 105 ++++++++++++++++++ .../OrgRoles/index.module.scss | 13 +++ .../OrganizationTemplate/OrgRoles/index.tsx | 97 ++++++++++++++++ .../OrganizationTemplate/index.module.scss | 8 ++ .../src/pages/OrganizationTemplate/index.tsx | 56 ++++++++++ .../de/translation/admin-console/index.ts | 2 + .../admin-console/organization-template.ts | 27 +++++ .../de/translation/admin-console/tabs.ts | 1 + .../en/translation/admin-console/index.ts | 2 + .../admin-console/organization-template.ts | 27 +++++ .../en/translation/admin-console/tabs.ts | 1 + .../es/translation/admin-console/index.ts | 2 + .../admin-console/organization-template.ts | 27 +++++ .../es/translation/admin-console/tabs.ts | 1 + .../fr/translation/admin-console/index.ts | 2 + .../admin-console/organization-template.ts | 27 +++++ .../fr/translation/admin-console/tabs.ts | 1 + .../it/translation/admin-console/index.ts | 2 + .../admin-console/organization-template.ts | 27 +++++ .../it/translation/admin-console/tabs.ts | 1 + .../ja/translation/admin-console/index.ts | 2 + .../admin-console/organization-template.ts | 27 +++++ .../ja/translation/admin-console/tabs.ts | 1 + .../ko/translation/admin-console/index.ts | 2 + .../admin-console/organization-template.ts | 27 +++++ .../ko/translation/admin-console/tabs.ts | 1 + .../pl-pl/translation/admin-console/index.ts | 2 + .../admin-console/organization-template.ts | 27 +++++ .../pl-pl/translation/admin-console/tabs.ts | 1 + .../pt-br/translation/admin-console/index.ts | 2 + .../admin-console/organization-template.ts | 27 +++++ .../pt-br/translation/admin-console/tabs.ts | 1 + .../pt-pt/translation/admin-console/index.ts | 2 + .../admin-console/organization-template.ts | 27 +++++ .../pt-pt/translation/admin-console/tabs.ts | 1 + .../ru/translation/admin-console/index.ts | 2 + .../admin-console/organization-template.ts | 27 +++++ .../ru/translation/admin-console/tabs.ts | 1 + .../tr-tr/translation/admin-console/index.ts | 2 + .../admin-console/organization-template.ts | 27 +++++ .../tr-tr/translation/admin-console/tabs.ts | 1 + .../zh-cn/translation/admin-console/index.ts | 2 + .../admin-console/organization-template.ts | 27 +++++ .../zh-cn/translation/admin-console/tabs.ts | 1 + .../zh-hk/translation/admin-console/index.ts | 2 + .../admin-console/organization-template.ts | 27 +++++ .../zh-hk/translation/admin-console/tabs.ts | 1 + .../zh-tw/translation/admin-console/index.ts | 2 + .../admin-console/organization-template.ts | 27 +++++ .../zh-tw/translation/admin-console/tabs.ts | 1 + 58 files changed, 778 insertions(+), 11 deletions(-) create mode 100644 packages/console/src/assets/icons/research.svg create mode 100644 packages/console/src/pages/OrganizationTemplate/OrgPermissions/index.module.scss create mode 100644 packages/console/src/pages/OrganizationTemplate/OrgPermissions/index.tsx create mode 100644 packages/console/src/pages/OrganizationTemplate/OrgRoles/index.module.scss create mode 100644 packages/console/src/pages/OrganizationTemplate/OrgRoles/index.tsx create mode 100644 packages/console/src/pages/OrganizationTemplate/index.module.scss create mode 100644 packages/console/src/pages/OrganizationTemplate/index.tsx create mode 100644 packages/phrases/src/locales/de/translation/admin-console/organization-template.ts create mode 100644 packages/phrases/src/locales/en/translation/admin-console/organization-template.ts create mode 100644 packages/phrases/src/locales/es/translation/admin-console/organization-template.ts create mode 100644 packages/phrases/src/locales/fr/translation/admin-console/organization-template.ts create mode 100644 packages/phrases/src/locales/it/translation/admin-console/organization-template.ts create mode 100644 packages/phrases/src/locales/ja/translation/admin-console/organization-template.ts create mode 100644 packages/phrases/src/locales/ko/translation/admin-console/organization-template.ts create mode 100644 packages/phrases/src/locales/pl-pl/translation/admin-console/organization-template.ts create mode 100644 packages/phrases/src/locales/pt-br/translation/admin-console/organization-template.ts create mode 100644 packages/phrases/src/locales/pt-pt/translation/admin-console/organization-template.ts create mode 100644 packages/phrases/src/locales/ru/translation/admin-console/organization-template.ts create mode 100644 packages/phrases/src/locales/tr-tr/translation/admin-console/organization-template.ts create mode 100644 packages/phrases/src/locales/zh-cn/translation/admin-console/organization-template.ts create mode 100644 packages/phrases/src/locales/zh-hk/translation/admin-console/organization-template.ts create mode 100644 packages/phrases/src/locales/zh-tw/translation/admin-console/organization-template.ts diff --git a/packages/console/src/assets/icons/research.svg b/packages/console/src/assets/icons/research.svg new file mode 100644 index 000000000000..89105ca6de13 --- /dev/null +++ b/packages/console/src/assets/icons/research.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/console/src/consts/external-links.ts b/packages/console/src/consts/external-links.ts index bfd69f3e2382..f6efa865ad03 100644 --- a/packages/console/src/consts/external-links.ts +++ b/packages/console/src/consts/external-links.ts @@ -24,3 +24,5 @@ export const logtoThirdPartyAppPermissionsLink = '/docs/recipes/logto-as-idp/permissions-management/'; export const logtoThirdPartyAppBrandingLink = '/docs/recipes/logto-as-idp/branding-customization/'; export const signingKeysLink = '/docs/recipes/openid-connect/signing-keys-rotation/'; +export const organizationTemplateLink = + '/docs/recipes/organizations/understand-how-it-works/#organization-template'; diff --git a/packages/console/src/consts/page-tabs.ts b/packages/console/src/consts/page-tabs.ts index 83ad9f7bc154..477bb60ddfa8 100644 --- a/packages/console/src/consts/page-tabs.ts +++ b/packages/console/src/consts/page-tabs.ts @@ -47,3 +47,8 @@ export enum EnterpriseSsoDetailsTabs { Connection = 'connection', Experience = 'experience', } + +export enum OrganizationTemplateTabs { + OrgRoles = 'org-roles', + OrgPermissions = 'org-permissions', +} diff --git a/packages/console/src/containers/ConsoleContent/Sidebar/hook.tsx b/packages/console/src/containers/ConsoleContent/Sidebar/hook.tsx index e85ef4af1c2c..ffd9e771f25e 100644 --- a/packages/console/src/containers/ConsoleContent/Sidebar/hook.tsx +++ b/packages/console/src/containers/ConsoleContent/Sidebar/hook.tsx @@ -99,6 +99,11 @@ export const useSidebarMenuItems = (): { Icon: Role, title: 'roles', }, + { + Icon: Role, + title: 'organization_template', + isHidden: !isDevFeaturesEnabled, + }, ], }, { diff --git a/packages/console/src/containers/ConsoleContent/index.tsx b/packages/console/src/containers/ConsoleContent/index.tsx index 323bac3218f9..6b71a735994d 100644 --- a/packages/console/src/containers/ConsoleContent/index.tsx +++ b/packages/console/src/containers/ConsoleContent/index.tsx @@ -11,6 +11,7 @@ import { TenantSettingsTabs, ApplicationDetailsTabs, EnterpriseSsoDetailsTabs, + OrganizationTemplateTabs, } from '@/consts'; import { isCloud, isDevFeaturesEnabled } from '@/consts/env'; import { TenantsContext } from '@/contexts/TenantsProvider'; @@ -33,6 +34,9 @@ import JwtClaims from '@/pages/JwtClaims'; import Mfa from '@/pages/Mfa'; import NotFound from '@/pages/NotFound'; import OrganizationDetails from '@/pages/OrganizationDetails'; +import OrganizationTemplate from '@/pages/OrganizationTemplate'; +import OrgPermissions from '@/pages/OrganizationTemplate/OrgPermissions'; +import OrgRoles from '@/pages/OrganizationTemplate/OrgRoles'; import Organizations from '@/pages/Organizations'; import OrganizationGuide from '@/pages/Organizations/Guide'; import Profile from '@/pages/Profile'; @@ -180,6 +184,19 @@ function ConsoleContent() { } /> + {isDevFeaturesEnabled && ( + }> + } + /> + } /> + } + /> + + )} } /> } /> diff --git a/packages/console/src/ds-components/CardTitle/index.module.scss b/packages/console/src/ds-components/CardTitle/index.module.scss index 36eec96534ce..9258bc9fbeb1 100644 --- a/packages/console/src/ds-components/CardTitle/index.module.scss +++ b/packages/console/src/ds-components/CardTitle/index.module.scss @@ -21,10 +21,6 @@ color: var(--color-text-secondary); } - .learnMore:not(:first-child) { - margin-left: _.unit(1); - } - &.large { .title { font: var(--font-title-1); diff --git a/packages/console/src/ds-components/CardTitle/index.tsx b/packages/console/src/ds-components/CardTitle/index.tsx index 9b0d1e7b260b..ba33a57b508f 100644 --- a/packages/console/src/ds-components/CardTitle/index.tsx +++ b/packages/console/src/ds-components/CardTitle/index.tsx @@ -55,13 +55,12 @@ function CardTitle({ {typeof subtitle === 'string' ? : subtitle} )} {learnMoreLink?.href && ( - - {t('general.learn_more')} - + <> + {' '} + + {t('general.learn_more')} + + )} )} diff --git a/packages/console/src/pages/OrganizationTemplate/OrgPermissions/index.module.scss b/packages/console/src/pages/OrganizationTemplate/OrgPermissions/index.module.scss new file mode 100644 index 000000000000..59e6e65b106a --- /dev/null +++ b/packages/console/src/pages/OrganizationTemplate/OrgPermissions/index.module.scss @@ -0,0 +1,11 @@ +@use '@/scss/underscore' as _; + +.filter { + display: flex; + justify-content: space-between; + align-items: center; + + .createButton { + margin-left: _.unit(2); + } +} diff --git a/packages/console/src/pages/OrganizationTemplate/OrgPermissions/index.tsx b/packages/console/src/pages/OrganizationTemplate/OrgPermissions/index.tsx new file mode 100644 index 000000000000..2fb63f701630 --- /dev/null +++ b/packages/console/src/pages/OrganizationTemplate/OrgPermissions/index.tsx @@ -0,0 +1,105 @@ +import { type OrganizationScope } from '@logto/schemas'; +import { cond } from '@silverhand/essentials'; +import { useTranslation } from 'react-i18next'; +import useSWR from 'swr'; + +import Plus from '@/assets/icons/plus.svg'; +import ActionsButton from '@/components/ActionsButton'; +import Breakable from '@/components/Breakable'; +import Button from '@/ds-components/Button'; +import DynamicT from '@/ds-components/DynamicT'; +import Search from '@/ds-components/Search'; +import Table from '@/ds-components/Table'; +import Tag from '@/ds-components/Tag'; +import { type RequestError } from '@/hooks/use-api'; +import useSearchParametersWatcher from '@/hooks/use-search-parameters-watcher'; +import { buildUrl, formatSearchKeyword } from '@/utils/url'; + +import * as styles from './index.module.scss'; + +function OrgPermissions() { + const { t } = useTranslation(undefined, { keyPrefix: 'admin_console' }); + const [{ keyword }, updateSearchParameters] = useSearchParametersWatcher({ + keyword: '', + }); + + const { data, error, mutate, isLoading } = useSWR( + buildUrl('api/organization-scopes', { + ...cond(keyword && { q: formatSearchKeyword(keyword) }), + }) + ); + + return ( + , + dataIndex: 'name', + colSpan: 7, + render: ({ name }) => { + return ( + + {name} + + ); + }, + }, + { + title: , + dataIndex: 'scopes', + colSpan: 8, + render: ({ description }) => {description ?? '-'}, + }, + { + title: null, + dataIndex: 'action', + colSpan: 1, + render: (scope) => ( + { + // Todo @xiaoyijun implement edit + }} + onDelete={async () => { + // Todo @xiaoyijun implement deletion + }} + /> + ), + }, + ]} + filter={ +
+ { + updateSearchParameters({ keyword }); + }} + onClearSearch={() => { + updateSearchParameters({ keyword: '' }); + }} + /> +
+ } + isLoading={isLoading} + errorMessage={error?.body?.message ?? error?.message} + onRetry={async () => mutate(undefined, true)} + /> + ); +} + +export default OrgPermissions; diff --git a/packages/console/src/pages/OrganizationTemplate/OrgRoles/index.module.scss b/packages/console/src/pages/OrganizationTemplate/OrgRoles/index.module.scss new file mode 100644 index 000000000000..0efcc9a2e8f0 --- /dev/null +++ b/packages/console/src/pages/OrganizationTemplate/OrgRoles/index.module.scss @@ -0,0 +1,13 @@ +@use '@/scss/underscore' as _; + +.permissions { + display: flex; + flex-wrap: wrap; + gap: _.unit(2); +} + +.filter { + display: flex; + flex-direction: row-reverse; + align-items: center; +} diff --git a/packages/console/src/pages/OrganizationTemplate/OrgRoles/index.tsx b/packages/console/src/pages/OrganizationTemplate/OrgRoles/index.tsx new file mode 100644 index 000000000000..4ce5992dbee3 --- /dev/null +++ b/packages/console/src/pages/OrganizationTemplate/OrgRoles/index.tsx @@ -0,0 +1,97 @@ +import { type OrganizationRoleWithScopes } from '@logto/schemas'; +import useSWR from 'swr'; + +import Plus from '@/assets/icons/plus.svg'; +import OrgRoleIcon from '@/assets/icons/role-feature.svg'; +import Breakable from '@/components/Breakable'; +import ItemPreview from '@/components/ItemPreview'; +import ThemedIcon from '@/components/ThemedIcon'; +import { defaultPageSize } from '@/consts'; +import Button from '@/ds-components/Button'; +import DynamicT from '@/ds-components/DynamicT'; +import Table from '@/ds-components/Table'; +import Tag from '@/ds-components/Tag'; +import { type RequestError } from '@/hooks/use-api'; +import useSearchParametersWatcher from '@/hooks/use-search-parameters-watcher'; +import { buildUrl } from '@/utils/url'; + +import * as styles from './index.module.scss'; + +function OrgRoles() { + const [{ page }, updateSearchParameters] = useSearchParametersWatcher({ + page: 1, + }); + + const { data, error, mutate, isLoading } = useSWR< + [OrganizationRoleWithScopes[], number], + RequestError + >( + buildUrl('api/organization-roles', { + page: String(page), + page_size: String(defaultPageSize), + }) + ); + + const [orgRoles, totalCount] = data ?? []; + + return ( +
, + dataIndex: 'name', + colSpan: 4, + render: ({ name }) => { + return } />; + }, + }, + { + title: , + dataIndex: 'scopes', + colSpan: 12, + render: ({ scopes }) => { + return scopes.length === 0 ? ( + '-' + ) : ( +
+ {scopes.map(({ id, name }) => ( + + {name} + + ))} +
+ ); + }, + }, + ]} + filter={ +
+
+ } + pagination={{ + page, + totalCount, + pageSize: defaultPageSize, + onChange: (page) => { + updateSearchParameters({ page }); + }, + }} + isLoading={isLoading} + errorMessage={error?.body?.message ?? error?.message} + onRetry={async () => mutate(undefined, true)} + /> + ); +} + +export default OrgRoles; diff --git a/packages/console/src/pages/OrganizationTemplate/index.module.scss b/packages/console/src/pages/OrganizationTemplate/index.module.scss new file mode 100644 index 000000000000..386849176e31 --- /dev/null +++ b/packages/console/src/pages/OrganizationTemplate/index.module.scss @@ -0,0 +1,8 @@ +@use '@/scss/underscore' as _; + +.container { + > *:not(:first-child) { + margin-top: _.unit(4); + } +} + diff --git a/packages/console/src/pages/OrganizationTemplate/index.tsx b/packages/console/src/pages/OrganizationTemplate/index.tsx new file mode 100644 index 000000000000..867af0f23efa --- /dev/null +++ b/packages/console/src/pages/OrganizationTemplate/index.tsx @@ -0,0 +1,56 @@ +import { withAppInsights } from '@logto/app-insights/react/AppInsightsReact'; +import classNames from 'classnames'; +import { Outlet } from 'react-router-dom'; + +import Research from '@/assets/icons/research.svg'; +import PageMeta from '@/components/PageMeta'; +import { OrganizationTemplateTabs, organizationTemplateLink } from '@/consts'; +import Button from '@/ds-components/Button'; +import CardTitle from '@/ds-components/CardTitle'; +import DynamicT from '@/ds-components/DynamicT'; +import TabNav, { TabNavItem } from '@/ds-components/TabNav'; +import useDocumentationUrl from '@/hooks/use-documentation-url'; +import * as pageLayout from '@/scss/page-layout.module.scss'; + +import * as styles from './index.module.scss'; + +const basePathname = '/organization-template'; + +function OrganizationTemplate() { + const { getDocumentationUrl } = useDocumentationUrl(); + + return ( +
+ +
+ +
+ + + + + + + + + +
+ ); +} + +export default withAppInsights(OrganizationTemplate); diff --git a/packages/phrases/src/locales/de/translation/admin-console/index.ts b/packages/phrases/src/locales/de/translation/admin-console/index.ts index eae339f6e7a9..8c40600f7e81 100644 --- a/packages/phrases/src/locales/de/translation/admin-console/index.ts +++ b/packages/phrases/src/locales/de/translation/admin-console/index.ts @@ -22,6 +22,7 @@ import logs from './logs.js'; import menu from './menu.js'; import mfa from './mfa.js'; import organization_details from './organization-details.js'; +import organization_template from './organization-template.js'; import organizations from './organizations.js'; import permissions from './permissions.js'; import profile from './profile.js'; @@ -93,6 +94,7 @@ const admin_console = { jwt_claims, invitation, signing_keys, + organization_template, }; export default Object.freeze(admin_console); diff --git a/packages/phrases/src/locales/de/translation/admin-console/organization-template.ts b/packages/phrases/src/locales/de/translation/admin-console/organization-template.ts new file mode 100644 index 000000000000..e6eb31b3bebe --- /dev/null +++ b/packages/phrases/src/locales/de/translation/admin-console/organization-template.ts @@ -0,0 +1,27 @@ +const organization_template = { + title: 'Organization template', + subtitle: + 'In multi-tenant SaaS applications, it\'s common for multiple organizations to share identical access control policies, including permissions and roles. In Logto, this concept is termed "organization template." Using it streamlines the process of constructing and designing your authorization model.', + org_roles: { + tab_name: 'Org roles', + search_placeholder: 'Search by role name', + create_org_roles: 'Create org role', + org_role_column: 'Org role', + permissions_column: 'Permissions', + placeholder_title: 'Organization role', + placeholder_description: + 'Organization role is a grouping of permissions that can be assigned to users. The permissions must come from the predefined organization permissions.', + }, + org_permissions: { + tab_name: 'Org permissions', + search_placeholder: 'Search by permission name', + create_org_permission: 'Create org permission', + permission_column: 'Permission', + description_column: 'Description', + placeholder_title: 'Organization permission', + placeholder_description: + 'Organization permission refers to the authorization to access a resource in the context of organization.', + }, +}; + +export default Object.freeze(organization_template); diff --git a/packages/phrases/src/locales/de/translation/admin-console/tabs.ts b/packages/phrases/src/locales/de/translation/admin-console/tabs.ts index 21318b361c96..1cdcbfc211e2 100644 --- a/packages/phrases/src/locales/de/translation/admin-console/tabs.ts +++ b/packages/phrases/src/locales/de/translation/admin-console/tabs.ts @@ -17,6 +17,7 @@ const tabs = { /** UNTRANSLATED */ jwt_customizer: 'JWT Claims', signing_keys: 'Signierschlüssel', + organization_template: 'Organisationstemplate', }; export default Object.freeze(tabs); diff --git a/packages/phrases/src/locales/en/translation/admin-console/index.ts b/packages/phrases/src/locales/en/translation/admin-console/index.ts index 0cce893d7c75..8631985353d7 100644 --- a/packages/phrases/src/locales/en/translation/admin-console/index.ts +++ b/packages/phrases/src/locales/en/translation/admin-console/index.ts @@ -22,6 +22,7 @@ import logs from './logs.js'; import menu from './menu.js'; import mfa from './mfa.js'; import organization_details from './organization-details.js'; +import organization_template from './organization-template.js'; import organizations from './organizations.js'; import permissions from './permissions.js'; import profile from './profile.js'; @@ -93,6 +94,7 @@ const admin_console = { jwt_claims, invitation, signing_keys, + organization_template, }; export default Object.freeze(admin_console); diff --git a/packages/phrases/src/locales/en/translation/admin-console/organization-template.ts b/packages/phrases/src/locales/en/translation/admin-console/organization-template.ts new file mode 100644 index 000000000000..e6eb31b3bebe --- /dev/null +++ b/packages/phrases/src/locales/en/translation/admin-console/organization-template.ts @@ -0,0 +1,27 @@ +const organization_template = { + title: 'Organization template', + subtitle: + 'In multi-tenant SaaS applications, it\'s common for multiple organizations to share identical access control policies, including permissions and roles. In Logto, this concept is termed "organization template." Using it streamlines the process of constructing and designing your authorization model.', + org_roles: { + tab_name: 'Org roles', + search_placeholder: 'Search by role name', + create_org_roles: 'Create org role', + org_role_column: 'Org role', + permissions_column: 'Permissions', + placeholder_title: 'Organization role', + placeholder_description: + 'Organization role is a grouping of permissions that can be assigned to users. The permissions must come from the predefined organization permissions.', + }, + org_permissions: { + tab_name: 'Org permissions', + search_placeholder: 'Search by permission name', + create_org_permission: 'Create org permission', + permission_column: 'Permission', + description_column: 'Description', + placeholder_title: 'Organization permission', + placeholder_description: + 'Organization permission refers to the authorization to access a resource in the context of organization.', + }, +}; + +export default Object.freeze(organization_template); diff --git a/packages/phrases/src/locales/en/translation/admin-console/tabs.ts b/packages/phrases/src/locales/en/translation/admin-console/tabs.ts index bf7b4f395961..05176456ac46 100644 --- a/packages/phrases/src/locales/en/translation/admin-console/tabs.ts +++ b/packages/phrases/src/locales/en/translation/admin-console/tabs.ts @@ -16,6 +16,7 @@ const tabs = { mfa: 'Multi-factor auth', jwt_customizer: 'JWT Claims', signing_keys: 'Signing keys', + organization_template: 'Organization template', }; export default Object.freeze(tabs); diff --git a/packages/phrases/src/locales/es/translation/admin-console/index.ts b/packages/phrases/src/locales/es/translation/admin-console/index.ts index c0f86555afd5..23a056d9474a 100644 --- a/packages/phrases/src/locales/es/translation/admin-console/index.ts +++ b/packages/phrases/src/locales/es/translation/admin-console/index.ts @@ -22,6 +22,7 @@ import logs from './logs.js'; import menu from './menu.js'; import mfa from './mfa.js'; import organization_details from './organization-details.js'; +import organization_template from './organization-template.js'; import organizations from './organizations.js'; import permissions from './permissions.js'; import profile from './profile.js'; @@ -93,6 +94,7 @@ const admin_console = { jwt_claims, invitation, signing_keys, + organization_template, }; export default Object.freeze(admin_console); diff --git a/packages/phrases/src/locales/es/translation/admin-console/organization-template.ts b/packages/phrases/src/locales/es/translation/admin-console/organization-template.ts new file mode 100644 index 000000000000..e6eb31b3bebe --- /dev/null +++ b/packages/phrases/src/locales/es/translation/admin-console/organization-template.ts @@ -0,0 +1,27 @@ +const organization_template = { + title: 'Organization template', + subtitle: + 'In multi-tenant SaaS applications, it\'s common for multiple organizations to share identical access control policies, including permissions and roles. In Logto, this concept is termed "organization template." Using it streamlines the process of constructing and designing your authorization model.', + org_roles: { + tab_name: 'Org roles', + search_placeholder: 'Search by role name', + create_org_roles: 'Create org role', + org_role_column: 'Org role', + permissions_column: 'Permissions', + placeholder_title: 'Organization role', + placeholder_description: + 'Organization role is a grouping of permissions that can be assigned to users. The permissions must come from the predefined organization permissions.', + }, + org_permissions: { + tab_name: 'Org permissions', + search_placeholder: 'Search by permission name', + create_org_permission: 'Create org permission', + permission_column: 'Permission', + description_column: 'Description', + placeholder_title: 'Organization permission', + placeholder_description: + 'Organization permission refers to the authorization to access a resource in the context of organization.', + }, +}; + +export default Object.freeze(organization_template); diff --git a/packages/phrases/src/locales/es/translation/admin-console/tabs.ts b/packages/phrases/src/locales/es/translation/admin-console/tabs.ts index a0250ea1f9cc..dfd37b30d338 100644 --- a/packages/phrases/src/locales/es/translation/admin-console/tabs.ts +++ b/packages/phrases/src/locales/es/translation/admin-console/tabs.ts @@ -17,6 +17,7 @@ const tabs = { /** UNTRANSLATED */ jwt_customizer: 'JWT Claims', signing_keys: 'Claves de firma', + organization_template: 'Plantilla de organización', }; export default Object.freeze(tabs); diff --git a/packages/phrases/src/locales/fr/translation/admin-console/index.ts b/packages/phrases/src/locales/fr/translation/admin-console/index.ts index 0cce893d7c75..8631985353d7 100644 --- a/packages/phrases/src/locales/fr/translation/admin-console/index.ts +++ b/packages/phrases/src/locales/fr/translation/admin-console/index.ts @@ -22,6 +22,7 @@ import logs from './logs.js'; import menu from './menu.js'; import mfa from './mfa.js'; import organization_details from './organization-details.js'; +import organization_template from './organization-template.js'; import organizations from './organizations.js'; import permissions from './permissions.js'; import profile from './profile.js'; @@ -93,6 +94,7 @@ const admin_console = { jwt_claims, invitation, signing_keys, + organization_template, }; export default Object.freeze(admin_console); diff --git a/packages/phrases/src/locales/fr/translation/admin-console/organization-template.ts b/packages/phrases/src/locales/fr/translation/admin-console/organization-template.ts new file mode 100644 index 000000000000..e6eb31b3bebe --- /dev/null +++ b/packages/phrases/src/locales/fr/translation/admin-console/organization-template.ts @@ -0,0 +1,27 @@ +const organization_template = { + title: 'Organization template', + subtitle: + 'In multi-tenant SaaS applications, it\'s common for multiple organizations to share identical access control policies, including permissions and roles. In Logto, this concept is termed "organization template." Using it streamlines the process of constructing and designing your authorization model.', + org_roles: { + tab_name: 'Org roles', + search_placeholder: 'Search by role name', + create_org_roles: 'Create org role', + org_role_column: 'Org role', + permissions_column: 'Permissions', + placeholder_title: 'Organization role', + placeholder_description: + 'Organization role is a grouping of permissions that can be assigned to users. The permissions must come from the predefined organization permissions.', + }, + org_permissions: { + tab_name: 'Org permissions', + search_placeholder: 'Search by permission name', + create_org_permission: 'Create org permission', + permission_column: 'Permission', + description_column: 'Description', + placeholder_title: 'Organization permission', + placeholder_description: + 'Organization permission refers to the authorization to access a resource in the context of organization.', + }, +}; + +export default Object.freeze(organization_template); diff --git a/packages/phrases/src/locales/fr/translation/admin-console/tabs.ts b/packages/phrases/src/locales/fr/translation/admin-console/tabs.ts index 0e7cfbba8800..3f708cecb526 100644 --- a/packages/phrases/src/locales/fr/translation/admin-console/tabs.ts +++ b/packages/phrases/src/locales/fr/translation/admin-console/tabs.ts @@ -17,6 +17,7 @@ const tabs = { /** UNTRANSLATED */ jwt_customizer: 'JWT Claims', signing_keys: 'Clés de signature', + organization_template: "Modèle d'organisation", }; export default Object.freeze(tabs); diff --git a/packages/phrases/src/locales/it/translation/admin-console/index.ts b/packages/phrases/src/locales/it/translation/admin-console/index.ts index 0cce893d7c75..8631985353d7 100644 --- a/packages/phrases/src/locales/it/translation/admin-console/index.ts +++ b/packages/phrases/src/locales/it/translation/admin-console/index.ts @@ -22,6 +22,7 @@ import logs from './logs.js'; import menu from './menu.js'; import mfa from './mfa.js'; import organization_details from './organization-details.js'; +import organization_template from './organization-template.js'; import organizations from './organizations.js'; import permissions from './permissions.js'; import profile from './profile.js'; @@ -93,6 +94,7 @@ const admin_console = { jwt_claims, invitation, signing_keys, + organization_template, }; export default Object.freeze(admin_console); diff --git a/packages/phrases/src/locales/it/translation/admin-console/organization-template.ts b/packages/phrases/src/locales/it/translation/admin-console/organization-template.ts new file mode 100644 index 000000000000..e6eb31b3bebe --- /dev/null +++ b/packages/phrases/src/locales/it/translation/admin-console/organization-template.ts @@ -0,0 +1,27 @@ +const organization_template = { + title: 'Organization template', + subtitle: + 'In multi-tenant SaaS applications, it\'s common for multiple organizations to share identical access control policies, including permissions and roles. In Logto, this concept is termed "organization template." Using it streamlines the process of constructing and designing your authorization model.', + org_roles: { + tab_name: 'Org roles', + search_placeholder: 'Search by role name', + create_org_roles: 'Create org role', + org_role_column: 'Org role', + permissions_column: 'Permissions', + placeholder_title: 'Organization role', + placeholder_description: + 'Organization role is a grouping of permissions that can be assigned to users. The permissions must come from the predefined organization permissions.', + }, + org_permissions: { + tab_name: 'Org permissions', + search_placeholder: 'Search by permission name', + create_org_permission: 'Create org permission', + permission_column: 'Permission', + description_column: 'Description', + placeholder_title: 'Organization permission', + placeholder_description: + 'Organization permission refers to the authorization to access a resource in the context of organization.', + }, +}; + +export default Object.freeze(organization_template); diff --git a/packages/phrases/src/locales/it/translation/admin-console/tabs.ts b/packages/phrases/src/locales/it/translation/admin-console/tabs.ts index 94cf8d9fb971..f2e3fd93733a 100644 --- a/packages/phrases/src/locales/it/translation/admin-console/tabs.ts +++ b/packages/phrases/src/locales/it/translation/admin-console/tabs.ts @@ -17,6 +17,7 @@ const tabs = { /** UNTRANSLATED */ jwt_customizer: 'JWT Claims', signing_keys: 'Chiavi di firma', + organization_template: 'Modello di organizzazione', }; export default Object.freeze(tabs); diff --git a/packages/phrases/src/locales/ja/translation/admin-console/index.ts b/packages/phrases/src/locales/ja/translation/admin-console/index.ts index 0cce893d7c75..8631985353d7 100644 --- a/packages/phrases/src/locales/ja/translation/admin-console/index.ts +++ b/packages/phrases/src/locales/ja/translation/admin-console/index.ts @@ -22,6 +22,7 @@ import logs from './logs.js'; import menu from './menu.js'; import mfa from './mfa.js'; import organization_details from './organization-details.js'; +import organization_template from './organization-template.js'; import organizations from './organizations.js'; import permissions from './permissions.js'; import profile from './profile.js'; @@ -93,6 +94,7 @@ const admin_console = { jwt_claims, invitation, signing_keys, + organization_template, }; export default Object.freeze(admin_console); diff --git a/packages/phrases/src/locales/ja/translation/admin-console/organization-template.ts b/packages/phrases/src/locales/ja/translation/admin-console/organization-template.ts new file mode 100644 index 000000000000..e6eb31b3bebe --- /dev/null +++ b/packages/phrases/src/locales/ja/translation/admin-console/organization-template.ts @@ -0,0 +1,27 @@ +const organization_template = { + title: 'Organization template', + subtitle: + 'In multi-tenant SaaS applications, it\'s common for multiple organizations to share identical access control policies, including permissions and roles. In Logto, this concept is termed "organization template." Using it streamlines the process of constructing and designing your authorization model.', + org_roles: { + tab_name: 'Org roles', + search_placeholder: 'Search by role name', + create_org_roles: 'Create org role', + org_role_column: 'Org role', + permissions_column: 'Permissions', + placeholder_title: 'Organization role', + placeholder_description: + 'Organization role is a grouping of permissions that can be assigned to users. The permissions must come from the predefined organization permissions.', + }, + org_permissions: { + tab_name: 'Org permissions', + search_placeholder: 'Search by permission name', + create_org_permission: 'Create org permission', + permission_column: 'Permission', + description_column: 'Description', + placeholder_title: 'Organization permission', + placeholder_description: + 'Organization permission refers to the authorization to access a resource in the context of organization.', + }, +}; + +export default Object.freeze(organization_template); diff --git a/packages/phrases/src/locales/ja/translation/admin-console/tabs.ts b/packages/phrases/src/locales/ja/translation/admin-console/tabs.ts index d09a38e68b9d..0ae76dc2f61d 100644 --- a/packages/phrases/src/locales/ja/translation/admin-console/tabs.ts +++ b/packages/phrases/src/locales/ja/translation/admin-console/tabs.ts @@ -17,6 +17,7 @@ const tabs = { /** UNTRANSLATED */ jwt_customizer: 'JWT Claims', signing_keys: '署名キー', + organization_template: '組織テンプレート', }; export default Object.freeze(tabs); diff --git a/packages/phrases/src/locales/ko/translation/admin-console/index.ts b/packages/phrases/src/locales/ko/translation/admin-console/index.ts index 35733c81f063..02bd0a400ad7 100644 --- a/packages/phrases/src/locales/ko/translation/admin-console/index.ts +++ b/packages/phrases/src/locales/ko/translation/admin-console/index.ts @@ -22,6 +22,7 @@ import logs from './logs.js'; import menu from './menu.js'; import mfa from './mfa.js'; import organization_details from './organization-details.js'; +import organization_template from './organization-template.js'; import organizations from './organizations.js'; import permissions from './permissions.js'; import profile from './profile.js'; @@ -93,6 +94,7 @@ const admin_console = { jwt_claims, invitation, signing_keys, + organization_template, }; export default Object.freeze(admin_console); diff --git a/packages/phrases/src/locales/ko/translation/admin-console/organization-template.ts b/packages/phrases/src/locales/ko/translation/admin-console/organization-template.ts new file mode 100644 index 000000000000..e6eb31b3bebe --- /dev/null +++ b/packages/phrases/src/locales/ko/translation/admin-console/organization-template.ts @@ -0,0 +1,27 @@ +const organization_template = { + title: 'Organization template', + subtitle: + 'In multi-tenant SaaS applications, it\'s common for multiple organizations to share identical access control policies, including permissions and roles. In Logto, this concept is termed "organization template." Using it streamlines the process of constructing and designing your authorization model.', + org_roles: { + tab_name: 'Org roles', + search_placeholder: 'Search by role name', + create_org_roles: 'Create org role', + org_role_column: 'Org role', + permissions_column: 'Permissions', + placeholder_title: 'Organization role', + placeholder_description: + 'Organization role is a grouping of permissions that can be assigned to users. The permissions must come from the predefined organization permissions.', + }, + org_permissions: { + tab_name: 'Org permissions', + search_placeholder: 'Search by permission name', + create_org_permission: 'Create org permission', + permission_column: 'Permission', + description_column: 'Description', + placeholder_title: 'Organization permission', + placeholder_description: + 'Organization permission refers to the authorization to access a resource in the context of organization.', + }, +}; + +export default Object.freeze(organization_template); diff --git a/packages/phrases/src/locales/ko/translation/admin-console/tabs.ts b/packages/phrases/src/locales/ko/translation/admin-console/tabs.ts index ad34ac2ce9a4..a1b7c3867fb0 100644 --- a/packages/phrases/src/locales/ko/translation/admin-console/tabs.ts +++ b/packages/phrases/src/locales/ko/translation/admin-console/tabs.ts @@ -17,6 +17,7 @@ const tabs = { /** UNTRANSLATED */ jwt_customizer: 'JWT Claims', signing_keys: '서명 키', + organization_template: '조직 템플릿', }; export default Object.freeze(tabs); diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/index.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/index.ts index 35733c81f063..02bd0a400ad7 100644 --- a/packages/phrases/src/locales/pl-pl/translation/admin-console/index.ts +++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/index.ts @@ -22,6 +22,7 @@ import logs from './logs.js'; import menu from './menu.js'; import mfa from './mfa.js'; import organization_details from './organization-details.js'; +import organization_template from './organization-template.js'; import organizations from './organizations.js'; import permissions from './permissions.js'; import profile from './profile.js'; @@ -93,6 +94,7 @@ const admin_console = { jwt_claims, invitation, signing_keys, + organization_template, }; export default Object.freeze(admin_console); diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/organization-template.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/organization-template.ts new file mode 100644 index 000000000000..e6eb31b3bebe --- /dev/null +++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/organization-template.ts @@ -0,0 +1,27 @@ +const organization_template = { + title: 'Organization template', + subtitle: + 'In multi-tenant SaaS applications, it\'s common for multiple organizations to share identical access control policies, including permissions and roles. In Logto, this concept is termed "organization template." Using it streamlines the process of constructing and designing your authorization model.', + org_roles: { + tab_name: 'Org roles', + search_placeholder: 'Search by role name', + create_org_roles: 'Create org role', + org_role_column: 'Org role', + permissions_column: 'Permissions', + placeholder_title: 'Organization role', + placeholder_description: + 'Organization role is a grouping of permissions that can be assigned to users. The permissions must come from the predefined organization permissions.', + }, + org_permissions: { + tab_name: 'Org permissions', + search_placeholder: 'Search by permission name', + create_org_permission: 'Create org permission', + permission_column: 'Permission', + description_column: 'Description', + placeholder_title: 'Organization permission', + placeholder_description: + 'Organization permission refers to the authorization to access a resource in the context of organization.', + }, +}; + +export default Object.freeze(organization_template); diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/tabs.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/tabs.ts index 9b3ec68d096c..f78b8c422a41 100644 --- a/packages/phrases/src/locales/pl-pl/translation/admin-console/tabs.ts +++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/tabs.ts @@ -17,6 +17,7 @@ const tabs = { /** UNTRANSLATED */ jwt_customizer: 'JWT Claims', signing_keys: 'Klucze do podpisu', + organization_template: 'Szablon organizacji', }; export default Object.freeze(tabs); diff --git a/packages/phrases/src/locales/pt-br/translation/admin-console/index.ts b/packages/phrases/src/locales/pt-br/translation/admin-console/index.ts index 2f23eeeca9a9..5b98991b6c0b 100644 --- a/packages/phrases/src/locales/pt-br/translation/admin-console/index.ts +++ b/packages/phrases/src/locales/pt-br/translation/admin-console/index.ts @@ -22,6 +22,7 @@ import logs from './logs.js'; import menu from './menu.js'; import mfa from './mfa.js'; import organization_details from './organization-details.js'; +import organization_template from './organization-template.js'; import organizations from './organizations.js'; import permissions from './permissions.js'; import profile from './profile.js'; @@ -93,6 +94,7 @@ const admin_console = { jwt_claims, invitation, signing_keys, + organization_template, }; export default Object.freeze(admin_console); diff --git a/packages/phrases/src/locales/pt-br/translation/admin-console/organization-template.ts b/packages/phrases/src/locales/pt-br/translation/admin-console/organization-template.ts new file mode 100644 index 000000000000..e6eb31b3bebe --- /dev/null +++ b/packages/phrases/src/locales/pt-br/translation/admin-console/organization-template.ts @@ -0,0 +1,27 @@ +const organization_template = { + title: 'Organization template', + subtitle: + 'In multi-tenant SaaS applications, it\'s common for multiple organizations to share identical access control policies, including permissions and roles. In Logto, this concept is termed "organization template." Using it streamlines the process of constructing and designing your authorization model.', + org_roles: { + tab_name: 'Org roles', + search_placeholder: 'Search by role name', + create_org_roles: 'Create org role', + org_role_column: 'Org role', + permissions_column: 'Permissions', + placeholder_title: 'Organization role', + placeholder_description: + 'Organization role is a grouping of permissions that can be assigned to users. The permissions must come from the predefined organization permissions.', + }, + org_permissions: { + tab_name: 'Org permissions', + search_placeholder: 'Search by permission name', + create_org_permission: 'Create org permission', + permission_column: 'Permission', + description_column: 'Description', + placeholder_title: 'Organization permission', + placeholder_description: + 'Organization permission refers to the authorization to access a resource in the context of organization.', + }, +}; + +export default Object.freeze(organization_template); diff --git a/packages/phrases/src/locales/pt-br/translation/admin-console/tabs.ts b/packages/phrases/src/locales/pt-br/translation/admin-console/tabs.ts index 89898080cd9c..da0a6b13043a 100644 --- a/packages/phrases/src/locales/pt-br/translation/admin-console/tabs.ts +++ b/packages/phrases/src/locales/pt-br/translation/admin-console/tabs.ts @@ -17,6 +17,7 @@ const tabs = { /** UNTRANSLATED */ jwt_customizer: 'JWT Claims', signing_keys: 'Chaves de assinatura', + organization_template: 'Modelo de organização', }; export default Object.freeze(tabs); diff --git a/packages/phrases/src/locales/pt-pt/translation/admin-console/index.ts b/packages/phrases/src/locales/pt-pt/translation/admin-console/index.ts index 388c10bb23bb..ae2dbc4024e9 100644 --- a/packages/phrases/src/locales/pt-pt/translation/admin-console/index.ts +++ b/packages/phrases/src/locales/pt-pt/translation/admin-console/index.ts @@ -22,6 +22,7 @@ import logs from './logs.js'; import menu from './menu.js'; import mfa from './mfa.js'; import organization_details from './organization-details.js'; +import organization_template from './organization-template.js'; import organizations from './organizations.js'; import permissions from './permissions.js'; import profile from './profile.js'; @@ -93,6 +94,7 @@ const admin_console = { jwt_claims, invitation, signing_keys, + organization_template, }; export default Object.freeze(admin_console); diff --git a/packages/phrases/src/locales/pt-pt/translation/admin-console/organization-template.ts b/packages/phrases/src/locales/pt-pt/translation/admin-console/organization-template.ts new file mode 100644 index 000000000000..e6eb31b3bebe --- /dev/null +++ b/packages/phrases/src/locales/pt-pt/translation/admin-console/organization-template.ts @@ -0,0 +1,27 @@ +const organization_template = { + title: 'Organization template', + subtitle: + 'In multi-tenant SaaS applications, it\'s common for multiple organizations to share identical access control policies, including permissions and roles. In Logto, this concept is termed "organization template." Using it streamlines the process of constructing and designing your authorization model.', + org_roles: { + tab_name: 'Org roles', + search_placeholder: 'Search by role name', + create_org_roles: 'Create org role', + org_role_column: 'Org role', + permissions_column: 'Permissions', + placeholder_title: 'Organization role', + placeholder_description: + 'Organization role is a grouping of permissions that can be assigned to users. The permissions must come from the predefined organization permissions.', + }, + org_permissions: { + tab_name: 'Org permissions', + search_placeholder: 'Search by permission name', + create_org_permission: 'Create org permission', + permission_column: 'Permission', + description_column: 'Description', + placeholder_title: 'Organization permission', + placeholder_description: + 'Organization permission refers to the authorization to access a resource in the context of organization.', + }, +}; + +export default Object.freeze(organization_template); diff --git a/packages/phrases/src/locales/pt-pt/translation/admin-console/tabs.ts b/packages/phrases/src/locales/pt-pt/translation/admin-console/tabs.ts index 83c06bd28d4a..5160cd383641 100644 --- a/packages/phrases/src/locales/pt-pt/translation/admin-console/tabs.ts +++ b/packages/phrases/src/locales/pt-pt/translation/admin-console/tabs.ts @@ -17,6 +17,7 @@ const tabs = { /** UNTRANSLATED */ jwt_customizer: 'JWT Claims', signing_keys: 'Chaves de assinatura', + organization_template: 'Modelo de organização', }; export default Object.freeze(tabs); diff --git a/packages/phrases/src/locales/ru/translation/admin-console/index.ts b/packages/phrases/src/locales/ru/translation/admin-console/index.ts index 95d63b96c340..2c8c12178a93 100644 --- a/packages/phrases/src/locales/ru/translation/admin-console/index.ts +++ b/packages/phrases/src/locales/ru/translation/admin-console/index.ts @@ -22,6 +22,7 @@ import logs from './logs.js'; import menu from './menu.js'; import mfa from './mfa.js'; import organization_details from './organization-details.js'; +import organization_template from './organization-template.js'; import organizations from './organizations.js'; import permissions from './permissions.js'; import profile from './profile.js'; @@ -93,6 +94,7 @@ const admin_console = { jwt_claims, invitation, signing_keys, + organization_template, }; export default Object.freeze(admin_console); diff --git a/packages/phrases/src/locales/ru/translation/admin-console/organization-template.ts b/packages/phrases/src/locales/ru/translation/admin-console/organization-template.ts new file mode 100644 index 000000000000..e6eb31b3bebe --- /dev/null +++ b/packages/phrases/src/locales/ru/translation/admin-console/organization-template.ts @@ -0,0 +1,27 @@ +const organization_template = { + title: 'Organization template', + subtitle: + 'In multi-tenant SaaS applications, it\'s common for multiple organizations to share identical access control policies, including permissions and roles. In Logto, this concept is termed "organization template." Using it streamlines the process of constructing and designing your authorization model.', + org_roles: { + tab_name: 'Org roles', + search_placeholder: 'Search by role name', + create_org_roles: 'Create org role', + org_role_column: 'Org role', + permissions_column: 'Permissions', + placeholder_title: 'Organization role', + placeholder_description: + 'Organization role is a grouping of permissions that can be assigned to users. The permissions must come from the predefined organization permissions.', + }, + org_permissions: { + tab_name: 'Org permissions', + search_placeholder: 'Search by permission name', + create_org_permission: 'Create org permission', + permission_column: 'Permission', + description_column: 'Description', + placeholder_title: 'Organization permission', + placeholder_description: + 'Organization permission refers to the authorization to access a resource in the context of organization.', + }, +}; + +export default Object.freeze(organization_template); diff --git a/packages/phrases/src/locales/ru/translation/admin-console/tabs.ts b/packages/phrases/src/locales/ru/translation/admin-console/tabs.ts index 415daecc3a11..795488f9552c 100644 --- a/packages/phrases/src/locales/ru/translation/admin-console/tabs.ts +++ b/packages/phrases/src/locales/ru/translation/admin-console/tabs.ts @@ -17,6 +17,7 @@ const tabs = { /** UNTRANSLATED */ jwt_customizer: 'JWT Claims', signing_keys: 'Ключи подписи', + organization_template: 'Шаблон организации', }; export default Object.freeze(tabs); diff --git a/packages/phrases/src/locales/tr-tr/translation/admin-console/index.ts b/packages/phrases/src/locales/tr-tr/translation/admin-console/index.ts index 566c8bad9b45..2acada991cfb 100644 --- a/packages/phrases/src/locales/tr-tr/translation/admin-console/index.ts +++ b/packages/phrases/src/locales/tr-tr/translation/admin-console/index.ts @@ -22,6 +22,7 @@ import logs from './logs.js'; import menu from './menu.js'; import mfa from './mfa.js'; import organization_details from './organization-details.js'; +import organization_template from './organization-template.js'; import organizations from './organizations.js'; import permissions from './permissions.js'; import profile from './profile.js'; @@ -93,6 +94,7 @@ const admin_console = { jwt_claims, invitation, signing_keys, + organization_template, }; export default Object.freeze(admin_console); diff --git a/packages/phrases/src/locales/tr-tr/translation/admin-console/organization-template.ts b/packages/phrases/src/locales/tr-tr/translation/admin-console/organization-template.ts new file mode 100644 index 000000000000..e6eb31b3bebe --- /dev/null +++ b/packages/phrases/src/locales/tr-tr/translation/admin-console/organization-template.ts @@ -0,0 +1,27 @@ +const organization_template = { + title: 'Organization template', + subtitle: + 'In multi-tenant SaaS applications, it\'s common for multiple organizations to share identical access control policies, including permissions and roles. In Logto, this concept is termed "organization template." Using it streamlines the process of constructing and designing your authorization model.', + org_roles: { + tab_name: 'Org roles', + search_placeholder: 'Search by role name', + create_org_roles: 'Create org role', + org_role_column: 'Org role', + permissions_column: 'Permissions', + placeholder_title: 'Organization role', + placeholder_description: + 'Organization role is a grouping of permissions that can be assigned to users. The permissions must come from the predefined organization permissions.', + }, + org_permissions: { + tab_name: 'Org permissions', + search_placeholder: 'Search by permission name', + create_org_permission: 'Create org permission', + permission_column: 'Permission', + description_column: 'Description', + placeholder_title: 'Organization permission', + placeholder_description: + 'Organization permission refers to the authorization to access a resource in the context of organization.', + }, +}; + +export default Object.freeze(organization_template); diff --git a/packages/phrases/src/locales/tr-tr/translation/admin-console/tabs.ts b/packages/phrases/src/locales/tr-tr/translation/admin-console/tabs.ts index 1a6c0cd1bd10..8eaa119132b6 100644 --- a/packages/phrases/src/locales/tr-tr/translation/admin-console/tabs.ts +++ b/packages/phrases/src/locales/tr-tr/translation/admin-console/tabs.ts @@ -17,6 +17,7 @@ const tabs = { /** UNTRANSLATED */ jwt_customizer: 'JWT Claims', signing_keys: 'İmza anahtarları', + organization_template: 'Kuruluş şablonu', }; export default Object.freeze(tabs); diff --git a/packages/phrases/src/locales/zh-cn/translation/admin-console/index.ts b/packages/phrases/src/locales/zh-cn/translation/admin-console/index.ts index cf934d13811c..7e5120017064 100644 --- a/packages/phrases/src/locales/zh-cn/translation/admin-console/index.ts +++ b/packages/phrases/src/locales/zh-cn/translation/admin-console/index.ts @@ -22,6 +22,7 @@ import logs from './logs.js'; import menu from './menu.js'; import mfa from './mfa.js'; import organization_details from './organization-details.js'; +import organization_template from './organization-template.js'; import organizations from './organizations.js'; import permissions from './permissions.js'; import profile from './profile.js'; @@ -93,6 +94,7 @@ const admin_console = { jwt_claims, invitation, signing_keys, + organization_template, }; export default Object.freeze(admin_console); diff --git a/packages/phrases/src/locales/zh-cn/translation/admin-console/organization-template.ts b/packages/phrases/src/locales/zh-cn/translation/admin-console/organization-template.ts new file mode 100644 index 000000000000..e6eb31b3bebe --- /dev/null +++ b/packages/phrases/src/locales/zh-cn/translation/admin-console/organization-template.ts @@ -0,0 +1,27 @@ +const organization_template = { + title: 'Organization template', + subtitle: + 'In multi-tenant SaaS applications, it\'s common for multiple organizations to share identical access control policies, including permissions and roles. In Logto, this concept is termed "organization template." Using it streamlines the process of constructing and designing your authorization model.', + org_roles: { + tab_name: 'Org roles', + search_placeholder: 'Search by role name', + create_org_roles: 'Create org role', + org_role_column: 'Org role', + permissions_column: 'Permissions', + placeholder_title: 'Organization role', + placeholder_description: + 'Organization role is a grouping of permissions that can be assigned to users. The permissions must come from the predefined organization permissions.', + }, + org_permissions: { + tab_name: 'Org permissions', + search_placeholder: 'Search by permission name', + create_org_permission: 'Create org permission', + permission_column: 'Permission', + description_column: 'Description', + placeholder_title: 'Organization permission', + placeholder_description: + 'Organization permission refers to the authorization to access a resource in the context of organization.', + }, +}; + +export default Object.freeze(organization_template); diff --git a/packages/phrases/src/locales/zh-cn/translation/admin-console/tabs.ts b/packages/phrases/src/locales/zh-cn/translation/admin-console/tabs.ts index b30cdca6e603..c4e0446b8f5d 100644 --- a/packages/phrases/src/locales/zh-cn/translation/admin-console/tabs.ts +++ b/packages/phrases/src/locales/zh-cn/translation/admin-console/tabs.ts @@ -17,6 +17,7 @@ const tabs = { /** UNTRANSLATED */ jwt_customizer: 'JWT Claims', signing_keys: '签名密钥', + organization_template: '组织模板', }; export default Object.freeze(tabs); diff --git a/packages/phrases/src/locales/zh-hk/translation/admin-console/index.ts b/packages/phrases/src/locales/zh-hk/translation/admin-console/index.ts index 56a465ece3d9..2341ad804406 100644 --- a/packages/phrases/src/locales/zh-hk/translation/admin-console/index.ts +++ b/packages/phrases/src/locales/zh-hk/translation/admin-console/index.ts @@ -22,6 +22,7 @@ import logs from './logs.js'; import menu from './menu.js'; import mfa from './mfa.js'; import organization_details from './organization-details.js'; +import organization_template from './organization-template.js'; import organizations from './organizations.js'; import permissions from './permissions.js'; import profile from './profile.js'; @@ -93,6 +94,7 @@ const admin_console = { jwt_claims, invitation, signing_keys, + organization_template, }; export default Object.freeze(admin_console); diff --git a/packages/phrases/src/locales/zh-hk/translation/admin-console/organization-template.ts b/packages/phrases/src/locales/zh-hk/translation/admin-console/organization-template.ts new file mode 100644 index 000000000000..e6eb31b3bebe --- /dev/null +++ b/packages/phrases/src/locales/zh-hk/translation/admin-console/organization-template.ts @@ -0,0 +1,27 @@ +const organization_template = { + title: 'Organization template', + subtitle: + 'In multi-tenant SaaS applications, it\'s common for multiple organizations to share identical access control policies, including permissions and roles. In Logto, this concept is termed "organization template." Using it streamlines the process of constructing and designing your authorization model.', + org_roles: { + tab_name: 'Org roles', + search_placeholder: 'Search by role name', + create_org_roles: 'Create org role', + org_role_column: 'Org role', + permissions_column: 'Permissions', + placeholder_title: 'Organization role', + placeholder_description: + 'Organization role is a grouping of permissions that can be assigned to users. The permissions must come from the predefined organization permissions.', + }, + org_permissions: { + tab_name: 'Org permissions', + search_placeholder: 'Search by permission name', + create_org_permission: 'Create org permission', + permission_column: 'Permission', + description_column: 'Description', + placeholder_title: 'Organization permission', + placeholder_description: + 'Organization permission refers to the authorization to access a resource in the context of organization.', + }, +}; + +export default Object.freeze(organization_template); diff --git a/packages/phrases/src/locales/zh-hk/translation/admin-console/tabs.ts b/packages/phrases/src/locales/zh-hk/translation/admin-console/tabs.ts index 741f4c9132d8..63290d16c4f2 100644 --- a/packages/phrases/src/locales/zh-hk/translation/admin-console/tabs.ts +++ b/packages/phrases/src/locales/zh-hk/translation/admin-console/tabs.ts @@ -17,6 +17,7 @@ const tabs = { /** UNTRANSLATED */ jwt_customizer: 'JWT Claims', signing_keys: '簽署密鑰', + organization_template: '組織模板', }; export default Object.freeze(tabs); diff --git a/packages/phrases/src/locales/zh-tw/translation/admin-console/index.ts b/packages/phrases/src/locales/zh-tw/translation/admin-console/index.ts index 56a465ece3d9..2341ad804406 100644 --- a/packages/phrases/src/locales/zh-tw/translation/admin-console/index.ts +++ b/packages/phrases/src/locales/zh-tw/translation/admin-console/index.ts @@ -22,6 +22,7 @@ import logs from './logs.js'; import menu from './menu.js'; import mfa from './mfa.js'; import organization_details from './organization-details.js'; +import organization_template from './organization-template.js'; import organizations from './organizations.js'; import permissions from './permissions.js'; import profile from './profile.js'; @@ -93,6 +94,7 @@ const admin_console = { jwt_claims, invitation, signing_keys, + organization_template, }; export default Object.freeze(admin_console); diff --git a/packages/phrases/src/locales/zh-tw/translation/admin-console/organization-template.ts b/packages/phrases/src/locales/zh-tw/translation/admin-console/organization-template.ts new file mode 100644 index 000000000000..e6eb31b3bebe --- /dev/null +++ b/packages/phrases/src/locales/zh-tw/translation/admin-console/organization-template.ts @@ -0,0 +1,27 @@ +const organization_template = { + title: 'Organization template', + subtitle: + 'In multi-tenant SaaS applications, it\'s common for multiple organizations to share identical access control policies, including permissions and roles. In Logto, this concept is termed "organization template." Using it streamlines the process of constructing and designing your authorization model.', + org_roles: { + tab_name: 'Org roles', + search_placeholder: 'Search by role name', + create_org_roles: 'Create org role', + org_role_column: 'Org role', + permissions_column: 'Permissions', + placeholder_title: 'Organization role', + placeholder_description: + 'Organization role is a grouping of permissions that can be assigned to users. The permissions must come from the predefined organization permissions.', + }, + org_permissions: { + tab_name: 'Org permissions', + search_placeholder: 'Search by permission name', + create_org_permission: 'Create org permission', + permission_column: 'Permission', + description_column: 'Description', + placeholder_title: 'Organization permission', + placeholder_description: + 'Organization permission refers to the authorization to access a resource in the context of organization.', + }, +}; + +export default Object.freeze(organization_template); diff --git a/packages/phrases/src/locales/zh-tw/translation/admin-console/tabs.ts b/packages/phrases/src/locales/zh-tw/translation/admin-console/tabs.ts index d723454cf2d9..f139b3bdc727 100644 --- a/packages/phrases/src/locales/zh-tw/translation/admin-console/tabs.ts +++ b/packages/phrases/src/locales/zh-tw/translation/admin-console/tabs.ts @@ -17,6 +17,7 @@ const tabs = { /** UNTRANSLATED */ jwt_customizer: 'JWT Claims', signing_keys: '簽署密鑰', + organization_template: '組織模板', }; export default Object.freeze(tabs);