wss代码执行的权限提升
原文:http://msdn2.microsoft.com/en-us/library/bb466220.aspx
在SharePoint中,正常情況下我們在WebPart或后臺自定義應用程序中的代碼都是以當前用戶的身份和權限運行。在絕大多數情況下,這樣做是正確的,也是我們期望的。這可以阻止一般用戶執行一些本來是站點管理員才能執行的操作,或者查看到不應該看到的信息。然而,有時我們的代碼必須要執行一些SharePoint對象模型中對某些用戶有限制的方法,即使該請求是由一個沒有該操作權限的人發起的。這時,我們必須能夠在代碼中提升權限,使得該操作被允許在Web服務器上執行。
?
假設我們有一個WebPart要顯示一些通過SharePoint對象模型得到的信息,如:當前站點集所有者的名稱,使用率統計數據,或審核信息等。調用這些對象模型都是需要站點管理權限才可以。如果當前用戶不是站點管理員的話,該WebPart試圖獲取這類信息時就就會報一個拒絕訪問的錯誤。實際上,我們可以通過調用SPSecurity類的RunWithElevatedPrivileges方法成功的執行上面提到的這些調用。
SPSite siteColl = SPContext.Current.Site;
SPWeb site = SPContext.Current.Web;
SPSecurity.RunWithElevatedPrivileges(delegate() {
? using (SPSite ElevatedsiteColl = new SPSite(siteColl.ID)) {
??? using (SPWeb ElevatedSite = ElevatedsiteColl.OpenWeb(site.ID)) {
????? string SiteCollectionOwner = ElevatedsiteColl.Owner.Name;
????? string Visits = ElevatedsiteColl.Usage.Visits.ToString();
????? string RootAuditEntries =
????????? ElevatedSite.RootFolder.Audit.GetEntries().Count.ToString();
??? }
? }
});
RunWithElevatedPrivileges方法通過接受一個委托(delegate)參數, 來添加一個需權限提升后執行的方法的引用。在C#中,正如上面的代碼展示的那樣,可以使用一個匿名方法來編寫委托參數,直接寫在另一個方法內部就行。
當我們通過調用RunWithElevatedPrivileges提升在SharePoint上下文中的權限后,我們必須接著創建一個SPSite和SPWeb類的實例。切記不能通過Microsoft.SharePoint.SPContext.Current屬性來獲取這些對象。因為這些對象都是通過當前用戶的安全上下文創建的。上面的代碼展示了一種很好的方法來在權限提升后得到這些對象。另外這樣寫還可以保證在Using語句外這些對象可以通過調用Dispose方法很好的被釋放。
最后,我們要注意,這種方式獲取的權限是很強大的。事實上,提升后的操作是在SharePoint系統帳戶下運行。該帳戶對于當前服務器場內所有網站集都具有完全控制的權限。因此,在使用提升權限時我們有義務保證不能讓用戶訪問到不該訪問的信息或執行一些其本來沒有權限執行的操作。
轉載于:https://www.cnblogs.com/xiaokangufo/archive/2010/01/25/1656181.html
總結
以上是生活随笔為你收集整理的wss代码执行的权限提升的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何选择你最合适的linux系统
- 下一篇: 十年,我的计算机生涯