提升 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 代码执行权限的更多相关文章

  1. 在C#开发中如何使用Client Object Model客户端代码获得SharePoint 网站、列表的权限情况

    自从人类学会了使用火,烤制的方式替代了人类的消化系统部分功能,从此人类的消化系统更加简单,加速了人脑的进化:自从SharePoint 2010开始有了Client Side Object Model ...

  2. 用jQuery插件来提升SharePoint列表表单用户体验

    本文将描述如何通过简单的CSS和jQuery插件提升SharePoint默认的列表表单体验.这些小技巧并不仅仅改善了外观,还提升了可用性. 剩余字数 我们以通知列表为例.通知正文字段假设要求不应该超过 ...

  3. 【.net 深呼吸】限制执行代码的权限

    前面好几篇文章,老周都跟大伙伴们聊了跟应用程序域有关的话题,干脆咱们一聊到底吧,做学问就应该这样,有恒心. App Domain的创建新应用程序域的方法中,有一个特殊的重载: public stati ...

  4. JS-预解析(提升)与代码执行过程

    1,预解析的过程. 2,代码的执行过程. 预解析:程序在执行过程,会先将代码读取到内存中检查,会将所有的声明在此处进行标记,所谓的标记就是让js解析器知道这个名字,后面在使用这个名字的时候,不会出现未 ...

  5. 痞子衡嵌入式:在串口波特率识别实例里逐步展示i.MXRT上提升代码执行性能的十八般武艺

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是在串口波特率识别实例里逐步展示i.MXRT上提升代码执行性能的十八般武艺. 恩智浦 MCU SE 团队近期一直在加班加点赶 SBL 项目 ...

  6. 「白帽挖洞技能提升」ThinkPHP5 远程代码执行漏洞-动态分析

    ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的,在保持出色的性能和至简代码的同时,也注重易用性.但是简洁易操作也会出现漏洞,之前ThinkPHP官方修复了一个严重的远程代码执行漏 ...

  7. Java虚拟机JVM内存分区及代码执行机制

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt230 1.  JVM体系结构 图1 JVM体系结构    方法区:存放JVM ...

  8. 值得细读!如何系统有效地提升Android代码的安全性?

    众所周知,代码安全是Android开发工作中的一大核心要素. 11月3日,安卓巴士全球开发者论坛线下系列沙龙第七站在成都顺利举办.作为中国领先的安卓开发者社区,安卓巴士近年来一直致力于在全国各大城市举 ...

  9. PowerSploit-CodeExecution(代码执行)脚本渗透实战

    首先介绍一下国外大牛制作的Powershell渗透工具PowerSploit,上面有很多powershell攻击脚本,它们主要被用来渗透中的信息侦察.权限提升.权限维持. 项目地址:https://g ...

随机推荐

  1. YAML的使用

    YAML 语言教程 编程免不了要写配置文件,怎么写配置也是一门学问.                                      YAML 是专门用来写配置文件的语言,非常简洁和强大,远 ...

  2. centsos各个版本的区别

    CentOS-7.0-1406-x86_64-DVD.iso             标准安装版,一般下载这个就可以了CentOS-7.0-1406-x86_64-NetInstall.iso     ...

  3. iOS开发小技巧--取消按钮的选中状态

    首先要自定义按钮,并且实现如下方法,对,就是这么实现!!

  4. ★ java删除代码注释

    package com.witwicky.util; import java.io.BufferedReader; import java.io.BufferedWriter; import java ...

  5. hadoop学习WordCount+Block+Split+Shuffle+Map+Reduce技术详解

    转自:http://blog.csdn.net/yczws1/article/details/21899007 纯干货:通过WourdCount程序示例:详细讲解MapReduce之Block+Spl ...

  6. Oracle中的job的定时任务

    Oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务. 一.查询系统中的job,可以查询视图 --相关视图 select * from dba_jobs; selec ...

  7. atitit.javascript调用java in swt attilax 总结

    atitit.javascript调用java in swt attilax 总结 1. BrowserFunction 简单介绍1 1.1. BrowserFunction 能够分为三类: 1 1. ...

  8. QButtonGroup:按钮类的非可视化容器,默认可实现按钮的子类实例的单选。

    QButtonGroup The QButtonGroup class provides a container to organize groups of button widgets. QButt ...

  9. perl File::Spec 模块

    File::Spec 模块提供了很多的功能,这里只列举几个常用的函数 rel2abs : 返回一个文件的绝对路径, 常见用法,返回当前运行的perl脚本的绝对路径 代码示例: my $prog = F ...

  10. org.xml.sax.SAXParseException: prolog 中不允许有内容

    org.xml.sax.SAXParseException: prolog 中不允许有内容 digester.fatalError 不下心踢了电源导致的错误应该是解析xml出问题,找了半天不知道哪个x ...