我希望对媒体资产的请求表现得像对页面/项目的请求。也就是说,如果用户未登录,则会将其退回到登录页面,并将引荐返回到他们最初请求的项目。
我可以通过删除extranet /匿名用户的读取权限来限制对媒体资产的访问。这有效,但用户被发送到" noaccess"页面(在配置中定义)然后返回到使用" noaccess"页面作为引用者。我想知道是否有办法让媒体请求首先检查身份验证而不是访问级别(可能使用自定义处理程序)或扩展#34; no access"请求已处理?
答案 0 :(得分:4)
我检查了Sitecore.Resources.Media.MediaRequestHandler
类的代码,它的工作原理如下:
<site name="yoursite" loginPage="">
部分中设置的网站登录页面。如果未设置此loginPage,Sitecore将重定向到web.config中的<setting name="NoAccessUrl" />
设置。我假设您已将loginPage设置设置为登录页面。 如果这不是所需的行为,您可以为MediaRequestHandler创建自定义处理程序。
从MediaRequestHandler中获取处理访问权限不足的部分代码:
using (SecurityDisabler securityDisabler = new SecurityDisabler())
{
media = MediaManager.GetMedia(mediaRequest.MediaUri);
}
if (media != null)
{
Assert.IsNotNull(Context.Site, "site");
if (Context.Site.LoginPage != string.Empty)
{
loginPage = Context.Site.LoginPage;
}
else
{
loginPage = Settings.NoAccessUrl;
}
itemNotFoundUrl = loginPage;
}
else
{
itemNotFoundUrl = Settings.ItemNotFoundUrl;
}
if (!Settings.RequestErrors.UseServerSideRedirect)
{
HttpContext.Current.Response.Redirect(itemNotFoundUrl);
}
else
{
HttpContext.Current.Server.Transfer(itemNotFoundUrl);
}
有关如何创建自定义MediaHandler的信息,请参阅this blogpost