我在过去做了一些类似以下的事情,在SharePoint中做了很多模仿。您可以在没有提供密码的情况下在SharePoint中执行模拟搜索吗?
SPWeb web = SPContext.Current.Web;
string currentWebUrl = web.Url;
SPUser user = web.EnsureUser(loginToImpersonate);
using (SPSite site = new SPSite(currentWebUrl, user.UserToken)
{
using (SPWeb impersonatedWeb = site.OpenWeb())
{
// Any SharePoint access here to 'impersonatedWeb'
// is impersonated as 'loginToImpersonate'
}
}
请注意,这不需要您模拟的用户的密码,但确实需要某些代码访问安全性才能运行。作为旁注,EnsureUser调用还要求当前用户是管理员,但还有其他方法可用于取代EnsureUser以获取SPUser对象(试图让我的代码片段对于此问题变得简单)。
现在我已经设置了舞台......我现在想要对MOSS或WSS查询引擎执行FullTextSQLQuery或KeywordQuery,并根据模拟用户获取安全修剪结果。两个对象都可以在构造函数上使用SPSite,但忽略我的模拟逻辑。他们会使用当前登录的用户(HTTPContext.Current.User)。
还有其他的构造以及:应用程序名称(字符串)和MOSS有一个与ServerContext中的SSP,但我不认为这将有助于在所有。
我用反射镜上的KeywordQuery类及其基查询类和它变得很丑陋相当快。我相信确定用户的实际逻辑是在非托管代码中。
那么,我可以这样做吗?
工作链接:http://www.threewill.com/2010/06/connect-to-sharepoint-forwarding-user-identities/ – KjellSj 2012-05-16 17:34:23