Как проверить код, если запрос соответствует группе посетителей EPiServer
Мы создали новую "группу посетителей" в EPiServer 6r2 и хотим добавить класс css в <body>
тег сайта, если пользователь входит в эту группу, поэтому разные группы получают разные дизайны сайтов. Я пытаюсь выяснить, находится ли текущий посетитель в соответствующей группе в выделенном фрагменте файла мастер-страницы, чтобы добавить этот дополнительный класс, и я не могу получить приведенный ниже код, возвращающий что-либо, кроме false.
Я не уверен, что упомянутое имя роли - это имя, которое вы вводите в пользовательском интерфейсе CMS при добавлении группы посетителей.
Пол Смит опубликовал в блоге предложенное решение, но я не смог его вернуть, кроме как false
пока и судя по единственному комментарию к статье блога я не одинок. Пример кода № 1 по этой ссылке (которая используется):
using EPiServer.Personalization.VisitorGroups;
...
bool match = EPiServer.Security.PrincipalInfo.CurrentPrincipal
.IsInRole("My Visitor Group", SecurityEntityType.VisitorGroup);
Я нашел руководство разработчика для поставщиков членства и ролей, в котором говорится, что replacePrincipal
должен быть установлен в true
для правильного принципала, чтобы быть в месте. Я проверил, и это уже так для моего конфига.
Документация
- EPiServer 7 doc
Как ни странно, я искал документацию 6r2 по адресу http://sdk.episerver.com/ и вообще не могу найти документацию для IPrincipalExtensions, хотя я вижу класс в обозревателе объектов в 6.2. в моем слн. Детали: сборка EPiServer.ApplicationModules
- C:\Windows\assembly\GAC_MSIL\EPiServer.ApplicationModules\6.2.267.1__8fe83dea738b45b7\EPiServer.ApplicationModules.dll
- public static bool IsInRole(this System.Security.Principal.IPrincipal principal, string role, EPiServer.Security.SecurityEntityType type)
Член EPiServer.Personalization.VisitorGroups.IPrinicipalExtensions
Пожалуйста, прокомментируйте, если вы обнаружите ошибки или я что-то пропустил, так как кодирование для EPiServer - это дело тумана войны, и я немного устал от битвы.
1 ответ
Нашел его, просмотрев объектную модель и угадав. Так много для документации.
using EPiServer.Personalization.VisitorGroups;
using EPiServer.Security;
const string visitorGroupName = "Some users";
var groupHelper = new VisitorGroupHelper();
bool isPrincipalInGroup = groupHelper.IsPrincipalInGroup(
PrincipalInfo.CurrentPrincipal, visitorGroupName);
Протестировано и работает в EPiServer 6r2 (он же 6.1).
строка visitorGroupName
должен совпадать со строкой, введенной в поле "Имя" интерфейса администратора EPiServer при создании / редактировании группы посетителей. Смотрите скриншот ниже: