特定のユーザーになりすまして検索クエリを実行しようとしています。
目標は、(クエリ文字列または要求ヘッダーを介して) ユーザーのログイン名を受け取り、全文クエリを実行して、セキュリティ トリミングを考慮して結果を返す 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 を置き換えていますが、偽装されたユーザーではなく、実際にログインしたユーザーに応じて結果が変わるだけなので、何もしないのと同じです。
ここにヒントはありますか?
前もってありがとう、乾杯!