写在前面

在项目中用到了文档库授权的方法,这里将查询到的方式总结一下。

涉及到的方法

在逻辑中用到的方法。

    /// <summary>
/// 获取sharepoint站点角色定义 rest api
/// </summary>
/// <param name="hostWebUrl"></param>
/// <param name="strAPI"></param>
/// <param name="userName"></param>
/// <param name="pwd"></param>
/// <param name="domain"></param>
/// <returns></returns>
private static ArrayList GetRoleDefinition(string hostWebUrl, string strAPI, string userName, string pwd, string domain)
{
HttpWebRequest request = null;
HttpWebResponse response = null;
StreamReader sr = null;
strAPI = hostWebUrl + strAPI;
ArrayList lstRoleDefinition = new ArrayList();
try
{
request = (HttpWebRequest)HttpWebRequest.Create(strAPI);
request.Credentials = new NetworkCredential(userName, pwd, domain);
request.Method = "GET";
request.Accept = "application/json;odata=verbose";
using (response = (HttpWebResponse)request.GetResponse())
{
using (sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
JObject jobj = JObject.Parse(sr.ReadToEnd());
var results = jobj["d"]["results"];
foreach (var item in results)
{
lstRoleDefinition.Add(new
{
Id = Convert.ToInt32(item["Id"]),
Description = item["Description"] != null ? item["Description"].ToString() : "",
Hidden = Convert.ToBoolean(item["Hidden"]),
Name = item["Name"] != null ? item["Name"].ToString() : "",
Order = Convert.ToInt32(item["Order"]),
RoleTypeKind = Convert.ToInt32(item["RoleTypeKind"]),
BasePermissions = new
{
High = item["BasePermissions"]["High"] != null ? item["BasePermissions"]["High"].ToString() : "",
Low = item["BasePermissions"]["Low"] != null ? item["BasePermissions"]["Low"].ToString() : ""
}
});
}
}
}
}
catch (WebException ex)
{
throw ex;
}
return lstRoleDefinition;
}
/// <summary>
/// 将用户添加到sharepoint站点。
/// </summary>
/// <param name="hostWebUrl"></param>
/// <param name="addUserName"></param>
/// <param name="userName"></param>
/// <param name="pwd"></param>
/// <param name="domain"></param>
/// <returns></returns>
private static object AddUserToSharePointSite(string hostWebUrl, string addUserName, string userName, string pwd, string domain)
{
if (hostWebUrl.Contains("https"))
{
//如果请求的站点是https的url,则使证书的认证返回true。
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback((sender, certificate, chain, sslPolicyErrors) =>
{
return true;
});
}
try
{
ClientContext spContext = new ClientContext(hostWebUrl);
spContext.Credentials = new NetworkCredential(userName, pwd, domain);
Web web = spContext.Web;
string loginName = @"i:0#.w|" + domain + "" + addUserName;
User user = web.EnsureUser(loginName);
//需要load,不然拿不到user的属性
spContext.Load(user);
spContext.ExecuteQuery();
return new { Email = user.Email, Id = user.Id, LoginName = user.LoginName, Title = user.Title };
}
catch (WebException ex)
{
throw ex;
}
}
public static string GetContextinfo(string hostWebUrl, string userName, string pwd, string domain)
{
HttpWebRequest contextInfoRequest = null;
HttpWebResponse endpointResponse = null;
StreamReader sr = null;
string strJson = string.Empty;
try
{
//获取contextinfo
contextInfoRequest = (HttpWebRequest)HttpWebRequest.Create(hostWebUrl + "/_api/contextinfo");
contextInfoRequest.Method = "POST";
contextInfoRequest.Credentials = new NetworkCredential(userName, pwd, domain);
contextInfoRequest.Accept = "application/json;odata=verbose";
contextInfoRequest.ContentLength = ;
using (endpointResponse = (HttpWebResponse)contextInfoRequest.GetResponse())
{
using (sr = new StreamReader(endpointResponse.GetResponseStream(), Encoding.UTF8))
{
strJson = sr.ReadToEnd();
JObject jobj = JObject.Parse(strJson);
return jobj["d"]["GetContextWebInformation"]["FormDigestValue"].ToString();
}
}
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// 将用户添加到sharepoint站点。rest api方式
/// </summary>
/// <param name="hostWebUrl"></param>
/// <param name="addUserName"></param>
/// <param name="userName"></param>
/// <param name="pwd"></param>
/// <param name="domain"></param>
/// <returns></returns>
private static string AddUserToSharePointSite(string hostWebUrl, bool isRestAPI, string addUserName, string userName, string pwd, string domain)
{
string data = "{ '__metadata': { 'type': 'SP.User' }, 'LoginName':'i:0#.w|membership|" + addUserName + "'}";
string strAPI = "_api/Web/siteusers";
HttpWebRequest request = null;
StreamReader sr = null;
HttpWebResponse response = null; try
{
request = (HttpWebRequest)HttpWebRequest.Create(hostWebUrl + "/" + strAPI);
request.Method = "POST";
if (!string.IsNullOrEmpty(data))
{
byte[] buffer = Encoding.UTF8.GetBytes(data);
request.ContentLength = buffer.Length;
using (Stream requestStream = request.GetRequestStream())
{
requestStream.Write(buffer, , buffer.Length);
}
}
else
{
request.ContentLength = ;
}
request.Credentials = new NetworkCredential(userName, pwd, domain);
request.Accept = "application/json;odata=verbose";
request.ContentType = "application/json;odata=verbose";
request.Headers.Add("X-RequestDigest", GetContextinfo(hostWebUrl, userName, pwd, domain));
using (response = (HttpWebResponse)request.GetResponse())
{
using (sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
return sr.ReadToEnd();
}
}
}
catch (Exception ex)
{ throw ex;
}
}
/// <summary>
/// 为文件夹授权
/// </summary>
/// <param name="currentCoworkLibrary"></param>
/// <param name="strCheckUser"></param>
private static void AssignToUserReadPermissionToFolder(string hostWebUrl, string folderServerRelativeUrl, string strCheckUser, string userName, string pwd, string domain)
{
//https,取消https证书认证
if (hostWebUrl.Contains("https"))
{
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback((sender, certificate, chain, sslPolicyErrors) =>
{
return true;
});
}
try
{
ServicePointManager.Expect100Continue = false;
ClientContext spContext = new ClientContext(hostWebUrl); spContext.Credentials = new NetworkCredential(userName, pwd, domain);
Web web = spContext.Web;
string loginName = @"i:0#.w|" + domain + "\\" + strCheckUser; Principal user = web.EnsureUser(loginName);
spContext.ExecuteQuery();
Folder folder = web.GetFolderByServerRelativeUrl(folderServerRelativeUrl);
var roleDefinition = spContext.Site.RootWeb.RoleDefinitions.GetByType(RoleType.Reader);
var roleBindings = new RoleDefinitionBindingCollection(spContext) { roleDefinition };
spContext.ExecuteQuery();
if (folder != null)
{
folder.ListItemAllFields.BreakRoleInheritance(true, false);
folder.ListItemAllFields.RoleAssignments.Add(user, roleBindings);
}
}
catch (Exception ex)
{
throw ex;
}
}

另外加个rest api,这种方式也可以进行授权。

_api/web/lists/getByTitle('" + LibraryName + "')/RoleAssignments/addroleassignment(principalid=" + userId + ",roledefid=" + roleDefinitionId + ")"

总结

在对文档库或者文件夹进行授权的过程,总是磕磕碰碰,不管怎么,最后还是实现了。总结在这里,方便以后查询

[sharepoint]文档库,文件夹授权的更多相关文章

  1. SharePoint文档库文件夹特殊字符转义

    当我们在SharePoint网站文档库中新建文件夹时包含了~ " # % & * : < > ? / \ { | }字符时(一共15个), 或者以.开头或者结束,或者包含 ...

  2. 解决SharePoint文档库文件在搜索结果页面显示的标题和文档的标题不一致问题(search result)

    问题表现: SharePoint 2013 爬网后,搜索一个文档,虽然搜到了,但是显示有点问题,如图: 原因分析: 造成该问题的原因是,该文档除了本身有一个名称外,在文档metadata的title属 ...

  3. sharepoint rest api 创建文档库 文件夹

    function createFolder() { var requestHeaders = { "Accept": "application/json;odata=ve ...

  4. 在Outlook中查看预览SharePoint文档库的文档

    本文概况 阅读时间: 约2分钟 适用版本:SharePoint Server 2010及以上 面向用户:普通用户,管理员 难度指数:★★☆☆☆ 在日常工作中,总有一些常用的文档需要经常打开查看,其实我 ...

  5. SharePoint 文档库实现文件夹拖放到文档库

    打开文档库-> 选择文件夹-> 在Ribbon中选择“库(list)”-> 在右边可以看到打开方式-> 选择用资源管理器打开-> 在新打开的资源管理器中可能实现对文夹的拖 ...

  6. [sharepoint]rest api文档库文件上传,下载,拷贝,剪切,删除文件,创建文件夹,修改文件夹属性,删除文件夹,获取文档列表

    写在前面 最近对文档库的知识点进行了整理,也就有了这篇文章,当时查找这些接口,并用在实践中,确实废了一些功夫,也为了让更多的人走更少的弯路. 系列文章 sharepoint环境安装过程中几点需要注意的 ...

  7. 修改Sharepoint 文档库列表点击Excel文件默认跳转到Excel Service服务 xlviewer.aspx页面

    在Sharepoint 文档库中,当点击库中的一个Excel文件时,Sharepoint默认为转跳到Excel Services上,无论是Sharepoint 的是否开启了Excel Service, ...

  8. 360安全卫士造成Sharepoint文档库”使用资源管理器打开“异常

           备注:企业用户还是少用360为妙        有客户反馈:部门里的XP SP2环境客户机全部异常,使用资源管理器打开Sharepoint文档库,看到的界面样式很老土,跟本地文件夹不一样 ...

  9. Atitit 基于图片图像 与文档混合文件夹的分类

    Atitit 基于图片图像 与文档混合文件夹的分类 太小的文档(txt doc csv exl ppt pptx)单独分类 Mov10KminiDoc 但是可能会有一些书法图片迁移,因为他们很微小,需 ...

随机推荐

  1. 操作App.config的类(转载)

    http://www.cnblogs.com/yaojiji/archive/2007/12/17/1003191.html 操作App.config的类 public class DoConfig  ...

  2. 500 OOPS: vsftpd: refusing to run with writable anonymous root

    500 OOPS: vsftpd: refusing to run with writable anonymous root 以下就是解决的三个步骤,其中第一步,是我一直没有搞明白的,也是其中的重点: ...

  3. Horn–Schunck 光流法与其算法理解(gup cuda)

    1. 基于Horn-Schunck模型的光流算法 1.1     光流的约束条件 光流 的假设条件认为图像序列,在时间t 的某一像素点与在时间t+1的这一像素点的偏移量保持不变,即 .这就是灰度值守恒 ...

  4. linux安装软件的几种方法

    一.rpm包安装方式步骤: 1.找到相应的软件包,比如soft.version.rpm,下载到本机某个目录: 2.打开一个终端,su -成root用户: 3.cd soft.version.rpm所在 ...

  5. Scala 基础(1)—— 定义变量 & 定义函数

    1. 使用 val & var 定义变量 Scala 中的变量被分为2种:val 和 var.其含义于 Java 中的 final 关键字类似. val 等同于被 final 修饰过的变量, ...

  6. 【bzoj2879】[Noi2012]美食节 费用流+动态加边

    原文地址:http://www.cnblogs.com/GXZlegend 题目描述 CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴.他 ...

  7. 【CZY选讲·Hja的棋盘】

    题目描述 Hja特别有钱,他买了一个×的棋盘,然后Yjq到这个棋盘来搞事.一开始所有格子都是白的,Yjq进行次行操作次列操作,所谓一次操作,是将对应的行列上的所有格子颜色取反.现在Yjq希望搞事之后 ...

  8. 【马克-to-win】—— 学习笔记

    声明 以下学习内容转载自:http://www.mark-to-win.com/ 社区,由马克java社区创始人---"马克-to-win"一人全部独立写作,创作和制作. 非常感谢 ...

  9. WCF回调操作

    <?xml version="1.0" encoding="utf-8" ?> <configuration> <system.s ...

  10. Java中Collections的frequency方法

    注:调用此方法时需要根据自己的须由复写Objects的equals方法 创建复写了equals方法的对象类 public class Student { private String name; pr ...