2012-04-05 68 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模拟系统帐号,你就必须有对搜索一个固定的用户名/密码,但这通常是您在讨论代码模拟时必须考虑的事情。