导航

提升SharePoint代码的权限

Posted on 2008-03-01 01:13  zhalin  阅读(1018)  评论(2编辑  收藏  举报

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

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


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

SPSecurity.CodeToRunElevated ElevatedWriteToLibrary = new SPSecurity.CodeToRunElevated(WriteToLib);
SPSecurity.RunWithElevatedPrivileges(ElevatedWriteToLibrary);


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