在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, 這時候即使在提升許可權的範圍內運行,得到的也是當前網站登入帳戶名稱,而不是管理員登入帳號。