{sharepoint}提升 SharePoint 代码执行权限
提升 SharePoint 代码执行权限
关于如何提升 SharePoint 代码执行权限及相关知识介绍的文章我们园子里有很多,
这里给出其中两篇文章的链接,就不再啰嗦了。
http://www.cnblogs.com/llbofchina/archive/2008/05/24/1206393.html
http://www.cnblogs.com/nirvanalst/archive/2008/10/13/1310411.html
由于项目中经常需要提升某些代码的执行权限,每次都需要写类似于下面的代码:
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite Site = new SPSite(SiteId))
{
using (SPWeb Web = Site.OpenWeb(WebUrl))
{
...
}
}
});
久而久之,项目中充斥着“相同的”代码,而且看起来也不是很优雅,
就连使用 “EventHandler Explorer”为表单库、列表绑定事件处理程序时,也多出了
诸如于 <>c__DisplayClass1、<>c__DisplayClass2 等自动生成的类。
考虑到其复用性,故对其作如下封装:
using System;
using Microsoft.SharePoint; namespace Pturesoft.Utility.Handler
{
/// <summary>
/// 提供了在 SharePoint 站点和网站上提升方法执行权限所需的功能。无法继承此类。
/// </summary>
public static class Privileges
{
#region static Privileges --- 构造函数
static Privileges()
{
//暂无任何实现。
}
#endregion #region public delegate [void] PrivilegeMethod --- 表示需要提升执行权限的方法
/// <summary>
/// 表示需要提升执行权限的方法。
/// </summary>
/// <param name="oSite">表示一个包括顶级网站和所有子网站的 SharePoint 站点的集合。</param>
/// <param name="oWeb">表示一个 SharePoint 网站。</param>
/// <param name="args">该方法执行时所需的参数。不需要该参数时,请指定为 null。</param>
public delegate void PrivilegeMethod(SPSite oSite, SPWeb oWeb, Object args);
#endregion #region public static [void] Elevated --- 在当前站点和当前网站上提升方法的执行权限
/// <summary>
/// 在当前站点和当前网站上提升方法的执行权限。
/// </summary>
/// <param name="privilegeMethod">需要提升执行权限的方法。</param>
/// <param name="args">该方法执行时所需的参数。不需要该参数时,请指定为 null。当需要为 SharePoint 事件处理程序提升方法的执行权限时,该参数必须为 SharePoint 事件的 Microsoft.SharePoint.SPItemEventProperties 消息对象。</param>
public static void Elevated(PrivilegeMethod privilegeMethod, Object args)
{
Guid SiteID;
String WebUrl = null; if (args is SPItemEventProperties) //事件处理程序
{
SPItemEventProperties Properties = args as SPItemEventProperties; SiteID = Properties.SiteId;
WebUrl = Properties.RelativeWebUrl;
}
else //页面请求
{
SiteID = SPContext.Current.Site.ID;
WebUrl = SPContext.Current.Web.ServerRelativeUrl;
} SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite oSite = new SPSite(SiteID))
{
using (SPWeb oWeb = oSite.OpenWeb(WebUrl))
{
privilegeMethod(oSite, oWeb, args);
}
}
});
}
#endregion #region public static [void] Elevated --- 为 SharePoint 事件处理程序提升执行权限
/// <summary>
/// 为 SharePoint 事件处理程序提升执行权限。
/// </summary>
/// <param name="privilegeMethod">需要提升执行权限的方法。</param>
/// <param name="properties">SharePoint 事件的 Microsoft.SharePoint.SPItemEventProperties 消息对象。</param>
/// <param name="args">该方法执行时所需的参数。不需要该参数时,请指定为 null。</param>
public static void Elevated(PrivilegeMethod privilegeMethod, SPItemEventProperties properties, Object args)
{
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite oSite = new SPSite(properties.SiteId)) { using (SPWeb oWeb = oSite.OpenWeb(properties.RelativeWebUrl)) { privilegeMethod(oSite, oWeb, args); } } }); } #endregion #region public static [void] Elevated --- 在当前站点和指定的网站上提升方法的执行权限 /// <summary> /// 在当前站点和指定的网站上提升方法的执行权限。 /// </summary> /// <param name="privilegeMethod">需要提升执行权限的方法。</param> /// <param name="webUrl">一个字符串,包含相对于服务器或相对于网站的的 URL。相对于服务器的 URL 以正斜杠 ("/"),开始,而相对于网站的 URL 不以正斜杠开头。</param> /// <param name="args">该方法执行时所需的参数。不需要该参数时,请指定为 null。</param> public static void Elevated(PrivilegeMethod privilegeMethod, String webUrl, Object args) { Guid SiteID = SPContext.Current.Site.ID; SPSecurity.RunWithElevatedPrivileges(delegate() { using (SPSite oSite = new SPSite(SiteID)) { using (SPWeb oWeb = oSite.OpenWeb(webUrl)) { privilegeMethod(oSite, oWeb, args); } } }); } #endregion #region public static [void] Elevated --- 在指定的站点和指定网站上提升方法的执行权限 /// <summary> /// 在指定的站点和指定网站上提升方法的执行权限。 /// </summary> /// <param name="privilegeMethod">需要提升权限的方法。</param> /// <param name="siteUrl">一个字符串,该字符串指定网站集的绝对 URL。</param> /// <param name="webUrl">一个字符串,包含相对于服务器或相对于网站的的 URL。相对于服务器的 URL 以正斜杠 ("/"),开始,而相对于网站的 URL 不以正斜杠开头。</param> /// <param name="args">该方法执行时所需的参数。不需要该参数时,请指定为 null。</param> public static void Elevated(PrivilegeMethod privilegeMethod, String siteUrl, String webUrl, Object args) { SPSecurity.RunWithElevatedPrivileges(delegate() { using (SPSite oSite = new SPSite(siteUrl)) { using (SPWeb oWeb = oSite.OpenWeb(webUrl)) { privilegeMethod(oSite, oWeb, args); } } }); } #endregion }}
注:均提升到系统权限级别!
封装后,将需要提升执行权限的方法、方法所需参数传递给静态方法 Privileges.Elevated 即可。
需要提升执行权限的方法签名如下:
#region private [void] Testing --- 表示需要提升执行权限的方法
/// <summary>
/// 表示需要提升执行权限的方法。
/// </summary>
/// <param name="oSite">表示一个包括顶级网站和所有子网站的 SharePoint 站点的集合。</param>
/// <param name="oWeb">表示一个 SharePoint 网站。</param>
/// <param name="args">该方法执行时所需的参数。不需要该参数时,请指定为 null。</param>
private void Testing(SPSite oSite, SPWeb oWeb, object args)
{
...
}
#endregion
提升方法的执行权限时,有以下四种可选重载:
//重载一:适用于 InfoPath 表单(浏览器模式)、WebPart、页面请求、SharePoint 事件处理程序(参数必须为事件的 SPItemEventProperties 消息对象)
Privileges.Elevated(this.Testing, null); //重载二:仅适用于 SharePoint 事件处理程序
Privileges.Elevated(this.Testing, properties, null); //重载三:适用于 InfoPath 表单(浏览器模式)、WebPart、页面请求
Privileges.Elevated(this.Testing, "webUrl", null); //重载四:适用于任何情况
Privileges.Elevated(this.Testing, "siteUrl", "webUrl", null);
源文件:http://files.cnblogs.com/zys529/Privileges.rar
MD5:B288FF01FDFBF9E0F82F5B1DEF6E3800
{sharepoint}提升 SharePoint 代码执行权限的更多相关文章
- 在C#开发中如何使用Client Object Model客户端代码获得SharePoint 网站、列表的权限情况
自从人类学会了使用火,烤制的方式替代了人类的消化系统部分功能,从此人类的消化系统更加简单,加速了人脑的进化:自从SharePoint 2010开始有了Client Side Object Model ...
- 用jQuery插件来提升SharePoint列表表单用户体验
本文将描述如何通过简单的CSS和jQuery插件提升SharePoint默认的列表表单体验.这些小技巧并不仅仅改善了外观,还提升了可用性. 剩余字数 我们以通知列表为例.通知正文字段假设要求不应该超过 ...
- 【.net 深呼吸】限制执行代码的权限
前面好几篇文章,老周都跟大伙伴们聊了跟应用程序域有关的话题,干脆咱们一聊到底吧,做学问就应该这样,有恒心. App Domain的创建新应用程序域的方法中,有一个特殊的重载: public stati ...
- JS-预解析(提升)与代码执行过程
1,预解析的过程. 2,代码的执行过程. 预解析:程序在执行过程,会先将代码读取到内存中检查,会将所有的声明在此处进行标记,所谓的标记就是让js解析器知道这个名字,后面在使用这个名字的时候,不会出现未 ...
- 痞子衡嵌入式:在串口波特率识别实例里逐步展示i.MXRT上提升代码执行性能的十八般武艺
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是在串口波特率识别实例里逐步展示i.MXRT上提升代码执行性能的十八般武艺. 恩智浦 MCU SE 团队近期一直在加班加点赶 SBL 项目 ...
- 「白帽挖洞技能提升」ThinkPHP5 远程代码执行漏洞-动态分析
ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的,在保持出色的性能和至简代码的同时,也注重易用性.但是简洁易操作也会出现漏洞,之前ThinkPHP官方修复了一个严重的远程代码执行漏 ...
- Java虚拟机JVM内存分区及代码执行机制
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt230 1. JVM体系结构 图1 JVM体系结构 方法区:存放JVM ...
- 值得细读!如何系统有效地提升Android代码的安全性?
众所周知,代码安全是Android开发工作中的一大核心要素. 11月3日,安卓巴士全球开发者论坛线下系列沙龙第七站在成都顺利举办.作为中国领先的安卓开发者社区,安卓巴士近年来一直致力于在全国各大城市举 ...
- PowerSploit-CodeExecution(代码执行)脚本渗透实战
首先介绍一下国外大牛制作的Powershell渗透工具PowerSploit,上面有很多powershell攻击脚本,它们主要被用来渗透中的信息侦察.权限提升.权限维持. 项目地址:https://g ...
随机推荐
- iOS开发小技巧--取消按钮的选中状态
首先要自定义按钮,并且实现如下方法,对,就是这么实现!!
- iOS错误整理--自定义按钮,给按钮内部赋值出现的错误
一.练习中为了实现自定义按钮,按钮中的imageView和titleLabel默认是左右排列的.在练习中自定义为上下排列. *在以下方法中重新布局按钮中的子控件 - (void)layoutSubvi ...
- 超多的CSS3圆角渐变网页按钮
<!DOCTYPE html><head><title>超多的CSS3圆角渐变按钮</title><style type="text/c ...
- Jquery仿IGoogle实现可拖动窗口(源码)
google可谓是ajax的特效用的淋漓尽致,google suggest, google map,igoogle 可拖动窗口等等...今天仿照iGoogle做了一个简单的小demo. 这个的demo ...
- [从jQuery看JavaScript]-匿名函数与闭包
jQuery片段: (function(){ //这里忽略jQuery所有实现 })(); 半年前初次接触jQuery的时候,我也像其他人一样很兴奋地想看看源码是什么样的.然而,在看到源码的第一眼,我 ...
- Web下的整体测试 --性能测试及优化思路
随着Internet的日益普及,现在基于B/S结构的大型应用越来越多,可如何对这些应用进行测试成为日益迫切的问题.有许多测试人员来信问我B/S的测试如何做,由于工作较繁忙,对大家提出的问题也是头痛医头 ...
- Linux make语法补充
"-"表示此条命令出错,make也会继续执行后续的命令.如:"-rm main.o" 内置变量$@表示生成目标 内置变量$^表示所有依赖 内置变量$<表示 ...
- Hbase导入MapReduce数据的时候提示Running Job XXXX后就一直卡着不动
代码确信无误之后,ant运行起来,发现一执行就卡在Running Job XXXX那里一直不动了. 试着把代码打包成jar扔到Linux执行也还是一样的效果.还是停在那里.然后就一顿瞎蒙.最后发现是H ...
- (转)学习linux的几本书
成为一名精通 Linux 程序设计的高级程序员一直是不少朋友孜孜以求的目标.根据中华英才网统计数据,北京地区 Linux 程序员月薪平均为 Windows 程序员的 1.8 倍.Java 程序员的 2 ...
- bootstrap -- css -- 按钮
本文中提到的按钮样式,适用于:<a>, <button>, 或 <input> 元素上 但最好在 <button> 元素上使用按钮 class,避免跨浏 ...