模仿webpart代码中的不同用户

时间:2011-03-02 07:31:56

标签: sharepoint sharepoint-2007 web-parts

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

我的目标是只能通过网页代码完全保留。

我正在使用MOSS 2007。

2 个答案:

答案 0 :(得分: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;
                }
            }
        });

将“domain \ username”替换为正确的Windows帐户名称。然后,您可以将此用户令牌传递给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
            }
        }

希望这有帮助。

答案 1 :(得分:3)

相关问题