我需要检查特定用户是否可以通过编程方式访问SharePoint中的网站/子网站。
注意:登录用户可以访问我的SharePoint网站中的少数网站。所以我必须只显示用户有权限的网站。
我用过:
using (SPWeb web = new SPSite(url).OpenWeb())
{
SPWebCollection Sites = web.Webs;
foreach (SPWeb website in Sites)
{
SPUser loginUser = website.CurrentUser;
string username = loginUser.Name;
if (!website.IsRootWeb)
{
SPWebCollection subsites = website.Webs;
foreach (SPWeb supersubsite in subsites)
{
SPWebCollection thirdlevelsites = supersubsite.Webs;
foreach (SPWeb thirdlevel in thirdlevelsites)
{
thirdlevel.Site.CatchAccessDeniedException = false;
bool check = thirdlevel.DoesUserHavePermissions(SPContext.Current.Web.CurrentUser.LoginName, SPBasePermissions.Open);
if (check)
{
}
thirdlevel.Site.CatchAccessDeniedException = true;
}
}
}
}
}
但在
处收到错误bool check = thirdlevel.DoesUserHavePermissions(SPContext.Current.Web.CurrentUser.LoginName, SPBasePermissions.Open);
as:
访问被拒绝。 (HRESULT异常:0x80070005(E_ACCESSDENIED))
答案 0 :(得分:2)
如果您正在使用发布网站,则应依赖PortalSiteMapProvider
(CombinedNavSiteMapProvider
,CurrentNavSiteMapProvider
,GlobalNavSiteMapProvider
,WebSiteMapProvider
等取决于在您的导航需求上)因为这个已经完全安全地修剪了,你将能够以最佳性能遍历完整的树。
否则,您应该在SPWeb对象上使用GetSubwebsForCurrentUser()
,此方法只会返回当前用户可访问的子网站。
希望它会有所帮助。