在C#开发中如何使用Client Object Model客户端代码获得SharePoint 网站、列表的权限情况
自从人类学会了使用火,烤制的方式替代了人类的消化系统部分功能,从此人类的消化系统更加简单,加速了人脑的进化;自从SharePoint 2010开始有了Client Side Object Model ,我们就可以不用在服务器上开发SharePoint解决方案了,开发的方式更加多元化,这又加速了SharePoint 更大范围的应用。
现在,我们可以在任一台PC上安装Visual Studio 然后使用类似于 Object Model的模型来访问服务器上的列表、网站或是其它任何东东。
那么 ,如何使用 Client Side Object Model 客户端代码获得SharePoint 网站、列表的权限情况呢,我们需要一台客户机先利用VS建一个“控制台”程序,在这个程序里,我们要进行如下的步骤:
1. 新建一个“控制台程序”, 添加Client Side Object Model客户端的DLL文件到项目的“引用”当中,
您需要添加如下2个文件:
Microsoft.SharePoint.Client.dll Microsoft.SharePoint.Client.Runtime.dll
这2个文件可以从SharePoint服务器中找到,方便大家,我提供一下地址(如果是SharePoint 2010,请把15换成14):
C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\15\ISAPI
因为服务器是X64的,您老如果使用X86的Win7,也没有关系照样可以使用这个64位DLL,但这个项目,一定要保证目标平台是“Any”。否则会出错。
2. 打开代码文件,前面添加引用:using Microsoft.SharePoint.Client
然后在 Main 函数,中复制,粘贴如下的代码到Main 函数中,
//如果你想获得SITE的权限列表,应该这样写
//string ObjectType = "Site", ObjectTitle = "网站名称", SiteUrl = "网站的URL";
string ObjectType = "List", ObjectTitle = "文档", SiteUrl = "http://sp2013"; ClientContext clientContext = new ClientContext(SiteUrl);
clientContext.Credentials = new NetworkCredential("administrator", "密码");
List selectedList = null;
Web selectedWeb = null;
Console.WriteLine("Object:" + ObjectType + " Name:" + ObjectTitle + " URL:" + SiteUrl);
try
{
if (ObjectType != "Site")
{
selectedList = clientContext.Web.Lists.GetByTitle(ObjectTitle);
clientContext.Load(selectedList); }
else
{
selectedWeb = clientContext.Web;
clientContext.Load(selectedWeb); } clientContext.ExecuteQuery();
}
catch (Exception wex)
{
Console.WriteLine(wex.Message);
Console.ReadLine();
return;
}
RoleAssignmentCollection ras = null;
if (ObjectType != "Site")
{
ras = selectedList.RoleAssignments;
clientContext.Load(ras);
}
else
{
ras = selectedWeb.RoleAssignments;
clientContext.Load(ras);
} clientContext.ExecuteQuery();
Console.WriteLine("It has " + ras.Count + " role assignments");
foreach (var ra in ras)
{
clientContext.Load(ra.RoleDefinitionBindings);
clientContext.Load(ra.Member);
clientContext.ExecuteQuery();
foreach (var definition in ra.RoleDefinitionBindings)
{
clientContext.Load(definition, d => d.Name);
clientContext.ExecuteQuery();
//C#在输入中英文混合字符时,对齐会不正常,这个语句主要是给用户名添加空格的
string tmpname = ra.Member.Title.Trim() + new string(' ', - Encoding.Default.GetByteCount(ra.Member.Title.Trim()));
Console.WriteLine("{0,-20}{1}{2,-15}", ra.Member.PrincipalType.ToString().Trim(), tmpname, definition.Name);
}
} Console.ReadLine();
说明:
只要改变一下红色标记的变量值,这个代码就可以获得任意网站、列表的权限情况, 如果是网站就把 ObjectType变量写成Site,如果是列表就把ObjectType写成是List,其它的不解释了。
示例结果:

Client-Side 的原理:
1、初始化Web,
ClientContext(SiteUrl) ,这个函数可以返回类似于OM中的SPWeb的对象, 并且不需要从SPSite中获取。
2、必在使用对象的属性代码前,加上如下语句,有了这个语句,系统才会向服务器提交HTTP查询,对象的属性才可以被使用。
clientContext.Load(变量名或是对象,linq表达式);
clientContext.ExecuteQuery();
具体可以参考MSDN的相关文章,相信您一定会很快入门:
非常好的PPT:
非常好的中文入门教材:
http://msdn.microsoft.com/zh-cn/office/fp179912
在C#开发中如何使用Client Object Model客户端代码获得SharePoint 网站、列表的权限情况的更多相关文章
- c# sharepoint client object model 客户端如何创建中英文站点
c# sharepoint client object model 客户端如何创建中英文站点 ClientContext ClientValidate = tools.GetContext(Onlin ...
- SharePoint Client Object Model API 介绍以及工作原理解析
CSOM和ServerAPI 的对比 SharePoint从2010开始引入了Client Object Model的API(后文中用CSOM来代替),从名字来看,我们可以简单的看出,该API是面向客 ...
- 解决在使用client object model的时候报“object does not belong to a list”错误
在查看别人代码的时候,发现了个有意思的问题,使用client object model将一个文件check in 我使用的是如下语句获取file Microsoft.SharePoint.Client ...
- SharePoint 2010 匿名用户调用Client Object Model访问列表项
最近有个小需求,在门户首页上加个通知公告的版块,新闻来源是列表项,需要有垂直滚动的效果. 第一个想法就是通过SharePoint的Client Object Model获取列表数据再加上JQuery来 ...
- 关于SharePoint 的Client object model该何时load和execut query的一点自己的看法
很多人在用client object model的时候,不知道何时或者该不该load,今天看到一个观点描述这个问题,觉得很有道理,和大家分享.那就是写client object model就像写sql ...
- Qt 中的对象模型(Object Model)
原标题:Qt 中的对象模型(Object Model)90不太后,余生皆折腾 本节内容主要讲了 Qt 对象模型比标准 C++ 对象模型多了什么内容,并介绍了组成 Qt 对象模型基础的相关的类.最后说明 ...
- 移动开发中如何整合HTML 5和原生代码
移动开发中如何整合HTML 5和原生代码 https://blog.csdn.net/lvjin110/article/details/41038565
- iOS开发中的4种数据持久化方式【一、属性列表与归档解档】
iOS中的永久存储,也就是在关机重新启动设备,或者关闭应用时,不会丢失数据.在实际开发应用时,往往需要持久存储数据的,这样用户才能在对应用进行操作后,再次启动能看到自己更改的结果与痕迹.ios开发中, ...
- 记一个使用Client Object Model上传文件的小例子
1. 新建一个C#的Console project. 2. 给project 添加reference: Microsoft.SharePoint.Client Microsoft.SharePoint ...
随机推荐
- 实战MEF(5):导出元数据
如何理解元数 我们可以把元数据理解为随类型一起导出的附加信息.有时候我们会考虑,把元数据随类型一并导出,增加一些说明,使得我们在导入的时候,可以多一些筛选条件. 默认的类型导出带有元数据吗 上面的内容 ...
- android:windowSoftInputMode属性详解
android:windowSoftInputMode activity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题,Android1.5后的一个新特性. 这个属性能影响两件事情: [一] ...
- Ruby之入门(一)
前言 这门语言很少去听过,可能是没怎么用到就不会听到太多关于ruby的消息,工作需要这门语言,需要从0开始学习这门语言,慢慢学习简直...太神奇了...,原谅我见识浅薄.原来很早就已经出世了,园子中也 ...
- 遇到 HTTP 错误 403.14 - Forbidden?
打开 http://localhost:1609 报错: HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容 解决方案一:设置默认首页 在 Web.conf ...
- CDH安装失败了,如何重新安装
1> 删除Agent节点的UUID # rm -rf /opt/cm-5.4.7/lib/cloudera-scm-agent/* 2> 清空主节点CM数据库 进入主节点的Mysql数据 ...
- EntityFramework 外键值映射
如果在 EF OnModelCreating 中配置了实体外键映射,也就是 SQL Server 中的 ForeignKey,那么我们在添加实体的时候,主实体的主键值会自动映射到子实体的外键值,并且这 ...
- T-SQL CROSS APPLY、MERGE
写在前面 刚才看项目里一个存储过程,也是好长时间没有使用Sql Server2008了,好多写法和函数感觉到陌生,这就遇到了CROSS APPLY 和MERGE的语法,两者之前完全没接触过. 所以专门 ...
- Nodejs之MEAN栈开发(四)---- form验证及图片上传
这一节增加推荐图书的提交和删除功能,来学习node的form提交以及node的图片上传功能.开始之前需要源码同学可以先在git上fork:https://github.com/stoneniqiu/R ...
- Zend Studio主题的设置
用了两年的Zend Studio,一直是默认的白色主题,让人都产生了视觉疲劳,今天才发现Zend Studio的设置方法: 步骤1:help–>install new software…
- Xamarin.Android和UWP之MVVM的简单使用(二)
0x01 前言 前面一篇,Xamarin.Android和UWP之MVVM的简单使用(一),主要讲了MvvmLight的简单使用 这篇主要讲讲MvvmCross的简单使用,例子的话,还是和上篇的一样. ...