使用 SPSecurity.RunWithElevatedPrivileges 更新共享点用户配置文件属性

Posted

技术标签:

【中文标题】使用 SPSecurity.RunWithElevatedPrivileges 更新共享点用户配置文件属性【英文标题】:Update sharepoint user profile property with SPSecurity.RunWithElevatedPrivileges 【发布时间】:2015-08-17 09:55:16 【问题描述】:

我尝试使用下一个代码更改用户配置文件属性

SPSecurity.RunWithElevatedPrivileges(delegate()
SPSite currentSite = new SPSite(SPContext.Current.Web.Url);

SPServiceContext serviceContext = SPServiceContext.GetContext(currentSite);
UserProfileManager upm = new UserProfileManager(serviceContext);
UserProfile up1 = upm.GetUserProfile("DOMAIN\\User3");
up1["CustomProperty"].Value=10;           
up1.Commit();

currentSite.Dispose();
);

当我使用帐户 User1 打开页面时,一切正常,该帐户有权更改所有用户配置文件。但是当我用 User2(没有权限)打开页面时 - 我得到 403 错误。在调试器中 up1["CustomProperty"].Value 为空。

为什么 SPSecurity.RunWithElevatedPrivileges 没有效果,我该如何解决这个问题?

谢谢

【问题讨论】:

【参考方案1】:

我在下一篇文章中找到了我的问题的描述 Impersonation does not work with UserProfileManager

作为一个原因,您可以在每次获取或设置用户配置文件属性时清除 HttpContext。例如,下一个代码对我来说很好。

 SPSecurity.RunWithElevatedPrivileges(delegate()
        
            HttpContext tempCtx = HttpContext.Current;
            HttpContext.Current = null;

            UserProfile userProfile = GetUserProfile(user);
            userProfile["SomeProperty"].Value = points;
            userProfile.Commit();

            HttpContext.Current = tempCtx;
        );

【讨论】:

以上是关于使用 SPSecurity.RunWithElevatedPrivileges 更新共享点用户配置文件属性的主要内容,如果未能解决你的问题,请参考以下文章

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份

Kettle java脚本组件的使用说明(简单使用升级使用)