惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Martin Fowler
Martin Fowler
J
Java Code Geeks
博客园 - 【当耐特】
宝玉的分享
宝玉的分享
腾讯CDC
D
DataBreaches.Net
Microsoft Azure Blog
Microsoft Azure Blog
Engineering at Meta
Engineering at Meta
V
V2EX
F
Fortinet All Blogs
MyScale Blog
MyScale Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
T
Tailwind CSS Blog
Jina AI
Jina AI
GbyAI
GbyAI
大猫的无限游戏
大猫的无限游戏
A
About on SuperTechFans
酷 壳 – CoolShell
酷 壳 – CoolShell
爱范儿
爱范儿
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
U
Unit 42
B
Blog
M
MIT News - Artificial intelligence
N
Netflix TechBlog - Medium

博客园 - 吴东雷

配置NuGet自动下载丢失的Dll SharePoint2010站点在IE下的操作异常 ExtJS的store.sync向Asp.net MVC的Action提交时引发System.Reflection.AmbiguousMatchException异常 ReportViewerWebWebpart显示报表时显示的脚本错误:Uncaught Sys.ArgumentNullException: Sys.ArgumentNullException: 值不能为 null。参数名: panelsCreated[0] 【转载】javascript getComputedStyle,getPropertyValue,CurrentStyle说明 【原创】如何让SharePoint2010的内联代码支持.Net framework 3.5[How to embed inline code in aspx with .net framework 3.5 syntax] 【半原创】SharePoint CAML 查询生成器[SharePoint 2010 CAML Query Builder] 【原创】在DataFormWebPart中将列表附件显示为图片(二)[How to display list item attachments as image in DFWP Part 2] 【原创】如何在DataFormWebPart中嵌入自定义控件[How to embeded custom control in DFWP] 【原创】SharePoint2010的SaveButton如何实现在跳转前给用户以提示[How to implement SaveButton display an alert when Redirect action] 【原创】在DataFormWebPart中将列表附件显示为图片(一)[How to display list item attachments as image in DFWP Part1] Asp.net中全局缓存的几种方式 修改Model中hasMany中自动生成的属性值 ExtJS中自定义组件并将事件暴露给调用者 从控制台测试SharePoint遇到的两个问题 The Sencha Class System(理解ExtJs定义类的过程) IIS7中Sites(站点), Applications(应用程序), Virtual Directories(虚拟目录)的粗浅理解 按钮的ajax请求时,一次点击两次提交的问题 MVC3中Razor模板引擎如何修改View的基类
【原创】关于SPSecurity.RunWithElevatedPrivileges的一个问...
吴东雷 · 2012-09-06 · via 博客园 - 吴东雷

对于SPSecurity.RunWithElevatedPrivileges,网上有很多文章介绍它是用来执行特权代码了,但是我在今天的调用中确一直报权限异常,所以深入的了解一下它,涉及到以下两个问题需要注意一下:

1、SPSecurity.RunWithElevatedPrivileges的运行必需在一个新的上下文中执行,意思是说必需要New一个新的SPSite与SPWeb才可以,例如错误的代码如下:

 SPSecurity.RunWithElevatedPrivileges(delegate()
 {
     SPList list=SPContext.Current.Web.List["list name"];
});

这个时候其运行的上下文其实还是当前用户(如未登录就是匿名用户),其特权并未提升,所以需要以下面的代码来运行才是正确的

SPSecurity.RunWithElevatedPrivileges(delegate()
{
Guid siteId = SPContext.Current.Web.Site.ID;
using (SPSite impersonatedSite = new SPSite(siteId))
{
    using (SPWeb web = impersonatedSite.RootWeb)
    {
           SPList list=web.List["list name"];    
    }
}
});

2、SPSecurity.RunWithElevatedPrivileges的本质

SPSecurity.RunWithElevatedPrivileges的本质是以System Account账户来执行代码,但确切的说,是以应用程序所关联的应用程序池(Application Pool)中的用户来执行代码。

image

在这个图片中,就是以Dev\administrator账号来执行代码,那现在就存在一个问题是:如果dev\administrator不是网站集的用户,或者不是网站集的管理怎么办?答案是,可能会因为权限不够而报异常。所以在这里一定要将标识的账号配置为网站集的System Account账号的所对应的账号或者某个管理员账号。同样的,如果是要在代码中去调用SPFarm实例中的相应属性或方法,也要注意Application Pool中配置的用户是否为服务器场的管理员,否则同样会报权限异常。

一点说明:为什么在标题中要嵌入英文?原因是为了能够让国外的网友能查询到这篇文章。平常在Google上查资料的时候,经常参考国外网友的博客,帮助我解决了很多问题,所以我也想让他们能够参考我写的内容。当然文中我不可能全部译为英文,所以我尽量把代码粘全,靠代码说话吧。