当前位置: 首页>>技术问答>>正文


在SharePoint中模拟的最佳方式

问题描述

到目前为止,我了解以下3种在SharePoint Web部件或页面中执行模拟的方法:

  1. 使用Win32 API

    [DllImport("advapi32.dll", SetLastError=true)]
    public static extern bool LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, out IntPtr phToken);
    
  2. 使用SPSecurity.RunWithElevatedPrivileges

  3. 使用SPUserToken

    using(SPSite oSiteCollection = new SPSite("http://SpSite", bUserToken))
    {
       ----
    }
    

任何想法哪个最好,为什么?

此外,还有其他方式进行模仿吗?

最佳解决思路

这取决于你需要做什么。

RunWithElevated仅作为应用程序池标识运行,因此您可能无法访问其他Web应用程序,只能访问当前Web应用程序中的其他网站集,但可以保证您将以存在的用户身份运行(AppPool标识) 。

使用UserToken,您需要确保存在您正在模拟的用户,并且该用户已经设置了权限。

使用Win32 P /Invoke到LogonUser,我认为限制类似于UserToken。

编辑:我刚刚记得有关SharePoint Designer 2010的”Impersonation Step”的信息。

http://office.microsoft.com/en-us/sharepoint-designer-help/workflow-conditions-in-sharepoint-designer-2010-a-quick-reference-guide-HA010376962.aspx#_Toc259096791

通过这种方式,您可以模拟创建工作流的用户,并在工作流中将该步骤作为该用户运行,而无需单行代码。但是,这只能作为发布工作流程的人工作,因此需要注意谁做了这个,以及如果该人员离开公司,他们的帐户会发生什么情况(例如设置专用的“应用程序服务”帐户’为此目的)。

次佳解决思路

我们之前曾多次触及过这个问题。上次我与Keth Dalbys关于SO https://stackoverflow.com/questions/1525953/sharepoint-2007-runwithelevatedprivileges-pitfalls-of-using-this的解释有关

这解释了为什么你不能在非常特殊的情况下使用RWEP,比如在SharePoint之外获取数据时。

参考资料

本文由朵颐IT整理自网络, 文章地址: https://duoyit.com/article/2701.html,转载请务必附带本地址声明。