模仿webpart代码中的不同用户

use*_*672 3 sharepoint web-parts sharepoint-2007

我使用sharepoint列表作为数据库.我想以某种方式模仿webpart代码中的不同用户,而不是作为这个用户,我将对列表具有写入和编辑权限.

我的目标是只能通过webpart代码完全保留.

我正在使用MOSS 2007.

小智 11

SPSecurity.RunWithElevatedPrivilieges()将执行您的代码作为系统帐户,即运行应用程序池的帐户,可能是也可能不是您想要执行的操作.例如,如果您将一个工作流程附加到列表中,当新项目添加到列表时应该触发该工作流程,如果您在系统帐户的凭据下插入新的列表项,则不会触发该工作流程(这是一个安全修复程序)在SharePoint 2007 SP 1中引入.在这种情况下,您必须在列表上具有正确权限的其他帐户下执行插入操作.

您可以使用以下代码为任何用户获取UserToken:

        SPUserToken userToken = null;
        SPSecurity.RunWithElevatedPrivileges(() =>
        {
            using (SPSite site = new SPSite(SPContext.Current.Site.ID))
            {
                using (SPWeb web = site.OpenWeb(SPContext.Current.Web.ID))
                {
                    userToken = web.AllUsers["domain\\username"].UserToken;
                }
            }
        });
Run Code Online (Sandbox Code Playgroud)

用正确的Windows帐户名替换"domain\username".然后,您可以将此用户令牌传递给SPSite对象构造函数的其中一个重载,以执行此用户凭据下的代码,如下所示:

        using (SPSite site = new SPSite(SPContext.Current.Site.ID, userToken))
        {
            using (SPWeb web = site.OpenWeb(SPContext.Current.Web.ID))
            {
                // This code will execute under the credentials of the userToken user
            }
        }
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.