给出工作区列表:
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(...)
}
}
}
答案 0 :(得分:1)
1)您示例中的URL列表都在同一个网站集中,只涉及不同的网站,这意味着您不必每次都重新打开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会影响性能。如果可能的话,尝试缓存代码的结果。