2013-01-18 12 views
2

我希望对媒体资产的请求表现得像对页面/项目的请求一样。也就是说,如果用户没有登录,他们会被退回到登录页面,并将其推荐回他们最初请求的项目。限制从未经过身份验证的外部网用户访问Sitecore媒体资产

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

回答

4

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

  1. Sitecore的尝试获取mediaItem,然后检查用户AccessRights
  2. 如果访问权限都很好,它会处理项目
  3. 如果用户没有足够的访问权限,Sitecore将重定向到网站的登录页面,该页面在<site name="yoursite" 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
相关问题