2012-04-05 69 views
1

首先,我知道標題聽起來很奇怪,但這是我們客戶的有效且合格的要求。我們希望做的只是向他們展示由於無法訪問而在搜索結果中未顯示的所有記錄的記錄名稱和位置(只讀)。現在SharePoint 2010 FAST搜索:顯示用戶無權訪問的記錄

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")); 
    } 
} 

,第一種方式,我們想要做的,這是通過調用FAST搜索Web服務直接使用搜索API。然而,我們希望這能夠與現有的快速搜索中心無縫協作,即他們仍然可以使用現有的搜索框,高級搜索等。據我們瞭解,API可能無法與基於URL的搜索查詢很好地集成,除非我們將查詢到FQL。如果有下面的替代方案,我們寧可不走這條路;

我們有一個想法來擴展CoreResultsWebPart組件,以在執行搜索時暫時將用戶權限提升爲管理員帳戶。在反編譯並查看CoreResultsWebPart的代碼後,我認爲使用下面的代碼會很容易;

但是,我們錯了,這根本不起作用。看看CoreResultsWebPart的代碼很奇怪,我沒有看到任何其他訪問控制機制,我的意思是,除了數據源中的用戶憑證(UserCredentials)外,我沒有看到任何用戶憑證正在處理的地方。確定CoreResultsWebpart必須直接調用Web服務,但我不知道憑據傳遞到哪裏。

任何幫助將不勝感激,然後再開始着手創建自定義Web部件。即使它告訴我我們走錯了路!

謝謝!

阿德里安

回答

0

如果RunWithElevatedPrivileges不傳遞用戶令牌,你可能想嘗試類似鏈接WindowsIdentity模擬系統帳號,你就必須有對搜索一個固定的用戶名/密碼,但這通常是您在討論代碼模擬時必須考慮的事情。