Ошибка аватара участника сообщества EPiServer

Я разрабатываю сайт EPiServer CMS 7 MVC с сообществом. Я пытаюсь получить и отобразить аватар участника (аватар физически существует в папке "Добавленные файлы"). Вот мой код:

        var user = CurrentUser;
        var image = user.GetPortraitUri(ImageSize.Huge).ToString();

переменное изображение получает значение:

        http://localhost:18000/EPiServerCommunity/Modules/ImageGallery/ImageHandler.ashx?imageId=7&thumbnailId=10

Но в режиме просмотра я вижу только значок изображения (например, когда не удается загрузить или отобразить изображение). Когда я пытаюсь открыть эту ссылку на изображение в новой вкладке, она перенаправляет меня на страницу входа в EPiServer. Я не могу понять, почему он перенаправляет меня на страницу входа, если пользователь авторизован. Любые идеи?

Дополнительная информация: Я установил сайт EPiServer Relate через Центр развертывания. Существует тот же способ получить аватар пользователя в пользовательском элементе управления EditProfile или на MyPage. И когда я пытаюсь открыть изображение на новой вкладке, используя полученный URL-адрес, я его вижу. Я думаю, что в файле Web.config могут быть какие-то разрешения, но я не знаю ....

Добавляем новую информацию (10.11.2014). Проблема в разделе, я имею в виду в разделе раздела EPiServerCommunity. Когда я перешел на отказ в установленном ранее сайте EpiServer Relate, я получаю страницу входа, когда пытаюсь открыть изображение. В моем файле web.config я изменил все запреты, чтобы разрешить, но все же я получаю страницу входа, когда пытаюсь открыть изображение по URL-адресу. Полагаю, Episerver не видит этот раздел в файле web.config.

Добавляем новую информацию (11.11.2014). Я добавил в раздел еще одну роль «Все». Я вижу, что когда я пытаюсь открыть localhost: 18000 \ episerver, он пропускает страницу входа. Я добавил ту же роль «Все» в раздел EpiServerCommunity. Теперь это выглядит:

<location path="EPiServerCommunity">
<system.web>
  <pages enableViewState="true" />
  <authorization>
    <allow roles="CommunityAdmins,CommunityModerators,Administrators,Everyone" />
    <allow users="*" />
  </authorization>
</system.web>

Но я все еще получаю страницу входа, когда пытаюсь открыть изображение по URL :(

P.S. Этот вопрос я разместил в EPiServer World, но Надеюсь, я получу здесь ответ быстрее.


person Oleh    schedule 06.11.2014    source источник


Ответы (1)


Решил мою проблему. EPiServer пропускает разрешения в разделе местоположения. Я создал класс CommunitySecurityModule с событиями DefaultSecurity_CreatedUser и MyPageHandler_Register, где я установил для владельца значение ImageGallery и другие права доступа для ленты новостей и т. Д. Теперь, когда я зарегистрировал пользователя и добавил его в систему

        newUser = CommunitySystem.CurrentContext.DefaultSecurity.AddUser(newUser);

он вызывает MyPageHandler_Register и устанавливает все права:

        var user = e.Object as IUser;
        if (user != null)
        {
            var myPage = MyPageHandler.Instance.GetMyPage(user);
            if (myPage != null && myPage.ImageGallery != null)
            {
                foreach (var imageGallery in myPage.ImageGallery.Children)
                {
                    var imageGalleryClone = imageGallery.CreateWritableClone() as ImageGallery;
                    imageGalleryClone.SetOwner(user);
                    ImageGalleryHandler.Instance.UpdateImageGallery(imageGalleryClone);
                }
            }
        }

Реализация метода SetOwner ниже:

    public static void SetOwner(this ImageGallery imageGallery, IUser owner)
    {
        imageGallery.SetAttributeValue("Owner", owner);
    }

Реализация DefaultSecurity_CreatedUser:

    private void DefaultSecurity_CreatedUser(ISecurityHandler sender, ICreateUserEventArgs args)
    {
        // Add user to the community members group
        var group = CommunityMembersGroup;
        var addedUser = args.User;
        addedUser = (IUser)addedUser.CreateWritableClone();
        addedUser.Groups.Add(group);

        // Update the user
        CommunitySystem.CurrentContext.DefaultSecurity.UpdateUser(addedUser);

        // Set access rights to the newly created user
        // Access right for anonymous users
        var anonAccessRights = new ReadModifyRemoveAccessRights
        {
            Read = true,
        };
        EntitySecurityHandler.Instance.SetAccessRights(addedUser, AnonymousGroup, anonAccessRights);

        // Access right for community members
        var communityMembersAccessRights = new ReadModifyRemoveAccessRights
        {
            Read = true,
        };
        EntitySecurityHandler.Instance.SetAccessRights(addedUser, group, communityMembersAccessRights);

        // Access rights for administrators
        var adminAccessRights = new ReadModifyRemoveAccessRights
        {
            Read = true,
            Modify = true,
            Remove = true
        };
        EntitySecurityHandler.Instance.SetAccessRights(addedUser, AdministratorsGroup, adminAccessRights);

        // Access rights for the added user
        var userAccessRights = new ReadModifyRemoveAccessRights
        {
            Read = true,
            Modify = true,
            Remove = true
        };
        EntitySecurityHandler.Instance.SetAccessRights(addedUser, addedUser, userAccessRights);

        // Access rights for moderator
        var moderatorAccessRights = new ReadModifyRemoveAccessRights
        {
            Read = true,
            Modify = true,
            Remove = true
        };
        EntitySecurityHandler.Instance.SetAccessRights(addedUser, ModeratorsGroup, moderatorAccessRights);
    }

Примечание: Перед этим вы должны создать Атрибут «Владелец» типа IUser для типа ImageGallery в панели администратора.

person Oleh    schedule 13.11.2014