【问题标题】:Prevent Access to Custom Web Application Pages by Non-Admin Users in SharePoint防止 SharePoint 中的非管理员用户访问自定义 Web 应用程序页面
【发布时间】:2010-12-20 17:20:39
【问题描述】:

我有一个与 SharePoint (MOSS 2007) 解决方案集成的自定义 Web 应用程序。我想在此自定义 Web 应用程序中添加对页面的基于角色的访问,只有指定 SharePoint 组中的用户或具有特定角色的用户才能访问它们。其他用户被发送到默认的 OOTB 网页,并给出消息“您无权查看此页面”。

谁能指点我有关如何实现这一点以及如何控制每个自定义页面的访问的教程?

请注意,这些页面是自定义 Web 应用程序的一部分,并且不是通过 SharePoint API 或界面创建的。

谢谢,MagicAndi。

更新

只是为了让您知道,我希望有一个解决方案,我们可以利用 SharePoint 功能来扩展安全修整或项目权限,以限制对自定义 Web 应用程序页面的访问。我已经有代码可以在页面加载时检查用户的 SPGroup,并在需要时进行重定向。谢谢。

【问题讨论】:

    标签: security sharepoint permissions sharepoint-2007


    【解决方案1】:

    我当前的项目有一个类似的设置,我对其进行了一些更改以使您的问题更有意义,我们使用自定义网页的基类,例如:

    public abstract class WebPageBase : Page
    {
        public SPBasePermissions PagePermissionFlag;
        public override void OnInit(EventArgs e)
        {
            SPWeb web = SPContext.Current.Web;
            if(!web.DoesUserHavePermissions(PagePermissionFlag))
            {
                // build the access denied page
                SPUtility.Redirect(SPUtility.AccessDeniedPage + "?Source=" + SPHttpUtility.UrlKeyValueEncode(web.Site.MakeFullUrl(Request.RawUrl)),
                                   SPRedirectFlags.RelativeToLayoutsPage,
                                   HttpContext.Current);
            }
    } }

    然后在页面本身上,定义权限:

    public class ContentPage : WebPageBase
    {
        protected void Page_PreInit(Object sender, EventArgs e)
        {
            PagePermissionFlag = SPBasePermissions.ViewFormPages;
        }
    }
    

    注意:您也可以在以下位置设置:

    <%@Page PagePermissionFlagString="SPBasePermissions.ViewFormPages"%> *
    * 您必须将字符串转换为 WebPageBase 中的枚举)

    仅供参考,这个额外的位与上面的实现无关,它是我们内部如何使用它:

    public static class CurrentUser
    {
        public static bool IsAdmin
        {
            get
            {
                return SPContext.Current.Web.DoesUserHavePermissions(SPBasePermissions.ManageWeb);
            }
        }
    
        public static bool IsReader
        {
            get
            {
                return SPContext.Current.Web.DoesUserHavePermissions(SPBasePermissions.ViewFormPages);
            }
        }
    }

    【讨论】:

    • 澄清一下,上下文中的 SPWeb 将是您从中访问自定义页面的那个,推荐的方法是使用 _layouts 文件夹来实现这一点,因此上下文将是 @987654321 下的那个@。如果您使用 inetpub 文件夹或任何其他映射来访问您的页面,您可能需要根据请求打开网络。
    • F.阿基诺,非常感谢您的回答。赏金的当之无愧的赢家!
    【解决方案2】:

    您必须对页面实施 ItemLevel 安全性。转到页面库并选择页面属性和说项目权限,打破其中的权限并仅添加您想要授予访问权限的用户。如果您想将其添加到多个文件中,您可以将它们分组到单独的文件夹中,并单独应用这些文件夹的权限。

    当一些人试图查看他不应该看到的页面时,SharePoint 会自动向他发送拒绝访问页面。

    如果您在页面上应用项目级权限,SharePOint 会自动应用安全修剪,这样只有他有权访问的页面才能看到其他人。

    【讨论】:

    • Kusek,很遗憾,我的自定义 Web 应用程序页面在 Pages 文档库中不可见,因此此方法无法回答我的问题。
    【解决方案3】:

    查看 Sharepoint 公开的用户和组 Web 服务。您的自定义 Web 应用可以调用其方法来获取有关当前用户配置文件的信息。

    例如 UserGroup.GetUserInfo() 方法返回可以回答您的问题的 IsSiteAdmin 标志。

    http://msdn.microsoft.com/en-us/library/ms774637.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-18
      • 2016-04-11
      • 1970-01-01
      • 2020-09-01
      • 2013-09-27
      • 2012-10-10
      • 1970-01-01
      • 2010-09-06
      相关资源
      最近更新 更多