如果用户没有足够的权限来访问某个资源并停止呈现 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
已设置。