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;
 

 

这样代码就不会有问题了

 

你可能感兴趣的:(SharePoint)