1

Sharepoint サーバー (例: http://myportal/mysite/_layouts/application/default.aspx ) でホストされているアプリケーション ページがあり、次のようなコードがあります。

protected void Page_PreLoad(object sender, EventArgs e)
{           
    var userEmail = SPContext.Current.Web.CurrentUser.Email;
}

ブラウザの起動後にユーザーがこのページを URL で直接取得しようとすると、CurrentUser が null であるため、例外が発生します。ただし、ユーザーが最初に Web サイト (http://myportal/mysite) に移動し、次にアプリケーション ページに移動した場合、CurrentUser は null ではありません。では、SPContext で初期化されていない場合、どのように CurrentUser オブジェクトを取得できますか?

4

2 に答える 2

0

RunWithElevatedPrivileges コード内の昇格された SPWeb から現在のユーザーを取得します。このコードを試してください。

SPWeb site = SPContext.Current.Web;
SPSecurity.RunWithElevatedPrivileges(delegate()
{
    using (SPSite ElevatedsiteColl = new SPSite(site.Url))
   {
       using (SPWeb ElevatedSite = ElevatedsiteColl.OpenWeb())
       {
            SPUser currUser = site.CurrentUser; //not the ElevatedSite.CurrentUser
       }
   }
});
于 2012-04-20T13:16:00.340 に答える
0

ええと... 遅刻するよりはましです。今日も同じ問題に遭遇しました。前のコメントは、元の投稿者が表明した問題に対処していません。問題は、.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;
}
于 2014-12-11T19:19:22.263 に答える