如何检查用户是否具有SharePoint网站集的权限

时间:2010-11-15 19:49:36

标签: sharepoint permissions sharepoint-2007

检查用户是否拥有网站集/网站的权限的最佳方法是什么?我目前正在使用以下

   SPSecurity.RunWithElevatedPrivileges(
       () => {using (var site = new SPSite(nodeUrl))
                     {
                         using (var web = site.OpenWeb())
                         {
                             retValue=
                                 web.DoesUserHavePermissions(
                                     context.User.Identity.Name,
                                     SPBasePermissions.Open);
                         }
                     }
             });

这似乎不正常。如果用户从未添加到网站,则此方法有效。但是,如果用户已添加然后被删除DoesUserHavePermission(.. SPBasePermission.Open)仍然返回true,但是当用户尝试访问该站点时,SharePoint会抛出拒绝访问页面。

经过多一点挖掘后,我发现用户帐号仍在web.AllUsers列表中,但没有分配角色。

3 个答案:

答案 0 :(得分:3)

使用CheckPermissions代替DoesUserHavePermissions。请参阅SPWeb.CheckPermissions Method

答案 1 :(得分:1)

我执行类似的检查(循环检查权限的工作区列表),这是我使用的相关代码:

string LoginName = SPContext.Current.Web.CurrentUser.LoginName
bool permission = web.DoesUserHavePermissions(LoginName, SPBasePermissions.Open)

答案 2 :(得分:0)

我认为你走在正确的轨道上

SP用户是SiteCollection(站点)的成员,而不是Web的成员。

您需要再次检查Site.RootWeb

也来自你的代码,我认为你没有得到实际的上下文

SPContext.Current是正确的上下文

 SPSecurity.RunWithElevatedPrivileges(
   () => {using (var site = new SPSite(nodeUrl))
                 {
                     using (var web = site.OpenWeb())
                     {
                         retValue=
                             web.DoesUserHavePermissions(
                                 context.User.Identity.Name,
                                 SPBasePermissions.Open);
                     }
                 }
         });

祝你好运