Как проверить код, если запрос соответствует группе посетителей 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, чтобы был установлен правильный участник. Я проверил, и это уже относится к моему конфигу.


Документация

Как ни странно, я искал документацию по 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 - это что-то вроде тумана войны, и я немного устал от сражений.


person Tim Abell    schedule 26.06.2014    source источник
comment
Обратите внимание, здесь могут быть дополнительные подсказки: david-tec.com/2013/01/   -  person Tim Abell    schedule 26.06.2014


Ответы (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 при создании/редактировании группы посетителей. Смотрите скриншот ниже:

введите здесь описание изображения

person Tim Abell    schedule 30.06.2014