自从人类学会了使用火,烤制的方式替代了人类的消化系统部分功能,从此人类的消化系统更加简单,加速了人脑的进化;自从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:

https://spstc-public.sharepoint.com/Lists/Sessions/Attachments/24/Client-Side%20Object%20Model%20for%20SharePoint%202013%20-%20Bleeker.pdf

非常好的中文入门教材:

http://msdn.microsoft.com/zh-cn/office/fp179912

在C#开发中如何使用Client Object Model客户端代码获得SharePoint 网站、列表的权限情况的更多相关文章

  1. c# sharepoint client object model 客户端如何创建中英文站点

    c# sharepoint client object model 客户端如何创建中英文站点 ClientContext ClientValidate = tools.GetContext(Onlin ...

  2. SharePoint Client Object Model API 介绍以及工作原理解析

    CSOM和ServerAPI 的对比 SharePoint从2010开始引入了Client Object Model的API(后文中用CSOM来代替),从名字来看,我们可以简单的看出,该API是面向客 ...

  3. 解决在使用client object model的时候报“object does not belong to a list”错误

    在查看别人代码的时候,发现了个有意思的问题,使用client object model将一个文件check in 我使用的是如下语句获取file Microsoft.SharePoint.Client ...

  4. SharePoint 2010 匿名用户调用Client Object Model访问列表项

    最近有个小需求,在门户首页上加个通知公告的版块,新闻来源是列表项,需要有垂直滚动的效果. 第一个想法就是通过SharePoint的Client Object Model获取列表数据再加上JQuery来 ...

  5. 关于SharePoint 的Client object model该何时load和execut query的一点自己的看法

    很多人在用client object model的时候,不知道何时或者该不该load,今天看到一个观点描述这个问题,觉得很有道理,和大家分享.那就是写client object model就像写sql ...

  6. Qt 中的对象模型(Object Model)

    原标题:Qt 中的对象模型(Object Model)90不太后,余生皆折腾 本节内容主要讲了 Qt 对象模型比标准 C++ 对象模型多了什么内容,并介绍了组成 Qt 对象模型基础的相关的类.最后说明 ...

  7. 移动开发中如何整合HTML 5和原生代码

    移动开发中如何整合HTML 5和原生代码 https://blog.csdn.net/lvjin110/article/details/41038565

  8. iOS开发中的4种数据持久化方式【一、属性列表与归档解档】

    iOS中的永久存储,也就是在关机重新启动设备,或者关闭应用时,不会丢失数据.在实际开发应用时,往往需要持久存储数据的,这样用户才能在对应用进行操作后,再次启动能看到自己更改的结果与痕迹.ios开发中, ...

  9. 记一个使用Client Object Model上传文件的小例子

    1. 新建一个C#的Console project. 2. 给project 添加reference: Microsoft.SharePoint.Client Microsoft.SharePoint ...

随机推荐

  1. ActionScript 3.0入门:Hello World、文件读写、数据存储(SharedObject)、与JS互调

    近期项目中可能要用到Flash存取数据,并与JS互调,所以就看了一下ActionScript 3.0,现把学习结果分享一下,希望对新手有帮助. 目录 ActionScript 3.0简介 Hello ...

  2. Topology and Geometry in OpenCascade-Adapters

    Topology and Geometry in OpenCascade-Adapters eryar@163.com 摘要Abstract:本文简要介绍了适配器模式(adapter pattern) ...

  3. EntityFramework 7 OrderBy Skip Take-计算排序分页 SQL 翻译

    先解释一下这个标题的意思,OrderBy 在 Linq 语句中,我们经常使用,比如 OrderBy(b => b.BlogId) 就是对 BlogId 字段进行升序排序,这是针对一个字段的排序, ...

  4. 多种方法实现Loading(加载)动画效果

    当我们ajax提交一个按钮的时候,给那个按钮来个Loading效果会高端很多,体验也会上升个层次. 既能让用户知道正在提交中,也能防止二次提交,好处多多呢.

  5. javascript URL实现简易书签

    简介 在HTML中,我们可以将js嵌入到script标签中,可以嵌入到行内代码中,也可以嵌入到src(href)中. 后者称作javascript URL.该方式的URL格式固定:javascript ...

  6. hibernate笔记--实体类映射文件"*.hbm.xml"详解

    实体类就是指普通的POJO,Hibernate并不知道那个实体类对应数据库的哪一张表,所以还需要配置一下,常用的方式就是*.hbm.xml文件[配置与@注解配置,这里介绍前者的详细属性: <?x ...

  7. Cesium应用篇:3控件(2)BaseLayerPicker

    所有范例均在github中搜索:ExamplesforCesium BaseLayerPicker控件非常简单,似乎没什么可说的,确实非常的简单,但作为一个底图选择控件,可以说是最基本的一个控件. C ...

  8. 通过SQL Server自定义数据类型实现导入数据

    写在前面 在看同事写的代码时看到了SQL Server中可以自定义数据类型,而且定义的是DataTable类型的数据类型. 后我想起了以前我们导入数据时要么是循环insert写入,要么是SqlBulk ...

  9. jQuery-1.9.1源码分析系列(十六)ajax——响应数据处理和api整理

    ajax在得到请求响应后主要会做两个处理:获取响应数据和使用类型转化器转化数据 a.获取响应数据 获取响应数据是调用ajaxHandleResponses函数来处理. ajaxHandleRespon ...

  10. 【开源框架】SqlSugarRepository 全库ORM 正式发布

    SqlSugarRepository.dll 全库开发框架支持 四种数据库:SqlServer. MySql .Oracle和Sqlite. SqlSugarRepository是为全库开发而生的OR ...