写在前面

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

涉及到的方法

在逻辑中用到的方法。

    /// <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. shell之iptables

    这五个位置也被称为五个钩子函数(hook functions),也叫五个规则链. 1.PREROUTING (路由前) 2.INPUT (数据包流入口) 3.FORWARD (转发管卡) 4.OUTP ...

  2. 使用“\n\t”将多行字符串拼接起来

    以前js拼接字符串有好多 \n \t 不使用ES6 使用"\n\t"将多行字符串拼接起来: var roadPoem = 'Then took the other, as just ...

  3. RabbitMQ高可用镜像队列

    ## RabbitMQ高可用镜像队列 在分布式系统中,通常使用多个术语来标识主要副本和辅助副本.本指南通常使用"主"来引用队列的主要副本,而对于辅助副本则使用"镜像&qu ...

  4. ndk开发-ffmpeg编译

    进入模拟器shell: D:\Users\zhouhaitao\AppData\Local\Android\sdk\platform-tools\adb shell ndk编译链接静态库: LOCAL ...

  5. 获取地址栏参数 - queryString(正则表达式版本)

    获取所有query string function queryStringAll() { var reg = /(?:^|&)([^&]+)=([^&]+)(?=&|$ ...

  6. 0-1背包问题(经典)HDU2602 Bone Collector

    Bone Collector Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  7. ServletContext结合Servlet接口中的init()方法和destroy()方法的运用----网站计数器

    我们一般知道Servlet接口中的init()方法在tomcat启动时调用,destroy()方法在tomcat关闭时调用.那么这两个方法到底在实际开发中有什么作用呢?这就是这个随笔主要讲的内容. 思 ...

  8. Math对象常用方法

    1.Math.ceil(x) 返回x的向上取整. var a=Math.ceil(9.1); var b=Math.ceil(-9.1) console.log(a); console.log(b); ...

  9. codevs 1269 匈牙利游戏——次短路(spfa)

    欢迎来到匈牙利游戏!布达佩斯(匈牙利首都)的街道形成了一个弯曲的单向网络. 你被强制要求参加一个赛跑作为一个TV秀的一部分节目,比赛中你需要穿越这些街道,从s开始,到t结束. 很自然的,你想要尽快的完 ...

  10. Android多线程全面解析:IntentService用法&源码

    前言 多线程的应用在Android开发中是非常常见的,常用方法主要有: 继承Thread类 实现Runnable接口 AsyncTask Handler HandlerThread IntentSer ...