使特定用户特定的Web部件可见

时间:2012-06-06 06:40:11

标签: sharepoint

我们可以开发一个webpart并使用一些用户上下文部署在sharepoint站点中。这是特定于用户的。假设如果我们使用只读用户登录,那么我们将收到一条错误消息,说明发生了错误。有什么办法可以避免吗?意味着,如果我们使用只读用户登录,则该用户看不到该部件。如果登录用户拥有完整权限,那么该用户应该可以看到它。

SPSecurity.RunWithElevatedPrivileges 

方法执行具有完全控制权限的指定方法,即使用户没有完全控制权限也是如此。像这样有任何方法来满足我的标准,而不显示网页中的任何错误。 请给我解决方案。 感谢。

1 个答案:

答案 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

相关问题