博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WSS 代码执行的权限提升
阅读量:6503 次
发布时间:2019-06-24

本文共 1596 字,大约阅读时间需要 5 分钟。

WSS 代码执行的权限提升

概述:

WSS 默认使用身份模拟执行代码,也就是说用当前登录的用户身份执行Web Part或者自定义应用程序的代码访问。在大多数情况下,这种机制能够准确并严格地控制了标准权限的用户他对特定网站资源和敏感数据的访问,这也是我们想要达到的目标。

然而,有时候在一些特殊的场景,你的代码必须执行wss 对象某些受限制的方法,即便请求者是没有这个权限的用户。那么在这种情况下,我们需要提升普通用户执行代码的权限。

实现方法:

SPSecurity.RunWithElevatedPrivileges(delegate()

{

    // 需要提升权限执行的代码

});

事例:

获取网站集owner 的 名称 SPSite.Owner.Name

默认是需要网站集管理员权限的用户才能得到,如果没有执行代码权限提升,以一个普通用户去执行SPSite.Owner.Name,系统会报一个”拒绝访问”的错误。

然而执行了如下代码,我们普通权限的用户,也可以成功得访问到SPSite.Owner.Name

SPSite siteColl = SPContext.Current.Site;

SPWeb site = SPContext.Current.Web;

SPSecurity.RunWithElevatedPrivileges(delegate() {

using (SPSite ElevatedsiteColl = new SPSite(siteColl.ID)) {

using (SPWeb ElevatedSite = ElevatedsiteColl.OpenWeb(site.ID))

{

        //以SHAREPOINT"System account 系统帐号身份运行

      string SiteCollectionOwner = ElevatedsiteColl.Owner.Name;    

    }

 }

});

注意:

在使用SPSecurity.RunWithElevatedPrivileges权限提升的代码里头,必须实例化SPSite,SPWeb对象,而不能使用Microsoft.SharePoint.SPContext.Current属性获得对象,因为那些对象是以当前用户的安全上下文创建的

请使用using方式实例化对象,以便系统能自动执行Dispose,完成资源释放。

上面谈到的这种方式是以最高完全权限的系统管理员帐户去执行代码的,当然我们也可以指定运行代码的帐号:

SPSite siteColl = SPContext.Current.Site;

SPWeb site = SPContext.Current.Web;

SPUser user = site.Users[@"litware\ken"];

SPUserToken userToken = user.UserToken;

 

SPSecurity.RunWithElevatedPrivileges(delegate() {

using (SPSite ElevatedsiteColl = new SPSite(siteColl.ID, userToken)) {

using (SPWeb ElevatedSite = ElevatedsiteColl.OpenWeb(site.ID))

{        //以litware"ken身份运行

      string SiteCollectionOwner = ElevatedsiteColl.Owner.Name;    

    }

 }

});

这种方式的话,代码就以litware"ken 的权限来运行,不管ken 的权限是高还是低。

转载于:https://www.cnblogs.com/llbofchina/archive/2008/05/24/1206393.html

你可能感兴趣的文章
如何让两个div并排,并且div要看得见边框
查看>>
Pyhon中的除法
查看>>
go系列之数组
查看>>
10. 星际争霸之php设计模式--原型模式
查看>>
使用Java 8 API,根据传递的分隔符,连接list中所有的元素
查看>>
css知多少(4)——解读浏览器默认样式
查看>>
如何开启常用端口和其他端口
查看>>
从零开始学android开发-查看sqlite数据库
查看>>
各种类型Android源代码
查看>>
什么叫一层交换机,二层交换机,三层交换机?
查看>>
黄聪:jquery mobile通过a标签页面跳转后,样式丢失、js失效的解决方法
查看>>
java中的初始化块
查看>>
java调用webservice
查看>>
《大型分布式网站架构设计与实践》
查看>>
IE7中使用Jquery动态操作name问题
查看>>
winform 取消datagridview第一行选中状态
查看>>
[转]windows azure How to use Blob storage from .NET
查看>>
Microsoft dotnetConf 2015 一些整理
查看>>
Qt widgets
查看>>
Makefile编写 五 隐含规则
查看>>