ええと... 遅刻するよりはましです。今日も同じ問題に遭遇しました。前のコメントは、元の投稿者が表明した問題に対処していません。問題は、.ASPX ページを _Layouts フォルダーに公開し、フォームまたはクレーム認証を使用して、そのカスタム ページをセッションの最初のヒットにするときに発生します (以前にログインを記憶していない場合)。SharePoint 認証は、既定では起動されません (LayoutsPageBase クラスから継承した場合でも)。他の SharePoint ページ (_Layouts/15/Settings.aspx など) に移動してから戻ると、CurrentUserが入力されています。修理する。簡単に言えば、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;
}