Thursday, 27 July 2017

SharePoint: How to remove all permissions of a user using CSOM?


Visual Studio > Project > References > Manage NuGet Packages > Online > Search 'Microsoft.SharePointOnline.CSOM' > Accept and Install

Visual Studio > Project > References > Manage NuGet Packages > Online > Search 'OfficeDevPnP.Core' > Accept and Install


private void btnRemove_Click(object sender, EventArgs e)
{
try
{
    progressBar1.Minimum = 0;
    progressBar1.Maximum = 100;
    progressBar1.Value = 1;

    ClientContext context = new ClientContext(txtSiteUrl.Text);
    context.RequestTimeout = 9999999;
    string decryptedPwd = txtAdminPassword.Text;

    foreach (char c in decryptedPwd)
    {
      securePassword.AppendChar(c);
    }
    
    if (rbtnOnpremise.Checked)
    {
      context.Credentials = new NetworkCredential(GetEnterpriseIDFromEmail(txtAdminID.Text),
      securePassword,
      txtDomain.Text);
    }
    else if (rbtnOnline.Checked)
    {
      context.Credentials = new SharePointOnlineCredentials(GetEnterpriseIDFromEmail(txtAdminID.Text) +       "@companyname.com",
      securePassword);

//Multifactor Authentication
//PnP.AuthenticationManager authManager = new PnP.AuthenticationManager();

//context = authManager.GetWebLoginClientContext(txtSiteUrl.Text);
    }

    Web web = context.Web;
    context.Load(web, w => w.Title, w => w.HasUniqueRoleAssignments);
    context.ExecuteQuery();

    string usr_loginName = "i:0#.w|" + txtDomain.Text + "\\" + GetEnterpriseIDFromEmail(txtResourceID.Text);
    User usr = web.EnsureUser(usr_loginName);
    context.Load(usr);
    progressBar1.Value = 5;

    //Remove User from Site
    if (web.HasUniqueRoleAssignments)
    {
  //!!!ExpensiveOperation!!!web.SiteUsers.RemoveByLoginName(usr_loginName);

  try
  {
      RoleAssignment directPermission = web.RoleAssignments.GetByPrincipal(usr);
      directPermission.DeleteObject();
      context.ExecuteQuery();

  }
  catch { }
 
    }
    progressBar1.Value = 10;

    //Remove User from Groups
    if (chkRemoveFromGroups.Checked)
    {
      GroupCollection userGroups = web.SiteGroups;
      context.Load(userGroups);

      context.ExecuteQuery();

  foreach (Group grp in userGroups)
  {
    try
    {
    grp.Users.Remove(usr);
    context.ExecuteQuery();

    }
    catch { }
  }
 
  }
  progressBar1.Value = 30;

    //Remove User from Lists
   if (chkRemoveFromList.Checked)
   {
      ListCollection lists = web.Lists;
      context.Load(lists, lsts => lsts.Where(l => l.HasUniqueRoleAssignments == true &&
                        l.Hidden == false &&
                        l.IsApplicationList == false &&
                        l.IsSiteAssetsLibrary == false).
                        Include(l => l.HasUniqueRoleAssignments, l => l.Title));
      context.ExecuteQuery();

  foreach (List list in lists)
  {
   if (list.HasUniqueRoleAssignments)
   {
     try
     {
       RoleAssignment listLevelPermission = list.RoleAssignments.GetByPrincipal(usr);
       listLevelPermission.DeleteObject();
       context.ExecuteQuery();
     }
     catch { }

   }
  }
 
 }
 progressBar1.Value = 50;

    //Remove User from Items
 if (chkRemoveFromItems.Checked)
 {
   ListCollection lists = web.Lists;
   context.Load(lists, lsts => lsts.Where(l => l.Hidden == false &&
                        l.IsApplicationList == false &&
                        l.IsSiteAssetsLibrary == false).
                        Include(l => l.Title));
   context.ExecuteQuery();

   foreach (List list in lists)
   {
     CamlQuery camlQuery = new CamlQuery();
     camlQuery.ViewXml = "<View Scope=\"RecursiveAll\"><RowLimit>10000</RowLimit></View>";

    ListItemCollection collListItem = list.GetItems(camlQuery);
    context.Load(collListItem,
    items => items.Where(
    item => item.HasUniqueRoleAssignments == true).
    Include(
    item => item.Id,
    item => item.DisplayName,
    item => item.HasUniqueRoleAssignments));
    context.ExecuteQuery();

    foreach (ListItem item in collListItem)
    {
    if (item.HasUniqueRoleAssignments)
    {
     try
     {
      RoleAssignment itemLevelPermission = item.RoleAssignments.GetByPrincipal(usr);
      itemLevelPermission.DeleteObject();
      context.ExecuteQuery();
     }
     catch { }
    }
 }
 }
 }

 progressBar1.Value = 100;
 MessageBox.Show("User Permissions removed!");
}
catch (Exception ex)
{
    MessageBox.Show("Error: " + ex.Message);
    progressBar1.Value = 100;
}
}

No comments:

Post a Comment