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

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

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

Другие вопросы по тегам