Sharepoint身份模拟

用代码操作Sharepoint时,会出现需要那些不具有相应权限的用户对列表、库等进行操作,一般利用

SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                using(SPSite site = new SPSite(siteurl))
{ site.AllowUnsafeUpdates
= true; SPListItem item = site.AllWebs[""].Lists[""].Folders.Add("父文档库url", SPFileSystemObjectType.Folder); item["Name"] = “文件夹名称”; item.Update(); site.AllowUnsafeUpdates = false;
} });

但有时会遇到The security validation for this page is invalid”的错误
遇到这样的错误,可能是因为Sharepoint对请求的资源进行验证,从而导致的error,比如创建列表等

Microsoft.SharePoint.Administration.SPWebApplication webApp = site.Site.WebApplication;
webApp.FormDigestSettings.Enabled = false;
SPFile spFile = site.Files.Add(fileUpload.FileName, contents);
spFile.Item.Update();
webApp.FormDigestSettings.Enabled = true;

通过上述代码来解决invalid错误。

 

接上部分内容

在实践中发现有时上面的代码不能成功运行,还是会报错。原因是不能再SPSecurity.RunWithElevatedPrivileges中对列表或者项更新,权限提升在实例化web的过程中,所以将代码修改为:

 

SPWeb web=null;
SPSecurity.RunWithElevatedPrivileges(delegate() { using(SPSite site = new SPSite(siteurl)) { web=site.AllWebs[""]; } });
            web.AllowUnsafeUpdates = true;
            SPListItem item = site.AllWebs[""].Lists[""].Folders.Add("父文档库url", SPFileSystemObjectType.Folder);
            item["Name"] = “文件夹名称”;
            item.Update();
            web.AllowUnsafeUpdates = false;
 

 

这样代码就不会有问题了

 

posted @ 2012-09-20 10:48  任泽华Ryan  阅读(329)  评论(0编辑  收藏  举报