Проверка прав пользователя для определенного сайта в SharePoint
Мне нужно проверить, есть ли у конкретного пользователя программный доступ к сайту / дочернему сайту в 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);
как:
В доступе отказано. (Исключение из HRESULT: 0x80070005 (E_ACCESSDENIED))
1 ответ
Если вы работаете с сайтом публикации, вы должны полагаться на PortalSiteMapProvider
(CombinedNavSiteMapProvider
, CurrentNavSiteMapProvider
, GlobalNavSiteMapProvider
, WebSiteMapProvider
и т. д. в зависимости от ваших потребностей в навигации), поскольку это уже полностью урезано с точки зрения безопасности, и вы сможете пройтись по всему дереву с максимальной производительностью.
В противном случае вы должны использовать GetSubwebsForCurrentUser()
для вашего объекта SPWeb этот метод будет возвращать только те веб-сайты, которые доступны для текущего пользователя.
Надеюсь, это поможет.