2

メディア アセットへのリクエストが、ページ/アイテムへのリクエストのように動作するようにします。つまり、ユーザーがログインしていない場合、最初に要求したアイテムへの参照とともにログイン ページに戻されます。

エクストラネット/匿名ユーザーの読み取りアクセスを削除することで、メディア資産へのアクセスを制限できます。これは機能しますが、ユーザーは「noaccess」ページ (config で定義) に送られ、「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 に答える