提升SharePoint代码的权限

时间:2022-08-29 14:58:17

以前在编写基于域认证的SharePoint站点时,都没有意识到代码的执行权限问题,因为我基本上都是以管理员身份来登录的。现在把网站认证改为Forms认证以后,一般的用户并不是网站的管理员,导致有些控件会遇到拒绝访问的情况。一个例子是:假如一个普通的Internet用户要往一个Document library来进行写入操作的话就会被拒绝访问。

提升SharePoint代码的权限public   void  WriteToLib()
提升SharePoint代码的权限提升SharePoint代码的权限
{
提升SharePoint代码的权限   
byte[] file = 。。。。。; //get byte array
提升SharePoint代码的权限
   SPSite site = new SPSite("url");
提升SharePoint代码的权限   SPWeb web 
= site.OpenWeb("url");
提升SharePoint代码的权限   SPFolder lib 
= web.folders["libName"];
提升SharePoint代码的权限   SPFileCollection files 
= lib.Files;
提升SharePoint代码的权限   files.Add(
"fileName", file); //access denied
提升SharePoint代码的权限
}

提升SharePoint代码的权限
提升SharePoint代码的权限

同样的代码如果用户是网站管理员就没有这个权限问题。
那么解决方案是什么呢?我们需要提升这段代码的权限,而不管当前的用户是不是有足够的权限。从SharePoint SDK中看到可以这样做:

提升SharePoint代码的权限SPSecurity.CodeToRunElevated ElevatedWriteToLibrary  =   new  SPSecurity.CodeToRunElevated(WriteToLib);
提升SharePoint代码的权限SPSecurity.RunWithElevatedPrivileges(ElevatedWriteToLibrary);


这样就把我们的方法的权限提高到了系统帐号的高度,问题就解决了。
如果用到SPSite对象的话,则一定要在这个方法内部来创建,不可以用SPContext.Current.Site,不然没有效果.