まず第一に、タイトルが奇妙に聞こえることは承知していますが、これは、お客様の 1 人から寄せられた有効で適格な要件です。アクセスがないために検索結果に表示されなかったすべてのレコードのレコード名と場所 (読み取り専用) のみを表示することを望んでいます。
public class VisualWebPart1 : Microsoft.Office.Server.Search.WebControls.CoreResultsWebPart
{
protected override void ConfigureDataSourceProperties()
{
base.ConfigureDataSourceProperties();
CoreResultsDatasource ds = DataSource as CoreResultsDatasource;
if (ds.UserCredentials.ContainsKey(ds.Location))
ds.UserCredentials.Remove(ds.Location);
ds.UserCredentials.Add(ds.Location, new NetworkCredential("user", "password", "domain"));
}
}
ここで、これを行う最初の方法は、検索 API を使用して直接 FAST 検索 Web サービスを呼び出すことでした。ただし、これを既存の高速検索センターとシームレスに連携させたいと考えていました。つまり、既存の検索ボックスや高度な検索などを引き続き使用できます。 FQL へのクエリ。以下のような代替手段がある場合は、この道をたどりたくありません。
CoreResultsWebPart コンポーネントを拡張して、検索の実行中に一時的にユーザー権限を管理者アカウントに昇格させるというアイデアがありました。CoreResultsWebPart のコードを逆コンパイルして見た後、次のコードを使えばこれは非常に簡単だと思いました。
しかし、私たちは間違っていました。これはまったく機能しません。CoreResultsWebPart のコードを見ると奇妙です。他のアクセス制御メカニズムは見当たりません。つまり、データ ソース (UserCredentials) 以外でユーザー資格情報が処理されている場所がどこにも見当たりません。 CoreResultsWebpart が Web サービスを直接呼び出す必要があることは確かですが、資格情報が渡される他の場所はわかりません。
単純にカスタム Web パーツを作成することを検討する前に、どんな助けも大歓迎です。たとえ道を間違えたとでも!
ありがとう!
エイドリアン