0

特定のユーザーになりすまして検索クエリを実行しようとしています。

目標は、(クエリ文字列または要求ヘッダーを介して) ユーザーのログイン名を受け取り、全文クエリを実行して、セキュリティ トリミングを考慮して結果を返す Web サービスを用意することです。

別の言い方をすれば、偽装されたユーザーが表示できる結果のみを取得する必要があります。

私の現在のコードは次のとおりです。

            var spUser = SPContext.Current.Web.EnsureUser(loginName);

            HttpRequest request = new HttpRequest("", SPContext.Current.Web.Url, "");

            var web = SPContext.Current.Web;

            HttpContext.Current = new HttpContext(request, new HttpResponse(new StringWriter(CultureInfo.CurrentCulture)));
            if (HttpContext.Current.Items.Contains("HttpHandlerSPWeb"))
            {
                HttpContext.Current.Items["HttpHandlerSPWeb"] = web;
            }
            else
            {
                HttpContext.Current.Items.Add("HttpHandlerSPWeb", web);
            }

            WindowsIdentity identity = WindowsIdentity.GetCurrent();
            typeof(WindowsIdentity).GetField("m_name", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(identity, spUser.LoginName);

            HttpContext.Current.User = new GenericPrincipal(identity, new string[0]);
            identity.Impersonate();

            //execute query here

基本的に、FullTextQuery をインスタンス化する前に現在の ID を置き換えていますが、偽装されたユーザーではなく、実際にログインしたユーザーに応じて結果が変わるだけなので、何もしないのと同じです。

ここにヒントはありますか?

前もってありがとう、乾杯!

4

1 に答える 1

0

昇格した特権で実行しているときに偽装を行うことで、機能させることができました。ここで私の投稿を参照してください: http://vishalseth.com/post/2013/11/05/Impersonated-Searching-against-SharePoint.aspx

于 2014-02-19T05:32:00.333 に答える