2

我希望对媒体资产的请求表现得像对页面/项目的请求。也就是说,如果用户未登录,他们将被退回到登录页面,并返回他们最初请求的项目。

我可以通过删除外网/匿名用户的读取权限来限制对媒体资产的访问。这可行,但用户被发送到“noaccess”页面(在配置中定义),然后返回以“noaccess”页面作为引荐来源登录。我想知道是否有办法让媒体请求首先检查身份验证而不是访问级别(可能使用自定义处理程序)或扩展处理“禁止访问”请求的方式?

4

1 回答 1

4

我检查了Sitecore.Resources.Media.MediaRequestHandler类的代码,它的工作原理如下:

  1. Sitecore 尝试获取 mediaItem,然后检查用户 AccessRights
  2. 如果访问权限正常,它将处理该项目
  3. 如果用户没有足够的访问权限,Sitecore 将重定向到该<site name="yoursite" loginPage="">部分中设置的站点登录页面。如果未设置此 loginPage,Sitecore 将重定向到<setting name="NoAccessUrl" />web.config 中的设置。

我假设您已将 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

于 2013-01-19T10:29:41.213 回答