Friday, 20 December 2019

CSOM: How to migrate user permissions from SharePoint 2013 to SharePoint Online?


protected static void CopySitePermissions(string sourceSiteUrl, string targetSiteUrl,string sourceClaimPrefix,string targetClaimPrefix,string targetClaimSuffix)
        {
            try
            {
                Console.WriteLine("\n\rStarting new site at: " + DateTime.Now + "\n\r");
                LogStartingNewSite(sourceSiteUrl);
            }
            catch (Exception ex)
            {
                string strmsg = ex.Message;
            }

            AuthenticationManager authManagerSource = new AuthenticationManager();
            using (ClientContext clientContextSource = authManagerSource.GetWebLoginClientContext(sourceSiteUrl))
            {
                Web sourceWeb = clientContextSource.Web;
                clientContextSource.Load(sourceWeb, w => w.HasUniqueRoleAssignments);
                clientContextSource.ExecuteQuery();
                clientContextSource.RequestTimeout = 9999999;
                AuthenticationManager authManagerTarget = new AuthenticationManager();
                using (ClientContext clientContextTarget = authManagerTarget.GetWebLoginClientContext(targetSiteUrl))
                {
                    clientContextTarget.RequestTimeout = 9999999;
                    Web targetWeb = clientContextTarget.Web;
                    clientContextTarget.Load(targetWeb, w => w.HasUniqueRoleAssignments, w => w.RoleDefinitions, w => w.ServerRelativeUrl, w => w.Title);
                    clientContextTarget.ExecuteQuery();

                    if (sourceWeb.HasUniqueRoleAssignments)
                    {
                        RoleAssignmentCollection roleAssignmentColl = sourceWeb.RoleAssignments;
                        clientContextSource.Load(roleAssignmentColl);
                        clientContextSource.ExecuteQuery();
                        foreach (RoleAssignment ra in roleAssignmentColl)
                        {
                            clientContextSource.Load(ra, r => r.Member, r => r.RoleDefinitionBindings);
                            clientContextSource.ExecuteQuery();
                            Principal principalMember = ra.Member;
                            if (principalMember.PrincipalType == PrincipalType.User)
                            {
                                string sourceUserID = ra.Member.LoginName;
                             
                                foreach (RoleDefinition rd in ra.RoleDefinitionBindings)
                                {
                                    try
                                    {
                                        if (rd.Name != "Limited Access")
                                        {
                                            string targetUserID = sourceUserID.Replace(sourceClaimPrefix, targetClaimPrefix) + targetClaimSuffix;
                                            CopyUserPermissions(sourceUserID, targetUserID, sourceWeb, targetWeb, targetWeb.Title, "web", clientContextSource, clientContextTarget, rd.Name);
                                        }
                                    }
                                    catch { }
                                }
                            }


                        }
                    }



                    ListCollection listColl = sourceWeb.Lists;
                    clientContextSource.Load(listColl, lc => lc.Include(l => l.HasUniqueRoleAssignments, l => l.Hidden, l => l.Title));
                    clientContextSource.ExecuteQuery();
                    foreach (List list in listColl)
                    {
                        if (list.HasUniqueRoleAssignments && (!list.Hidden))
                        {
                            RoleAssignmentCollection roleAssignmentColl = list.RoleAssignments;
                            clientContextSource.Load(roleAssignmentColl);
                            clientContextSource.ExecuteQuery();
                            foreach (RoleAssignment ra in roleAssignmentColl)
                            {
                                clientContextSource.Load(ra, r => r.Member, r => r.RoleDefinitionBindings);
                                clientContextSource.ExecuteQuery();
                                Principal principalMember = ra.Member;
                                if (principalMember.PrincipalType == PrincipalType.User)
                                {
                                    string sourceUserID = ra.Member.LoginName;
                                 
                                    foreach (RoleDefinition rd in ra.RoleDefinitionBindings)
                                    {
                                        try
                                        {
                                            if (rd.Name != "Limited Access")
                                            {
                                                string targetUserID = sourceUserID.Replace(sourceClaimPrefix, targetClaimPrefix) + targetClaimSuffix;
                                                CopyUserPermissions(sourceUserID, targetUserID, sourceWeb, targetWeb, list.Title, "list", clientContextSource, clientContextTarget, rd.Name);
                                            }
                                        }
                                        catch { }
                                    }
                                }


                            }

                        }
                    }
                }
            }

        }

        public static void CopyUserPermissions(string sourceUserID, string targetUserID, Web sourceWeb, Web targetWeb, string objTitle, string objType, ClientContext sourceContext, ClientContext targetContext, string permLevel)
        {
            try
            {
                var targetUser = targetWeb.EnsureUser(targetUserID);

                if (objType == "web")
                {
                    if (!targetWeb.HasUniqueRoleAssignments)
                    {
                        targetWeb.BreakRoleInheritance(true, true);
                        targetContext.ExecuteQuery();
                    }
                    RoleDefinition role = targetWeb.RoleDefinitions.GetByName(permLevel);
                    targetContext.Load(role);
                    targetContext.ExecuteQuery();
                    RoleDefinitionBindingCollection roleBindingColl = new RoleDefinitionBindingCollection(targetContext);
                    roleBindingColl.Add(role);
                    targetWeb.RoleAssignments.Add(targetUser, roleBindingColl);
                    targetContext.ExecuteQuery();

                    try
                    {
                        LogOperation(targetWeb.ServerRelativeUrl, sourceUserID.Split('|')[2], "Web", objTitle);
                        Console.WriteLine("Added " + sourceUserID.Split('|')[2] + " in site: " + objTitle + " at " + targetWeb.ServerRelativeUrl);
                    }
                    catch (Exception ex)
                    {
                        string strmsg = ex.Message;
                    }
                }
                if (objType == "list")
                {
                    List list = targetWeb.GetListByTitle(objTitle);
                    targetContext.Load(list, l => l.HasUniqueRoleAssignments, l => l.RoleAssignments);
                    targetContext.ExecuteQuery();
                    if (!list.HasUniqueRoleAssignments)
                    {
                        list.BreakRoleInheritance(true, true);
                        targetContext.ExecuteQuery();
                    }
                    RoleDefinition role = targetWeb.RoleDefinitions.GetByName(permLevel);
                    targetContext.Load(role);
                    targetContext.ExecuteQuery();
                    RoleDefinitionBindingCollection roleBindingColl = new RoleDefinitionBindingCollection(targetContext);
                    roleBindingColl.Add(role);
                    list.RoleAssignments.Add(targetUser, roleBindingColl);
                    targetContext.ExecuteQuery();

                    try
                    {
                        LogOperation(targetWeb.ServerRelativeUrl, sourceUserID.Split('|')[2], "List", objTitle);
                        Console.WriteLine("Added " + sourceUserID.Split('|')[2] + " in list: " + objTitle + " at " + targetWeb.ServerRelativeUrl);
                    }
                    catch (Exception ex)
                    {
                        string strmsg = ex.Message;
                    }
                }

            }
            catch (Exception ex)
            {
                try
                {
                    LogError(ex.Message, sourceUserID.Split('|')[2], targetWeb.ServerRelativeUrl);
                    Console.WriteLine("\n\rERROR at " + targetWeb.ServerRelativeUrl + " while adding " + sourceUserID.Split('|')[2] +
                        " in " + objType + " " + objTitle + " " +
                        " Message: " + ex.Message + "\n\r");
                }
                catch { }
            }
        }

Wednesday, 18 December 2019

CSOM : How to remove permission of all the SharePoint users?


public static void RemoveSitePermissions(string strURL)
        {
            AuthenticationManager authManagerSource = new AuthenticationManager();
            using (ClientContext clientContextSource = authManagerSource.GetWebLoginClientContext(strURL))
            {
                clientContextSource.RequestTimeout = 9999999;
                Web sourceWeb = clientContextSource.Web;
                clientContextSource.Load(sourceWeb, w => w.HasUniqueRoleAssignments, w => w.RoleDefinitions, w => w.ServerRelativeUrl, w => w.Title);
                clientContextSource.ExecuteQuery();


                if (sourceWeb.HasUniqueRoleAssignments)
                {
                    RoleAssignmentCollection webRoleAssignments = sourceWeb.RoleAssignments;
                    clientContextSource.Load(webRoleAssignments);
                    clientContextSource.ExecuteQuery();
                    Console.WriteLine("Removing permissions from web..\r\n\r\n");
                    foreach (RoleAssignment webRoleAssignment in webRoleAssignments)
                    {
                        clientContextSource.Load(webRoleAssignment, r => r.Member, r => r.RoleDefinitionBindings);
                        clientContextSource.ExecuteQuery();
                        Principal oPrincipal = webRoleAssignment.Member;
                        if (oPrincipal.PrincipalType == PrincipalType.User)
                        {

                            foreach (RoleDefinition rd in webRoleAssignment.RoleDefinitionBindings)
                            {
                                try
                                {
                                    if (rd.Name != "Limited Access")
                                    {
                                        clientContextSource.Load(rd);
                                        webRoleAssignment.RoleDefinitionBindings.Remove(rd);
                                        webRoleAssignment.Update();
                                        clientContextSource.Load(webRoleAssignment, r => r.Member, r => r.RoleDefinitionBindings);
                                        sourceWeb.Update();
                                        clientContextSource.ExecuteQuery();
                                        Console.Write(".");
                                    }
                                }
                                catch (Exception ex)
                                { }
                            }
                        }
                    }
                }
                ListCollection listColl = sourceWeb.Lists;
                clientContextSource.Load(listColl, lc => lc.Include(l => l.HasUniqueRoleAssignments, l => l.Hidden, l => l.Title));
                clientContextSource.ExecuteQuery();

                foreach (List list in listColl)
                {
                    if (list.HasUniqueRoleAssignments && (!list.Hidden))
                    {

                        RoleAssignmentCollection oRoleAssignments = list.RoleAssignments;
                        clientContextSource.Load(oRoleAssignments);
                        clientContextSource.ExecuteQuery();

                        Console.WriteLine("Removing permissions from lists..\r\n\r\n");
                        foreach (RoleAssignment listRoleAssignment in oRoleAssignments)
                        {
                            clientContextSource.Load(listRoleAssignment, r => r.Member, r => r.RoleDefinitionBindings);
                            clientContextSource.ExecuteQuery();
                            Principal oPrincipal = listRoleAssignment.Member;
                            if (oPrincipal.PrincipalType == PrincipalType.User)
                            {
                                foreach (RoleDefinition rd in listRoleAssignment.RoleDefinitionBindings)
                                {
                                    try
                                    {
                                        if (rd.Name != "Limited Access")
                                        {
                                            clientContextSource.Load(rd);
                                            listRoleAssignment.RoleDefinitionBindings.Remove(rd);
                                            listRoleAssignment.Update();
                                            clientContextSource.Load(listRoleAssignment, r => r.Member, r => r.RoleDefinitionBindings);
                                            list.Update();
                                            clientContextSource.ExecuteQuery();
                                            Console.Write(".");
                                        }
                                    }
                                    catch { }
                                }
                            }
                        }


                    }
                }
            }
        }

Reference: https://sharepoint.stackexchange.com/a/228169