zoukankan      html  css  js  c++  java
  • [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 = 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 + ")"

     总结

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

  • 相关阅读:
    test
    男神zyh的青睐
    HH的项链
    PAT刷题经验
    LaTeX常用数学符号
    Battle Over Cities Hard Version
    Cut
    文本生成器
    Explorer Space
    2021.04.21
  • 原文地址:https://www.cnblogs.com/wolf-sun/p/4980034.html
Copyright © 2011-2022 走看看