2

我正在与社区一起开发 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 文件中可能有一些权限,但我不知道....

添加新信息(2014 年 11 月 10 日)。问题出在我的意思是在 EPiServerCommunity 部分的部分中。当我在以前安装的 EpiServer Relate 站点中更改为拒绝时,当我尝试打开图像时,我正在获取登录页面。在我的 web.config 文件中,我将所有拒绝更改为允许,但是当我尝试通过 url 打开图像时,我仍然得到登录页面。我猜 Episerver 在 web.config 文件中没有看到这部分。

添加新信息(2014 年 11 月 11 日)。我在部分添加了一个角色“每个人”。我看到当我尝试打开 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 打开图像时,我仍然得到登录页面:(

PS 这个问题是我在EPiServer World上发布的,但我希望我能在这里更快地得到答案。

4

1 回答 1

1

解决了我的问题。EPiServer 跳过位置部分的许可。我创建了CommunitySecurityModule带有事件的类,DefaultSecurity_CreatedUser并将MyPageHandler_RegisterOwner 设置为 ImageGallery 和其他 AccessRights 用于新闻提要等。现在,当我注册用户并将其添加到 System

        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

于 2014-11-13T11:30:00.223 回答