写在前面

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

涉及到的方法

在逻辑中用到的方法。

    /// <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{//获取contextinfocontextInfoRequest = (HttpWebRequest)HttpWebRequest.Create(hostWebUrl + "/_api/contextinfo");contextInfoRequest.Method = "POST";contextInfoRequest.Credentials = new NetworkCredential(userName, pwd, domain);contextInfoRequest.Accept = "application/json;odata=verbose";contextInfoRequest.ContentLength = 0;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, 0, buffer.Length);}}else{request.ContentLength = 0;}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 + ")"

总结

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

博客地址: http://www.cnblogs.com/wolf-sun/
博客版权: 本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。
如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步!
再次感谢您耐心的读完本篇文章。http://www.cnblogs.com/wolf-sun/p/4980034.html

[sharepoint]文档库,文件夹授权相关推荐

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

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

  2. 【SharePoint】SharePoint 文档库中html文件打开后直接通过浏览器访问,而不是直接下载

    前言 SharePoint  文档库打开HTML 直接浏览而不是打开下载对话框,按照如下步骤操作完成后,可以直接在浏览器中打开访问页面 设置步骤 1.打开SharePoint管理中心 2.点击&quo ...

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

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

  4. u盘里的文档和文件夹变成exe文件解决办法

    遇到以下情况: 源文件是文档或者文件夹,变成.exe尾缀的文件且被认为是病毒处在隔离区,无法从隔离区中将文件拿出,可以采取以下方法进行解决: 第一步: 在u盘内新建两个记事本(如图所示) 第二步: 分 ...

  5. 如何为SharePoint文档库、文件夹、文件单独设置权限

    在这里使用截图的方式简单描述两个问题:设置SharePoint Server文档库权限和文档库中的文件夹权限 一.设置SharePoint Server文档库权限 Figure 1 - 打开文档库后, ...

  6. SharePoint 服务器端对象模型操作文档库(上传/授权/查看权限)

    来源于:http://www.cnblogs.com/jianyus/p/3258863.html 简介:上传文档到文档库,并对项目级授权,查看项目级权限方法         //在列表根目录下创建文 ...

  7. SharePoint文档库,如何在新窗口打开中的文件

    默认情况下,点击文档库中的文件是在当前浏览器中打开的(如果你设置的是在客户端软件打开,则不符合本文情况).那么如果让他在新窗口中打开呢? 这里需要借助jQuery,关于如何将jQuery集成到Shar ...

  8. C#代码实现上传文件到SharePoint文档库

    SharePoint的文档库是根据数据库虚拟出来的,以HTTP形式呈现,因要创建一个页面单独实现上传功能,故对于其存储和呈现机制进行了学习和研究,不过网络上相关资料还真是很少.SharePoint个人 ...

  9. 用javascript自定义SharePoint文档库/列表项菜单

    本文转自YCC博客 我们在SharePoint中自定义菜单,通常通过带CustomAction 的Feature来实现,比如隐藏一个菜单: <HideCustomAction>   Gro ...

最新文章

  1. 打打字就能指挥算法视频抠图,Transformer掌握跨模态新技能,精度优于现有模型丨CVPR 2022...
  2. python 3.8.0 编译报错 Could not import runpy module 解决方案
  3. 让你在浏览器也能享受H.265播放器的高清画面
  4. Asp.Net Core 中IdentityServer4 实战之 Claim详解
  5. 前端与移动开发之vue-day1(1)
  6. sql 没数据补零_SQL 小白入门小课堂
  7. ASP.NET开发经验积累(转发)以后会陆续放上新的
  8. web developer tips (71): 关于FastCGI 1.5beta几个新配置设置
  9. 洛谷.5283.[十二省联考2019]异或粽子(可持久化Trie 堆)
  10. Lattice的JTAG编程烧录
  11. AI npc会做成为游戏制作人的梦吗?
  12. 中蒙联合考古队发现青铜时代至清代岩画图案
  13. HHL论文及代码理解(Generalizing A Person Retrieval Model Hetero- and Homogeneously ECCV 2018)...
  14. 30天搞定Java--day6
  15. Jenkins构建从github上克隆时,报Host key verification failed.
  16. Altium Designer 19简易教程(原理图的绘制)
  17. 【SEED Labs 2.0】ARP Cache Poisoning Attack Lab
  18. 微信小程序:身份证号码+手机号校验
  19. 用 QGIS 画矢量交通路线图
  20. 瞬间记忆测试c语言,脑龄测试(数字瞬间记忆脑龄测试)

热门文章

  1. 基于滴滴云安装 Docker 并上传镜像到滴滴云 Docker 仓库
  2. onenote如何删除笔记本
  3. Ps如何使用透视裁剪工具
  4. 数学建模算法与应用 线性规划(cvxpy包)
  5. 《Real-Time Rendering》第四版学习笔记——Chapter 9 Physically Based Shading(二)
  6. 养生怪杰:魏伟的养生之道
  7. 静心戒躁--半个学期来的小结
  8. OpenCV + ORC 实现身份证识别
  9. [从头读历史] 第309节 星球战争 BC2499 至 BC2400(公元前25世纪)
  10. cartographer自动更新地图,2条路径数据合并为1条数据