在SharePoint模拟指定用户身份进行操作的代码:
string siteUrl = "http://ecpe-dev:82/sites/sjs" ;
//首先用管理员身份取到某个用户的Token
//应该用SPSecurity.RunWithElevatedPrivilege来提升权限.
SPSite site = new SPSite(siteUrl);
//此时用户为SHAREPOINT\system
Response.Write(site.RootWeb.CurrentUser);
//获取到要模拟的用户的token
SPUser user = site.RootWeb.SiteUsers["saicmotorlab\\user1"];
//利用用户Token构造新的Site对象
SPSite siteWithUser = new SPSite(siteUrl, user.UserToken);
SPWeb webWithUser = siteWithUser.RootWeb;
//此时用户为SAICMOTORLAB\user1
Response.Write( webWithUser.CurrentUser );
SPList listWithUser = webWithUser.Lists["simeList"];
//other code
以上代码可以用在需要采用指定用户权限操作的情况,如写个web服务,按照传入的用户名返回其有权查看的ListItem。
如果想提升权限,那么我们可以这样
SPSecurity.RunWithElevatedPrivileges( delegate()
{
// 此处显示的是要在提升权限的情况下运行的代码。
// 该代码段在 SHAREPOINT/SYSTEM 帐户下运行。
});
//例
SPSecurity.RunWithElevatedPrivileges(
delegate()
{
using (SPSite ElevatedsiteColl = new SPSite("http://moss:90/sites/myWebSite));
{
using (SPWeb ElevatedSite = ElevatedsiteColl.OpenWeb())//获得spweb;
{
string SiteCollectionOwner = ElevatedsiteColl.Owner.Name;
string Visits = ElevatedsiteColl.Usage.Visits.ToString();
string RootAuditEntries =ElevatedSite.RootFolder.Audit.GetEntries().Count.ToString();
}
}
});
注释: delegate() {}内的的代码必须重新初始化相应的对象 SPSite, SPWeb, 这时候即使在提升权限的范围内运行,得到的也是当前网站登录帐户名,而不是管理员登录帐号。