给定URL检查用户对站点或工作区的权限

时间:2010-01-20 20:00:24

标签: c# sharepoint moss

给出工作区列表:

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 个答案:

答案 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会影响性能。如果可能的话,尝试缓存代码的结果。