惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
Check Point Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 聂微东
月光博客
月光博客
博客园 - 司徒正美
爱范儿
爱范儿
aimingoo的专栏
aimingoo的专栏
量子位
Recent Announcements
Recent Announcements
V
V2EX
P
Proofpoint News Feed
小众软件
小众软件
云风的 BLOG
云风的 BLOG
腾讯CDC
宝玉的分享
宝玉的分享
Microsoft Azure Blog
Microsoft Azure Blog
大猫的无限游戏
大猫的无限游戏
Vercel News
Vercel News
The GitHub Blog
The GitHub Blog
A
About on SuperTechFans
B
Blog
博客园_首页
GbyAI
GbyAI
博客园 - Franky

博客园 - 山 前

SharePoint中计算值公式函数简介 System.InvalidOperationException: 无法生成临时类(result=1)。 配置爬网能爬PDF文档. 检索 COM 类工厂中 CLSID 为 {.....} 的组件时失败,80070005 sql函数大全 JavaScript对象与数组参考大全 如何创建高性能的索引 如何用fckeditor编辑器上传图片、flash、视频到moss的图片库中 动态调用webservice - 山 前 - 博客园 信息发布webpart——网页编辑器应用攻略 如何在同一任务列表中显示我的任务及我所属组的任务 ASP.NET 生成HTML静态页面实例 彻底弄懂CSS盒子模式之一 DOCTYPE用法详解 寻块心灵净土,遥祭遇难同胞 一个树控件类的实现---打造自己的树控件 通过在 Page 指令或 配置节中设置 validateRequest=false 可以禁用请求验证 Web Service学习 javascript知识
MOSS模拟登录的新发现
山 前 · 2008-11-24 · via 博客园 - 山 前

在MOSS中模拟登录可以很方便的使用SPSecurity来模拟运行程序池中的用户了。

模拟登录其实是将web.CurrentUser 设置为运行程序池用户。

在使用过程中,我发现:

发现一:如下所示代码

            SPSite site = null;
            SPWeb myWeb 
= null;
            SPSecurity.RunWithElevatedPrivileges(
delegate()
            
{
                site 
= SPContent.Current.Site;
                myWeb 
= site.OpenWeb();

            }
);

即采用SPContent.Current.Site或SPContent.Current.Web来指定site或web是不能实现模拟的目的的。

发现二:只需要将获取web 的代码包含在SPSecurity.RunWithElevatedPrivileges中即可。

SPSite site = null;
SPWeb myWeb 
= null;
SPSecurity.RunWithElevatedPrivileges(
delegate()
{
    site 
= new SPSite(SiteURL);
    myWeb 
= site.OpenWeb();
    
//下面对列表或其它进行的更新等操作并不需要放到这里。

}
);
//放到这里都行
//直到释放site,web.CurrentUser都将会是模拟的用户。

这里就要追寻模拟登录的原理了.SPSecurity.RunWithElevatedPrivileges将SPWeb.CurrentUser设为运行程序池账户了.如果不是New的一个网站对象,则不法为SPWeb.CurrentUser赋值.

这也就是为什么一不行,而二可以的原因.