ユーザーが特定のリソースにアクセスしてWebパーツのレンダリングを停止するのに十分な権限を持っていない場合に対処できます。
まず、アクセス拒否の処理:CreateChildControls
Webパーツのリソースにアクセスしていると仮定します。
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
が設定されているかどうかを確認する必要があります。