我们可以开发一个webpart并使用一些用户上下文部署在sharepoint站点中。这是特定于用户的。假设如果我们使用只读用户登录,那么我们将收到一条错误消息,说明发生了错误。有什么办法可以避免吗?意味着,如果我们使用只读用户登录,则该用户看不到该部件。如果登录用户拥有完整权限,那么该用户应该可以看到它。
SPSecurity.RunWithElevatedPrivileges
方法执行具有完全控制权限的指定方法,即使用户没有完全控制权限也是如此。像这样有任何方法来满足我的标准,而不显示网页中的任何错误。 请给我解决方案。 感谢。
答案 0 :(得分:3)
如果用户没有足够的权限访问某个资源并停止呈现Web部件,您可以执行的操作。
首先,访问被拒绝处理:假设您正在访问Web部件的CreateChildControls
中的资源:
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部件的chrome。这可以通过在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
。