我正在肯蒂科建立一个多语言站点,我希望用户有限访问他们可以在> pags> pages 应用程序中创建的语言。我可以指定用户可以使用语言选项卡中的用户属性中的用户属性中的哪些语言。
的结果是,如果我的用户试图查看尚未分配的语言,并且尚未创建页面,那就是他们会收到权限错误/警告:
您不允许创建此文化版本。
我想做的是限制>页>应用程序中的下拉列表,以便我只能选择有权更改的语言。我找不到任何可能仅限于分配的语言的设置。
理想情况下,用户应该只能看到他们可以在我的用例中的页面应用程序中编辑的页面,因为有30种语言。
如何限制UI语言下拉列表以仅显示用户可以看到的语言?
页面应用程序中的语言下拉最终由LanguageMenu
控件(您可以在CMSModulesContentControlsLanguageMenu.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;
这确保如果您是全局管理员,则可以获得所有内容,如果没有设置语言 - 您将获得默认列表。
与最佳练习一样,最好在修改它们之前对这些控件进行重复,以确保不会引起任何意外的副作用。牢记这一点,请注意控制链:
- cmsmodules content cmsdesk default.aspx
- cmsmodules content controls contentNavigation.aspx
- cmsmodules content controls treelageagemenu.ascx
- cmsmodules content controls languagemenu.ascx