2017-10-03 1 views
0

Ich baue eine mehrsprachige Website in Kentico, wo ich möchte, dass ein Benutzer eingeschränkten Zugriff auf die Sprachen haben, die sie in der Pages Anwendung erstellen können. Ich kann angeben, welche Sprachen der Benutzer bearbeiten kann, indem er in den Benutzereigenschaften die Registerkarte Sprachen verwendet, wie auf der Seite User management in der Kentico-Dokumentation angezeigt.Einschränkung der UI Sprache Drop-Down in der Kentico Pages-Anwendung

Das Ergebnis davon ist, dass, wenn meine Benutzer eine Sprache zu lesen versucht, dass sie nicht zugewiesen worden und hat keine Seite noch erstellt ist, dass sie eine Erlaubnis Fehler/Warnung erhalten:

Sie sind nicht erlaubt, diese Kulturversion zu erstellen.

Was ich tun möchte, ist die Dropdown-Liste in den so Seiten Anwendung zu begrenzen, dass ich nur Sprachen wählen kann, die ich die Berechtigung zu ändern. Ich kann keine Einstellungen finden, die das Dropdown-Menü auf die zugewiesenen Sprachen beschränken.

Im Idealfall sollte der Benutzer nur Seiten sehen können, die er in der Pages-Anwendung für meinen Anwendungsfall bearbeiten kann, da mehr als 30 Sprachen vorhanden sind.

Wie können Sie die Dropdown-Liste für die Benutzeroberfläche einschränken, um nur die Sprachen anzuzeigen, die der Benutzer sehen darf?

Antwort

0

Die Sprache Drop-Down in den Seiten Anwendung wird letztlich von der LanguageMenu Kontrolle (die Sie in CMSModules\Content\Controls\LanguageMenu.ascx finden können) zur Verfügung gestellt. Sie müssen eine Kopie davon erstellen und die Page_Load-Methode ändern, um die Sprachenbasis auf den festgelegten Kulturen (falls vorhanden) zu begrenzen.

Ein sehr kurzes Beispiel ist den folgenden Code vor der Schleife hinzufügen, die die Listenelemente erstellt:

var userCultureIDs = new List<Int32>(); 
var userCulturesSet = false; 
if (CurrentUser.Bindings.CollectionNames.Contains("UserCultures") && CurrentUser.Bindings["UserCultures"].Count > 0) 
{ 
    foreach (var userCulture in CurrentUser.Bindings["UserCultures"]) 
    { 
     userCultureIDs.Add((Int32)userCulture["CultureID"]); 
     userCulturesSet = true; 
    } 
} 

und dann innerhalb dieser Schleife, machen Sie die erste Zeile:

if (userCulturesSet && !userCultureIDs.Contains(culture.CultureID) && !CurrentUser.CheckPrivilegeLevel(UserPrivilegeLevelEnum.GlobalAdmin)) continue; 

Dadurch wird sichergestellt, Wenn Sie Global Admin sind, erhalten Sie alles und das - wenn keine Sprachen eingestellt sind - erhalten Sie die Standardliste.

Wie bei der Best Practice üblich, sollten Sie die Duplikate dieser Steuerelemente vor der Änderung noch verbessern, um sicherzustellen, dass keine unbeabsichtigten Nebenwirkungen auftreten. Mit diesem Hintergedanken, der Steuerkette bewusst sein:

  1. CMSModules \ Content \ CMSDesk \ Default.aspx
  2. CMSModules \ Content \ controls \ ContentNavigation.aspx
  3. CMSModules \ Content \ controls \ TreeLanguageMenu. ascx
  4. CMSModule \ Inhalt \ Controls \ LanguageMenu.ascx
Verwandte Themen