1

Webパーツを開発し、ユーザーコンテキストを使用してSharePointサイトに展開できます。これはユーザーに固有です。読み取り専用ユーザーでログインすると、エラーが発生したことを示すエラーメッセージが表示されるとします。それを回避する方法はありますか?つまり、読み取り専用ユーザーでログインした場合、そのユーザーにはWebパーツが表示されないはずです。ログインユーザーが完全な権限を持っている場合は、そのユーザーに表示されるはずです。

SPSecurity.RunWithElevatedPrivileges 

methodユーザーがフルコントロールを持っていない場合でも、指定されたメソッドをフルコントロール権限で実行します。このように、ウェブページにエラーを表示せずに私の基準を満たす方法はあります。解決策を教えてください。ありがとう。

4

1 に答える 1

3

ユーザーが特定のリソースにアクセスしてWebパーツのレンダリングを停止するのに十分な権限を持っていない場合に対処できます。

まず、アクセス拒否の処理:CreateChildControlsWebパーツのリソースにアクセスしていると仮定します。

private bool accessDenied;

protected override void CreateChildControls()
{ 
  try
  {
    // prevent SharePoint from catching an access denied exception and 
    // redirecting to the error page.
    using (new SPSecurity.SuppressAccessDeniedRedirectInScope())
    {
      SPContext.Current.Web.Lists["Restriced"] // some thing...
    }
  }
  catch (UnauthorizedAccessException)
  {
    // set variable in case the user has not enough permissions
    accessDenied = true;
  } 
}

これで、ユーザーがリソースにアクセスするための十分な権限を持っていないかどうかがわかりました。次のステップは、レンダリングを無効にして、Webパーツとそのコンテンツを非表示にすることです。Webパーツを非表示にするのは簡単です。私たちがする必要があるのは、renderメソッドをオーバーライドし、何もしないことです。

protected override void RenderWebPart(HtmlTextWriter writer)
{
  if (accessDenied) return;

  base.RenderWebPart(writer);
}

または、エラーメッセージを表示することもできます。しかし、これは目的を破るだろうと私は推測します。

最後のステップは、Webパーツのクロムを無効にすることです。ChromeTypeこれは、OnPreRenderメソッドでを設定することで実行できます。

protected override void OnPreRender(EventArgs e)
{
  // Important to call base method in order to ensure child controls...
  base.OnPreRender(e);

  if (accessDenied)
  {
    ChromeType = PartChromeType.None;
  }
}

もちろん、Webパーツの他のメソッドをオーバーライドする場合は、accessDeniedが設定されているかどうかを確認する必要があります。

于 2012-06-06T08:36:43.063 に答える