【原创】关于SPSecurity.RunWithElevatedPrivileges的一个问题[A problem about SPSecurity.RunWithElevatedPrivileges...

对于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中配置的用户是否为服务器场的管理员,否则同样会报权限异常。

转载于:https://www.cnblogs.com/fxwdl/archive/2012/09/06/2674303.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值