[sharepoint]文档库,文件夹授权
写在前面
在项目中用到了文档库授权的方法,这里将查询到的方式总结一下。
涉及到的方法
在逻辑中用到的方法。
/// <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]文档库,文件夹授权的更多相关文章
- SharePoint文档库文件夹特殊字符转义
当我们在SharePoint网站文档库中新建文件夹时包含了~ " # % & * : < > ? / \ { | }字符时(一共15个), 或者以.开头或者结束,或者包含 ...
- 解决SharePoint文档库文件在搜索结果页面显示的标题和文档的标题不一致问题(search result)
问题表现: SharePoint 2013 爬网后,搜索一个文档,虽然搜到了,但是显示有点问题,如图: 原因分析: 造成该问题的原因是,该文档除了本身有一个名称外,在文档metadata的title属 ...
- sharepoint rest api 创建文档库 文件夹
function createFolder() { var requestHeaders = { "Accept": "application/json;odata=ve ...
- 在Outlook中查看预览SharePoint文档库的文档
本文概况 阅读时间: 约2分钟 适用版本:SharePoint Server 2010及以上 面向用户:普通用户,管理员 难度指数:★★☆☆☆ 在日常工作中,总有一些常用的文档需要经常打开查看,其实我 ...
- SharePoint 文档库实现文件夹拖放到文档库
打开文档库-> 选择文件夹-> 在Ribbon中选择“库(list)”-> 在右边可以看到打开方式-> 选择用资源管理器打开-> 在新打开的资源管理器中可能实现对文夹的拖 ...
- [sharepoint]rest api文档库文件上传,下载,拷贝,剪切,删除文件,创建文件夹,修改文件夹属性,删除文件夹,获取文档列表
写在前面 最近对文档库的知识点进行了整理,也就有了这篇文章,当时查找这些接口,并用在实践中,确实废了一些功夫,也为了让更多的人走更少的弯路. 系列文章 sharepoint环境安装过程中几点需要注意的 ...
- 修改Sharepoint 文档库列表点击Excel文件默认跳转到Excel Service服务 xlviewer.aspx页面
在Sharepoint 文档库中,当点击库中的一个Excel文件时,Sharepoint默认为转跳到Excel Services上,无论是Sharepoint 的是否开启了Excel Service, ...
- 360安全卫士造成Sharepoint文档库”使用资源管理器打开“异常
备注:企业用户还是少用360为妙 有客户反馈:部门里的XP SP2环境客户机全部异常,使用资源管理器打开Sharepoint文档库,看到的界面样式很老土,跟本地文件夹不一样 ...
- Atitit 基于图片图像 与文档混合文件夹的分类
Atitit 基于图片图像 与文档混合文件夹的分类 太小的文档(txt doc csv exl ppt pptx)单独分类 Mov10KminiDoc 但是可能会有一些书法图片迁移,因为他们很微小,需 ...
随机推荐
- shell之iptables
这五个位置也被称为五个钩子函数(hook functions),也叫五个规则链. 1.PREROUTING (路由前) 2.INPUT (数据包流入口) 3.FORWARD (转发管卡) 4.OUTP ...
- 使用“\n\t”将多行字符串拼接起来
以前js拼接字符串有好多 \n \t 不使用ES6 使用"\n\t"将多行字符串拼接起来: var roadPoem = 'Then took the other, as just ...
- RabbitMQ高可用镜像队列
## RabbitMQ高可用镜像队列 在分布式系统中,通常使用多个术语来标识主要副本和辅助副本.本指南通常使用"主"来引用队列的主要副本,而对于辅助副本则使用"镜像&qu ...
- ndk开发-ffmpeg编译
进入模拟器shell: D:\Users\zhouhaitao\AppData\Local\Android\sdk\platform-tools\adb shell ndk编译链接静态库: LOCAL ...
- 获取地址栏参数 - queryString(正则表达式版本)
获取所有query string function queryStringAll() { var reg = /(?:^|&)([^&]+)=([^&]+)(?=&|$ ...
- 0-1背包问题(经典)HDU2602 Bone Collector
Bone Collector Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- ServletContext结合Servlet接口中的init()方法和destroy()方法的运用----网站计数器
我们一般知道Servlet接口中的init()方法在tomcat启动时调用,destroy()方法在tomcat关闭时调用.那么这两个方法到底在实际开发中有什么作用呢?这就是这个随笔主要讲的内容. 思 ...
- Math对象常用方法
1.Math.ceil(x) 返回x的向上取整. var a=Math.ceil(9.1); var b=Math.ceil(-9.1) console.log(a); console.log(b); ...
- codevs 1269 匈牙利游戏——次短路(spfa)
欢迎来到匈牙利游戏!布达佩斯(匈牙利首都)的街道形成了一个弯曲的单向网络. 你被强制要求参加一个赛跑作为一个TV秀的一部分节目,比赛中你需要穿越这些街道,从s开始,到t结束. 很自然的,你想要尽快的完 ...
- Android多线程全面解析:IntentService用法&源码
前言 多线程的应用在Android开发中是非常常见的,常用方法主要有: 继承Thread类 实现Runnable接口 AsyncTask Handler HandlerThread IntentSer ...