代码之家  ›  专栏  ›  技术社区  ›  Goyuix

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

  •  0
  • Goyuix  · 技术社区  · 15 年前

    给定工作区列表:

    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 回复  |  直到 12 年前
        1
  •  1
  •   naivists    15 年前

    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)记住,在运行时打开和关闭spweb会影响性能。如果可能,尝试缓存代码的结果。