我正在Kentico建立一个多语言网站,我希望用户能够有限地访问他们可以在页面应用程序中创建的语言。我可以使用用户属性中的语言标签指定用户可以编辑的语言,如Kentico文档中的User management页面所示。
这样做的结果是,如果我的用户试图查看他们尚未分配的语言并且没有创建页面,那么他们会收到权限错误/警告:
您不能创建此文化版本。
我想要做的是限制页面应用程序中的下拉列表,以便我只能选择我有权更改的语言。我找不到任何可能将下拉菜单限制为指定语言的设置。
理想情况下,用户应该只能在我的用例的Pages应用程序中看到可以编辑的页面,因为有超过30种语言。
如何限制UI语言下拉菜单以仅显示允许用户查看的语言?
答案 0 :(得分:0)
页面应用程序中的语言下拉菜单最终由LanguageMenu
控件提供(您可以在CMSModules\Content\Controls\LanguageMenu.ascx
中找到)。您需要复制此内容并修改Page_Load
方法,以便根据设置的文化(如果有)限制语言。
一个非常快速的示例是在构建列表项的循环之前添加以下代码:
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;
}
}
然后在该循环内,制作第一行:
if (userCulturesSet && !userCultureIDs.Contains(culture.CultureID) && !CurrentUser.CheckPrivilegeLevel(UserPrivilegeLevelEnum.GlobalAdmin)) continue;
这确保了如果您是全局管理员,您将获得所有内容 - 如果未设置任何语言 - 您将获得默认列表。
与最佳做法一样,最好在修改这些控件之前复制这些控件,以确保不会造成任何意外的副作用。牢记这一点,请注意控制链: