EPiServer社区成员头像错误
本文关键字:错误 成员 社区 EPiServer | 更新日期: 2023-09-27 18:29:36
我正在与社区一起开发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
但在View上,我只看到图像图标(比如无法上传或显示图像时)。当我试图在新选项卡中打开此图像链接时,它会将我重定向到EPiServer登录页面。我不明白为什么它重定向到登录页面,若用户是授权的。有什么想法吗?
附加信息:我使用部署中心安装了EPiServer Relate站点。在EditProfile用户控件或MyPage上获取用户头像的方法相同。当我尝试使用gettedUrl在新选项卡中打开图像时,我看到了它。我认为Web.config文件中可能有一些权限,但我不知道。。。。
添加新信息(2014年10月11日)。问题在第节中我的意思是在EPiServerCommunity部分。当我在以前安装的EpiServer Relate网站中更改为拒绝时,当我试图打开图像时,我会获得登录页面。在我的web.config文件中,我将所有拒绝更改为允许,但当我试图通过url打开图像时,我仍然会获得登录页面。我想Episerver在web.config文件中没有看到这个部分。
添加新信息(2014年11月11日)。我又增加了一个角色"每个人"的部分。我看到,当我试图打开localhost:1800''episerver时,它跳过了登录页面。我在EpiServerCommunity部分添加了相同的角色"Everyone"。现在看起来:
<location path="EPiServerCommunity">
<system.web>
<pages enableViewState="true" />
<authorization>
<allow roles="CommunityAdmins,CommunityModerators,Administrators,Everyone" />
<allow users="*" />
</authorization>
</system.web>
但当我试图通过url打开图像时,我仍然得到登录页面:(
附言:这个问题我发布在EPiServer World上,但我希望我能更快地在这里得到答案。
解决了我的问题。EPiServer跳过位置部分中的许可。我创建了带有事件DefaultSecurity_CreatedUser
和MyPageHandler_Register
的类CommunitySecurityModule
,在其中我将Owner设置为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);
}
注意:在此之前,您应该在管理面板中为类型ImageGallery
创建类型IUser
的属性"Owner"。