Ну ... лучше поздно, чем никогда.Я столкнулся с этой же проблемой сегодня.Проблема возникает, когда вы публикуете страницы .ASPX в папке _Layouts, а затем, при использовании форм или авторизации утверждений, делаете эту пользовательскую страницу вашим первым попаданием в сеансе (без ранее запомненного входа в систему).Проверка подлинности SharePoint не запускается по умолчанию (даже если вы наследуете от класса LayoutsPageBase).Если вы перейдете на какую-либо другую страницу SharePoint (например, _Layouts / 15 / Settings.aspx) и вернетесь назад, тогда CurrentUser заполнен . Мне пришлось использовать Reflector, чтобы лучше понять, чточто происходит и как это исправить.Краткий ответ: как только вы поймете, что CurrentUser == null, вам нужно добавить следующую строку кода:
Microsoft.SharePoint.Utilities.SPUtility.HandleAccessDenied(new UnauthorizedAccessException());
В моем случае этот код генерирует запрос / ответ для браузера, который яиспользуется для входа в систему и сразу после этой строки кода, объект CurrentUser заполнен правильно.Вот как в итоге выглядела моя функция:
public static bool isAdminAuthorized()
{
Microsoft.SharePoint.SPContext oContext ;
Microsoft.SharePoint.SPWeb oWeb ;
Microsoft.SharePoint.SPUser oUser ;
try
{
oContext = Microsoft.SharePoint.SPContext.Current;
}
catch { throw new Exception("Can't obtain Sharepoint Context!"); }
try
{
oWeb = oContext.Web;
}
catch { throw new Exception("Can't obtain Sharepoint web!"); }
try
{
oUser = oWeb.CurrentUser;
}
catch { throw new Exception("Can't obtain Sharepoint current user!"); }
if (oUser == null)
{
Microsoft.SharePoint.Utilities.SPUtility.HandleAccessDenied(new UnauthorizedAccessException());
oUser = oWeb.CurrentUser;
}
foreach (Microsoft.SharePoint.SPGroup oGroup in oUser.Groups)
{
if (oGroup.Name.ToUpper().Contains("OWNER"))
{
return true;
}
}
return false;
}