MOSS模拟登录的新发现
在MOSS中模拟登录可以很方便的使用SPSecurity来模拟运行程序池中的用户了。
模拟登录其实是将web.CurrentUser 设置为运行程序池用户。
在使用过程中,我发现:
发现一:如下所示代码
SPSite site = null;
SPWeb myWeb = null;
SPSecurity.RunWithElevatedPrivileges(delegate()
{
site = SPContent.Current.Site;
myWeb = site.OpenWeb();
});
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都将会是模拟的用户。
SPWeb myWeb = null;
SPSecurity.RunWithElevatedPrivileges(delegate()
{
site = new SPSite(SiteURL);
myWeb = site.OpenWeb();
//下面对列表或其它进行的更新等操作并不需要放到这里。
});
//放到这里都行
//直到释放site,web.CurrentUser都将会是模拟的用户。
这里就要追寻模拟登录的原理了.SPSecurity.RunWithElevatedPrivileges将SPWeb.CurrentUser设为运行程序池账户了.如果不是New的一个网站对象,则不法为SPWeb.CurrentUser赋值.
这也就是为什么一不行,而二可以的原因.