【问题标题】:How to get Content types如何获取内容类型
【发布时间】:2010-08-07 16:22:35
【问题描述】:

我正在开发一个 Windows 应用程序,它通过其内置的 Web 服务与 SharePoint 对话,并且我希望在 SharePoint 网站上获得所有可用的内容类型,

我正在尝试使用

Web.Webs WebsService = new Web.Webs(); WebsService.Credentials=凭据; WebsService.Url="网络服务的网址"; XmlNode listOfContentTypes = WebsService.GetContentTypes();

如果凭据具有管理员权限,我可以获得所有可用内容类型的列表,但如果凭据没有管理员权限,则会引发 401 异常(权限不足)。

我的问题是:
如果我没有管理员权限,如何获得 SharePoint 网站上可用的所有内容类型?

【问题讨论】:

    标签: c# sharepoint sharepoint-2007 web-services


    【解决方案1】:

    我在 Reflector 中进行了一些探索,以了解实际需要哪些权限。查看下面的方法,它位于GetContentTypes() 服务方法的调用链中:

    public string GetContentTypeTemplates()
    {
        SPWeb web = SPContext.GetContext(HttpContext.Current).Web;
        web.CheckPermissions(SPBasePermissions.EmptyMask | SPBasePermissions.ManageLists);
        web.CheckPermissions(SPBasePermissions.EmptyMask | SPBasePermissions.AddAndCustomizePages);
        return this.GetGeneralContentTypes(web.AvailableContentTypes);
    }
    

    据此,我们可以得知,SharePoint 要求您拥有ManageListsAddAndCustomizePages 权限才能检索所有内容类型。

    因此,一种解决方案可能是确保客户帐户具有这些权限,可能是通过创建自定义权限级别,或者,如果在发布站点中工作,则将帐户添加到 Designers 组。

    【讨论】:

      【解决方案2】:

      如果您希望使用 OOB Web 服务,则需要在调用应用程序中提供凭据(具有足够权限)。

              Web.Webs WebService = new Web.Webs();
              WebService.Credentials = new NetworkCredential("username", "password");
              XmlNode list = WebService.GetContentTypes();
      

      如何获得这些凭据取决于您...

      【讨论】:

      • 我有一个用户填写用户名域和密码的表单,然后我从xml 文件位于我无法修改的共享位置,并且要构建此查询,我需要从他的 id 知道内容类型的名称。只有读取权限的用户如何知道内容类型的名称从他的网络ID?在对象模型中,问题是通过使用 SpSecurity.RunWithelevatedprivilege 解决的......,我应该在 Web 服务中做什么?是否可以获取网络内容类型?
      • 当涉及到 Web 服务时,SPSecurity.RunWithElevatedPrivileges 没有等效项,这是有充分理由的。如果有的话,任何人都可以编写一个程序,以管理员身份对 SharePoint 服务器执行代码,而无需对服务器进行物理访问。这将是一个非常严重的安全漏洞。
      【解决方案3】:

      您可以编写一个包装 Web 服务,使用所需的凭据调用 Webs Web 服务(甚至使用 SharePoint 对象模型)。可以将此包装服务部署到 SharePoint 服务器。

      然后您的自定义应用程序可以调用包装服务,而无需提供正确的凭据。

      【讨论】:

      • 我需要使用网络服务内置的共享点来完成。我可以在不编写自定义 Web 服务的情况下获取内容类型吗?
      猜你喜欢
      • 1970-01-01
      • 2016-07-11
      • 2012-09-13
      • 2012-08-10
      • 2011-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-02
      相关资源
      最近更新 更多