Skip to content

Commit

Permalink
fix(ui): public users unable to log out (#10188)
Browse files Browse the repository at this point in the history
Fixes #10180. When logged in as an unauthorized user who cannot access
the admin panel, the user is unable to log out through the prompted
`/admin/logout` page. This was because that page was using an incorrect
API endpoint, reading from `admin.user` instead of `user.collection`
when formatting the route. This page was also able to get stuck in an
infinite loading state when attempting to log out without any user at
all. Now, public users can properly log out and then back in with
another user who might have access. The messaging around this was also
misleading. Instead of displaying the "Unauthorized, you must be logged
in to make this request" message, we now display a new "Unauthorized,
this user does not have access to the admin panel" message for added
clarity.
  • Loading branch information
jacobsfletch authored Dec 27, 2024
1 parent 5613a7e commit f3aebe3
Show file tree
Hide file tree
Showing 52 changed files with 792 additions and 706 deletions.
1 change: 1 addition & 0 deletions packages/next/src/utilities/initPage/handleAuthRedirect.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ type Args = {
searchParams: { [key: string]: string | string[] }
user?: User
}

export const handleAuthRedirect = ({ config, route, searchParams, user }: Args): string => {
const {
admin: {
Expand Down
2 changes: 1 addition & 1 deletion packages/next/src/utilities/initPage/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ export const initPage = async ({
},
})
?.then((res) => res.docs?.[0]?.value as string)
} catch (error) {} // eslint-disable-line no-empty
} catch (_err) {} // eslint-disable-line no-empty
}

locale = findLocaleFromCode(localization, localeCode)
Expand Down
7 changes: 6 additions & 1 deletion packages/next/src/views/Logout/LogoutClient.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,11 @@ export const LogoutClient: React.FC<{
const { adminRoute, inactivity, redirect } = props

const { logOut, user } = useAuth()

const [isLoggedOut, setIsLoggedOut] = React.useState<boolean>(!user)

const logOutSuccessRef = React.useRef(false)

const [loginRoute] = React.useState(() =>
formatAdminURL({
adminRoute,
Expand Down Expand Up @@ -49,8 +52,10 @@ export const LogoutClient: React.FC<{
useEffect(() => {
if (!isLoggedOut) {
void handleLogOut()
} else {
router.push(loginRoute)
}
}, [handleLogOut, isLoggedOut])
}, [handleLogOut, isLoggedOut, loginRoute, router])

if (isLoggedOut && inactivity) {
return (
Expand Down
3 changes: 2 additions & 1 deletion packages/next/src/views/Unauthorized/index.scss
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@

@layer payload-default {
.unauthorized {
&__button {
&__button.btn {
margin: 0;
margin-block: 0;
}
}
}
7 changes: 5 additions & 2 deletions packages/next/src/views/Unauthorized/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ export const UnauthorizedView: PayloadServerReactComponent<AdminViewComponent> =
initPageResult,
}) => {
const {
permissions,
req: {
i18n,
payload: {
Expand All @@ -28,16 +29,18 @@ export const UnauthorizedView: PayloadServerReactComponent<AdminViewComponent> =
routes: { admin: adminRoute },
},
},
user,
},
} = initPageResult

return (
<div className={baseClass}>
<FormHeader
description={i18n.t('error:notAllowedToAccessPage')}
heading={i18n.t('error:unauthorized')}
heading={i18n.t(
user && !permissions.canAccessAdmin ? 'error:unauthorizedAdmin' : 'error:unauthorized',
)}
/>

<Button
className={`${baseClass}__button`}
el="link"
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/clientKeys.ts
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ export const clientTranslationKeys = createClientTranslationKeys([
'error:unableToReindexCollection',
'error:unableToUpdateCount',
'error:unauthorized',
'error:unauthorizedAdmin',
'error:unknown',
'error:unspecific',
'error:userEmailAlreadyRegistered',
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/ar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,7 @@ export const arTranslations: DefaultTranslationsObject = {
unableToReindexCollection: 'خطأ في إعادة فهرسة المجموعة {{collection}}. تم إيقاف العملية.',
unableToUpdateCount: 'يتعذّر تحديث {{count}} من {{total}} {{label}}.',
unauthorized: 'غير مصرّح لك ، عليك أن تقوم بتسجيل الدّخول لتتمكّن من تقديم هذا الطّلب.',
unauthorizedAdmin: 'غير مصرّح لك بالوصول إلى لوحة التحكّم.',
unknown: 'حدث خطأ غير معروف.',
unPublishingDocument: 'حدث خطأ أثناء إلغاء نشر هذا المستند.',
unspecific: 'حدث خطأ.',
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/az.ts
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ export const azTranslations: DefaultTranslationsObject = {
'{{collection}} kolleksiyasının yenidən indekslənməsi zamanı səhv baş verdi. Əməliyyat dayandırıldı.',
unableToUpdateCount: '{{count}} dən {{total}} {{label}} yenilənə bilmir.',
unauthorized: 'İcazəniz yoxdur, bu tələbi yerinə yetirmək üçün daxil olmalısınız.',
unauthorizedAdmin: 'Bu əməliyyatı yerinə yetirmək üçün admin olmalısınız.',
unknown: 'Naməlum bir xəta baş verdi.',
unPublishingDocument: 'Bu sənədin nəşrini ləğv etmək zamanı problem baş verdi.',
unspecific: 'Xəta baş verdi.',
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/bg.ts
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ export const bgTranslations: DefaultTranslationsObject = {
'Грешка при преиндексиране на колекцията {{collection}}. Операцията е прекратена.',
unableToUpdateCount: 'Не беше възможно да се обновят {{count}} от {{total}} {{label}}.',
unauthorized: 'Неоторизиран, трябва да влезеш, за да извършиш тази заявка.',
unauthorizedAdmin: 'Неоторизиран, трябва да си администратор, за да извършиш тази заявка.',
unknown: 'Неизвестна грешка.',
unPublishingDocument: 'Имаше проблем при скриването на този документ.',
unspecific: 'Грешка.',
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/cs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ export const csTranslations: DefaultTranslationsObject = {
'Chyba při přeindexování kolekce {{collection}}. Operace byla přerušena.',
unableToUpdateCount: 'Nelze aktualizovat {{count}} z {{total}} {{label}}.',
unauthorized: 'Neautorizováno, pro zadání tohoto požadavku musíte být přihlášeni.',
unauthorizedAdmin: 'Neautorizováno, tento uživatel nemá přístup k administraci.',
unknown: 'Došlo k neznámé chybě.',
unPublishingDocument: 'Při zrušení publikování tohoto dokumentu došlo k chybě.',
unspecific: 'Došlo k chybě.',
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/da.ts
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,7 @@ export const daTranslations: DefaultTranslationsObject = {
'Fejl ved genindeksering af samling {{collection}}. Operationen blev afbrudt.',
unableToUpdateCount: 'Kunne ikke slette {{count}} mangler {{total}} {{label}}.',
unauthorized: 'Uautoriseret, log in for at gennemføre handlingen.',
unauthorizedAdmin: 'Uautoriseret, denne bruger har ikke adgang til adminpanelet.',
unknown: 'En ukendt fejl er opstået.',
unPublishingDocument: 'Der opstod et problem med at ophæve udgivelsen af dette dokument.',
unspecific: 'En fejl er opstået.',
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/de.ts
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@ export const deTranslations: DefaultTranslationsObject = {
'Fehler beim Neuindizieren der Sammlung {{collection}}. Vorgang abgebrochen.',
unableToUpdateCount: '{{count}} von {{total}} {{label}} konnte nicht aktualisiert werden.',
unauthorized: 'Nicht autorisiert - du musst angemeldet sein, um diese Anfrage zu stellen.',
unauthorizedAdmin: 'Nicht autorisiert, dieser Benutzer hat keinen Zugriff auf das Admin-Panel.',
unknown: 'Ein unbekannter Fehler ist aufgetreten.',
unPublishingDocument: 'Es gab ein Problem, dieses Dokument auf Entwurf zu setzen.',
unspecific: 'Ein Fehler ist aufgetreten.',
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ export const enTranslations = {
unableToReindexCollection: 'Error reindexing collection {{collection}}. Operation aborted.',
unableToUpdateCount: 'Unable to update {{count}} out of {{total}} {{label}}.',
unauthorized: 'Unauthorized, you must be logged in to make this request.',
unauthorizedAdmin: 'Unauthorized, this user does not have access to the admin panel.',
unknown: 'An unknown error has occurred.',
unPublishingDocument: 'There was a problem while un-publishing this document.',
unspecific: 'An error has occurred.',
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/es.ts
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ export const esTranslations: DefaultTranslationsObject = {
'Error al reindexar la colección {{collection}}. Operación abortada.',
unableToUpdateCount: 'No se puede actualizar {{count}} de {{total}} {{label}}.',
unauthorized: 'No autorizado, debes iniciar sesión para realizar esta solicitud.',
unauthorizedAdmin: 'No autorizado, este usuario no tiene acceso al panel de administración.',
unknown: 'Ocurrió un error desconocido.',
unPublishingDocument: 'Ocurrió un error al despublicar este documento.',
unspecific: 'Ocurrió un error.',
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/fa.ts
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ export const faTranslations: DefaultTranslationsObject = {
unableToReindexCollection: 'خطا در بازنمایه‌سازی مجموعه {{collection}}. عملیات متوقف شد.',
unableToUpdateCount: 'امکان به روز رسانی {{count}} خارج از {{total}} {{label}} وجود ندارد.',
unauthorized: 'درخواست نامعتبر، جهت فرستادن این درخواست باید وارد شوید.',
unauthorizedAdmin: 'دسترسی به پیشخوان برای این کاربر مجاز نیست.',
unknown: 'یک خطای ناشناخته رخ داد.',
unPublishingDocument: 'هنگام لغو انتشار این سند خطایی رخ داد.',
unspecific: 'خطایی رخ داد.',
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/fr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ export const frTranslations: DefaultTranslationsObject = {
'Erreur lors de la réindexation de la collection {{collection}}. Opération annulée.',
unableToUpdateCount: 'Impossible de mettre à jour {{count}} sur {{total}} {{label}}.',
unauthorized: 'Non autorisé, vous devez être connecté pour effectuer cette demande.',
unauthorizedAdmin: 'Non autorisé, cet utilisateur n’a pas accès au panneau d’administration.',
unknown: 'Une erreur inconnue s’est produite.',
unPublishingDocument:
'Un problème est survenu lors de l’annulation de la publication de ce document.',
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/he.ts
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ export const heTranslations: DefaultTranslationsObject = {
unableToReindexCollection: 'שגיאה בהחזרת אינדקס של אוסף {{collection}}. הפעולה בוטלה.',
unableToUpdateCount: 'לא ניתן לעדכן {{count}} מתוך {{total}} {{label}}.',
unauthorized: 'אין הרשאה, עליך להתחבר כדי לבצע בקשה זו.',
unauthorizedAdmin: 'אין הרשאה, משתמש זה אינו יכול לגשת לפאנל הניהול.',
unknown: 'אירעה שגיאה לא ידועה.',
unPublishingDocument: 'אירעה בעיה בביטול הפרסום של מסמך זה.',
unspecific: 'אירעה שגיאה.',
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/hr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ export const hrTranslations: DefaultTranslationsObject = {
'Pogreška pri ponovnom indeksiranju kolekcije {{collection}}. Operacija je prekinuta.',
unableToUpdateCount: 'Nije moguće ažurirati {{count}} od {{total}} {{label}}.',
unauthorized: 'Neovlašteno, morate biti prijavljeni da biste uputili ovaj zahtjev.',
unauthorizedAdmin: 'Neovlašteno, ovaj korisnik nema pristup administratorskom panelu.',
unknown: 'Došlo je do nepoznate pogreške.',
unPublishingDocument: 'Došlo je do problema pri poništavanju objave ovog dokumenta.',
unspecific: 'Došlo je do pogreške.',
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/hu.ts
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@ export const huTranslations: DefaultTranslationsObject = {
'Hiba a(z) {{collection}} gyűjtemény újraindexelésekor. A művelet megszakítva.',
unableToUpdateCount: 'Nem sikerült frissíteni {{count}}/{{total}} {{label}}.',
unauthorized: 'Jogosulatlan, a kéréshez be kell jelentkeznie.',
unauthorizedAdmin: 'Jogosulatlan, ez a felhasználó nem fér hozzá az admin panelhez.',
unknown: 'Ismeretlen hiba történt.',
unPublishingDocument: 'Hiba történt a dokumentum közzétételének visszavonása közben.',
unspecific: 'Hiba történt.',
Expand Down
2 changes: 2 additions & 0 deletions packages/translations/src/languages/it.ts
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,8 @@ export const itTranslations: DefaultTranslationsObject = {
'Errore durante la reindicizzazione della collezione {{collection}}. Operazione annullata.',
unableToUpdateCount: 'Impossibile aggiornare {{count}} su {{total}} {{label}}.',
unauthorized: 'Non autorizzato, devi essere loggato per effettuare questa richiesta.',
unauthorizedAdmin:
'Non autorizzato, questo utente non ha accesso al pannello di amministrazione.',
unknown: 'Si è verificato un errore sconosciuto.',
unPublishingDocument:
"Si è verificato un problema durante l'annullamento della pubblicazione di questo documento.",
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/ja.ts
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ export const jaTranslations: DefaultTranslationsObject = {
'コレクション {{collection}} の再インデックス中にエラーが発生しました。操作は中止されました。',
unableToUpdateCount: '{{total}} {{label}} のうち {{count}} 個を更新できません。',
unauthorized: '認証されていません。このリクエストを行うにはログインが必要です。',
unauthorizedAdmin: '管理画面へのアクセス権がないため、認証されていません。',
unknown: '不明なエラーが発生しました。',
unPublishingDocument: 'このデータを非公開する際に問題が発生しました。',
unspecific: 'エラーが発生しました。',
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/ko.ts
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ export const koTranslations: DefaultTranslationsObject = {
'{{collection}} 컬렉션의 재인덱싱 중 오류가 발생했습니다. 작업이 중단되었습니다.',
unableToUpdateCount: '총 {{total}}개 중 {{count}}개의 {{label}}을(를) 업데이트할 수 없습니다.',
unauthorized: '권한 없음, 이 요청을 수행하려면 로그인해야 합니다.',
unauthorizedAdmin: '관리자 패널에 액세스할 수 없습니다.',
unknown: '알 수 없는 오류가 발생했습니다.',
unPublishingDocument: '이 문서의 게시 취소 중에 문제가 발생했습니다.',
unspecific: '오류가 발생했습니다.',
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/my.ts
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ export const myTranslations: DefaultTranslationsObject = {
'{{collection}} စုစည်းမှုကို ပြန်လည်အညွှန်းပြုလုပ်ခြင်း အမှားရှိနေသည်။ လုပ်ဆောင်မှုကို ဖျက်သိမ်းခဲ့သည်။',
unableToUpdateCount: '{{total}} {{label}} မှ {{count}} ကို အပ်ဒိတ်လုပ်၍မရပါ။',
unauthorized: 'အခွင့်မရှိပါ။ ဤတောင်းဆိုချက်ကို လုပ်ဆောင်နိုင်ရန် သင်သည် လော့ဂ်အင်ဝင်ရပါမည်။',
unauthorizedAdmin: 'အခွင့်မရှိပါ။ ဤအကောင့်အသုံးပြုသူသည် အဆင့်မပြုပါနိုင်ပါ။',
unknown: 'ဘာမှန်းမသိသော error တက်သွားပါသည်။',
unPublishingDocument: 'ဖိုင်ကို ပြန်လည့် သိမ်းဆည်းခြင်းမှာ ပြဿနာရှိနေသည်။',
unspecific: 'Error တက်နေပါသည်။',
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/nb.ts
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ export const nbTranslations: DefaultTranslationsObject = {
'Feil ved reindeksering av samlingen {{collection}}. Operasjonen ble avbrutt.',
unableToUpdateCount: 'Kan ikke oppdatere {{count}} av {{total}} {{label}}.',
unauthorized: 'Uautorisert, du må være innlogget for å gjøre denne forespørselen.',
unauthorizedAdmin: 'Uautorisert, denne brukeren har ikke tilgang til kontrollpanelet.',
unknown: 'En ukjent feil har oppstått.',
unPublishingDocument: 'Det oppstod et problem under avpublisering av dokumentet.',
unspecific: 'En feil har oppstått.',
Expand Down
2 changes: 2 additions & 0 deletions packages/translations/src/languages/nl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,8 @@ export const nlTranslations: DefaultTranslationsObject = {
'Fout bij het herindexeren van de collectie {{collection}}. De operatie is afgebroken.',
unableToUpdateCount: 'Kan {{count}} van {{total}} {{label}} niet updaten.',
unauthorized: 'Ongeautoriseerd, u moet ingelogd zijn om dit verzoek te doen.',
unauthorizedAdmin:
'Ongeautoriseerd, deze gebruiker heeft geen toegang tot het beheerderspaneel.',
unknown: 'Er is een onbekende fout opgetreden.',
unPublishingDocument: 'Er was een probleem met het depubliceren van dit document.',
unspecific: 'Er is een fout opgetreden.',
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/pl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ export const plTranslations: DefaultTranslationsObject = {
'Błąd podczas ponownego indeksowania kolekcji {{collection}}. Operacja została przerwana.',
unableToUpdateCount: 'Nie można zaktualizować {{count}} z {{total}} {{label}}.',
unauthorized: 'Brak dostępu, musisz być zalogowany.',
unauthorizedAdmin: 'Brak dostępu, ten użytkownik nie ma dostępu do panelu administracyjnego.',
unknown: 'Wystąpił nieznany błąd.',
unPublishingDocument: 'Wystąpił problem podczas cofania publikacji tego dokumentu.',
unspecific: 'Wystąpił błąd',
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/pt.ts
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ export const ptTranslations: DefaultTranslationsObject = {
unableToReindexCollection: 'Erro ao reindexar a coleção {{collection}}. Operação abortada.',
unableToUpdateCount: 'Não foi possível atualizar {{count}} de {{total}} {{label}}.',
unauthorized: 'Não autorizado. Você deve estar logado para fazer essa requisição',
unauthorizedAdmin: 'Não autorizado, esse usuário não tem acesso ao painel de administração.',
unknown: 'Ocorreu um erro desconhecido.',
unPublishingDocument: 'Ocorreu um problema ao despublicar esse documento',
unspecific: 'Ocorreu um erro.',
Expand Down
3 changes: 2 additions & 1 deletion packages/translations/src/languages/ro.ts
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,8 @@ export const roTranslations: DefaultTranslationsObject = {
unableToReindexCollection:
'Eroare la reindexarea colecției {{collection}}. Operațiune anulată.',
unableToUpdateCount: 'Nu se poate șterge {{count}} din {{total}} {{label}}.',
unauthorized: 'neautorizat, trebuie să vă conectați pentru a face această cerere.',
unauthorized: 'Neautorizat, trebuie să vă conectați pentru a face această cerere.',
unauthorizedAdmin: 'Neautorizat, acest utilizator nu are acces la panoul de administrare.',
unknown: 'S-a produs o eroare necunoscută.',
unPublishingDocument: 'A existat o problemă în timpul nepublicării acestui document.',
unspecific: 'S-a produs o eroare.',
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/rs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ export const rsTranslations: DefaultTranslationsObject = {
'Грешка при реиндексирању колекције {{collection}}. Операција је прекинута.',
unableToUpdateCount: 'Није могуће ажурирати {{count}} од {{total}} {{label}}.',
unauthorized: 'Нисте ауторизовани да бисте упутили овај захтев.',
unauthorizedAdmin: 'Немате приступ администраторском панелу.',
unknown: 'Дошло је до непознате грешке.',
unPublishingDocument: 'Постоји проблем при поништавању објаве овог документа.',
unspecific: 'Дошло је до грешке.',
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/rsLatin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ export const rsLatinTranslations: DefaultTranslationsObject = {
'Greška pri reindeksiranju kolekcije {{collection}}. Operacija je prekinuta.',
unableToUpdateCount: 'Nije moguće ažurirati {{count}} od {{total}} {{label}}.',
unauthorized: 'Niste autorizovani da biste uputili ovaj zahtev.',
unauthorizedAdmin: 'Nemate pristup administratorskom panelu.',
unknown: 'Došlo je do nepoznate greške.',
unPublishingDocument: 'Postoji problem pri poništavanju objave ovog dokumenta.',
unspecific: 'Došlo je do greške.',
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/ru.ts
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ export const ruTranslations: DefaultTranslationsObject = {
'Ошибка при переиндексации коллекции {{collection}}. Операция прервана.',
unableToUpdateCount: 'Не удалось обновить {{count}} из {{total}} {{label}}.',
unauthorized: 'Нет доступа, вы должны войти, чтобы сделать этот запрос.',
unauthorizedAdmin: 'Нет доступа, этот пользователь не имеет доступа к панели администратора.',
unknown: 'Произошла неизвестная ошибка.',
unPublishingDocument: 'При отмене публикации этого документа возникла проблема.',
unspecific: 'Произошла ошибка.',
Expand Down
Loading

0 comments on commit f3aebe3

Please sign in to comment.