2010-01-20 36 views
0

檢查用戶權限到站點或工作區給予考慮工作區列表的URL

http://server/managed_path/sitecoll/basic 
http://server/managed_path/sitecoll/blank 
http://server/managed_path/sitecoll/decision 
http://server/managed_path/sitecoll/multipage 
http://server/managed_path/sitecoll/social 

我怎麼能說DoesUserHavePermissions() - 或類似的東西 - 以找出是否在當前登錄的用戶可以訪問網站?

我寫一個用戶控件輸出工作區的列表,他們可以訪問,但是當我嘗試檢查,我收到了各種各樣的錯誤,我似乎無法使用此代碼來解決:

foreach (String s in workspaces) 
{ 
    using (SPSite site = new SPSite(s)) 
    { 
     using (SPWeb web = site.OpenWeb(s)) 
     { 
    // web.DoesUserHavePermissions(...) 
     } 
    } 
} 

回答

1

1)在你的例子中的網址列表都在同一網站集中,參與只是不同的網,這意味着你不必重新打開SPSite的每一次,只是SPWebs

2)打開spsite,使用「SystemAccount.Token」,如下例所示:http://blackninjasoftware.com/2009/04/09/how-to-programmatically-impersonate-users-in-sharepoint/

SPSite tempSite = new SPSite(siteStr); 
SPUserToken systoken = tempSite.SystemAccount.UserToken; 
using (SPSite site = new SPSite(siteStr, systoken)) { 
    //here goes the foreach loop and you iterate through the workspaces 
} 

這樣你就可以調用「DoesuserHavePermissions」方法。

3)請記住,在運行時打開和關閉SPWebs會影響性能。儘可能緩存代碼的結果。

+0

好的答案,但我不認爲如果用戶無法訪問它,您將無法打開網頁。最好的情況是,它會拋出一個FileNotFound異常,最糟糕的情況是它會打開SPSite的web,沒有例外。小心使用OpenWeb,並確保它獲得您正在尋找的網頁。 – 2010-01-21 17:15:58

+1

@Kit Menke,當您使用SystemAccount的用戶令牌打開SPSite對象時,您*是系統帳戶。因此,您可以執行系統帳戶可以執行的任何操作。 – naivists 2010-01-21 19:39:10

+0

對不起,我顯然沒有仔細閱讀。 :)作爲系統帳戶,您可以訪問所有內容。我不明白如何通過系統帳戶來確定當前用戶是否可以打開URL ... – 2010-01-21 21:36:43

相關問題