public override void ShareWithPeople(IEnumerable <string> emails, bool isEdit) { if (emails == null || !emails.Any()) { return; } var userRoles = new List <UserRoleAssignment>(); foreach (var user in emails) { UserRoleAssignment role = new UserRoleAssignment(); role.UserId = user; role.Role = isEdit ? Role.Edit : Role.View; userRoles.Add(role); } string message = "Please accept this invite."; //the parameter before the message is responsible for sending emails DocumentSharingManager.UpdateDocumentSharingInfo(_context, (string)_item["EncodedAbsUrl"], userRoles, true, true, false, message, true, true); _context.ExecuteQuery(); // alternatively we can do this like below, but this does not add any people // Web.CreateAnonymousLink(_context, (string)_item["EncodedAbsUrl"], false); // Web.CreateOrganizationSharingLink(_context, (string) _item["EncodedAbsUrl"], true); // _context.ExecuteQuery(); // for web sharing the following can be used // WebSharingManager.UpdateWebSharingInformation(_context, _item.ParentList.ParentWeb, userRoles, true, message, true, true); }
/// <summary> /// This method will send notifications to external users /// </summary> /// <param name="externalSharingRequest"></param> /// <returns></returns> private GenericResponseVM SendExternalNotification(MatterInformationVM matterInformation, string permission, string externalEmail) { var clientUrl = $"{matterInformation.Client.Url}"; try { var users = new List <UserRoleAssignment>(); UserRoleAssignment userRole = new UserRoleAssignment(); userRole.UserId = externalEmail; switch (permission.ToLower()) { case "full control": userRole.Role = SharePoint.Client.Sharing.Role.Owner; break; case "contribute": userRole.Role = SharePoint.Client.Sharing.Role.Edit; break; case "read": userRole.Role = SharePoint.Client.Sharing.Role.View; break; } users.Add(userRole); #region Doc Sharing API //Need to use MatterGuid instead of Id string matterLandingPageUrl = $"{clientUrl}/sitepages/{matterInformation.Matter.MatterGuid + ServiceConstants.ASPX_EXTENSION}"; string catalogSiteAssetsLibraryUrl = $"{generalSettings.CentralRepositoryUrl}/SitePages/home.aspx"; using (var clientContext = spoAuthorization.GetClientContext(clientUrl)) { //Send notification to the matter landing page url with permission the user has selected IList <UserSharingResult> matterLandingPageResult = DocumentSharingManager.UpdateDocumentSharingInfo(clientContext, matterLandingPageUrl, users, true, true, true, "The following matter page has been shared with you", true, true); clientContext.ExecuteQuery(); } return(null); #endregion } catch (Exception ex) { throw; } }
/// <summary> /// Checks if the User with ID provided has equal or higher permission than the permission provided /// </summary> /// <param name="userId">ID of User to check permission for</param> /// <param name="permission">Permission to check that User has</param> /// <returns></returns> private bool UserCanAssignRoles(int userId, UserRoleAssignment permission) { var userRoles = GetUserRoles(userId); return(userRoles.Any(role => role.UserRoleAssignmentAccess >= permission)); }