static void Main(string[] args)
{
Console.Write("Enter list name:\r\n");
string listTitle = Console.ReadLine();
Console.Write("\r\nEnter column names separated by columns without space:\r\n");
string listColumns = Console.ReadLine();
SetItemPermissions(listTitle, listColumns);
}
public static void SetItemPermissions(string listName, string fields)
{
try
{
int y = 0;
ClientContext context = new ClientContext("https://domain.com/sites/siteColl/siteName/");
string decryptedPwdt = "password";
foreach (char c in decryptedPwdt)
{
securePassword.AppendChar(c);
}
context.Credentials = new NetworkCredential("user", decryptedPwdt, "Domain");
Web web = context.Web;
context.Load(web);
List list = web.Lists.GetByTitle(listName);
context.Load(list);
CamlQuery camlQuery = new CamlQuery();
ListItemCollection itemColl = list.GetItems(camlQuery);
string[] columnNames = fields.Split(',');
foreach (string column in columnNames)
{
context.Load(itemColl, includes => includes.Include(i => i[column]));
}
context.ExecuteQuery();
foreach (ListItem item in itemColl)
{
item.BreakRoleInheritance(false, false);
foreach (string member in columnNames)
{
try
{
if (item[member].GetType().ToString() == "Microsoft.SharePoint.Client.FieldUserValue")
{
try
{
User user = web.EnsureUser((((Microsoft.SharePoint.Client.FieldUserValue)(item[member])).LookupValue).ToString());
RoleDefinitionBindingCollection roleColl = new RoleDefinitionBindingCollection(context);
roleColl.Add(context.Web.RoleDefinitions.GetByName("Custom permission level"));
item.RoleAssignments.Add(user, roleColl);
}
catch
{
User user = web.EnsureUser((((Microsoft.SharePoint.Client.FieldUserValue)(item[member])).Email).ToString());
RoleDefinitionBindingCollection roleColl = new RoleDefinitionBindingCollection(context);
roleColl.Add(context.Web.RoleDefinitions.GetByName("Custom permission level"));
item.RoleAssignments.Add(user, roleColl);
}
}
else
{
User user = web.EnsureUser(item[member].ToString());
RoleDefinitionBindingCollection roleColl = new RoleDefinitionBindingCollection(context);
roleColl.Add(context.Web.RoleDefinitions.GetByName("Custom permission level"));
item.RoleAssignments.Add(user, roleColl);
}
}
catch { }
}
try
{
Group groupMember = web.SiteGroups.GetByName("Group1");
Group groupOwner = web.SiteGroups.GetByName("Group2");
Group groupTL = web.SiteGroups.GetByName("Group3");
RoleDefinitionBindingCollection roleCollEdit = new RoleDefinitionBindingCollection(context);
roleCollEdit.Add(context.Web.RoleDefinitions.GetByName("Edit"));
RoleDefinitionBindingCollection roleCollFull = new RoleDefinitionBindingCollection(context);
roleCollFull.Add(context.Web.RoleDefinitions.GetByName("Full Control"));
item.RoleAssignments.Add(groupMember, roleCollEdit);
item.RoleAssignments.Add(groupOwner, roleCollFull);
item.RoleAssignments.Add(groupTL, roleCollEdit);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
try
{
item.Update();
context.ExecuteQuery();
}
catch (Exception ex)
{
if (ex.HResult == -2146233088)
{
Group groupMember = web.SiteGroups.GetByName("Group1");
Group groupOwner = web.SiteGroups.GetByName("Group2");
Group groupTL = web.SiteGroups.GetByName("Group3");
RoleDefinitionBindingCollection roleCollEdit = new RoleDefinitionBindingCollection(context);
roleCollEdit.Add(context.Web.RoleDefinitions.GetByName("Edit"));
RoleDefinitionBindingCollection roleCollFull = new RoleDefinitionBindingCollection(context);
roleCollFull.Add(context.Web.RoleDefinitions.GetByName("Full Control"));
item.RoleAssignments.Add(groupMember, roleCollEdit);
item.RoleAssignments.Add(groupOwner, roleCollFull);
item.RoleAssignments.Add(groupTL, roleCollEdit);
item.Update();
try
{
context.ExecuteQuery();
}
catch (Exception ex2)
{
Console.WriteLine(ex2.Message);
}
}
}
Console.Write(".");
y++;
if (y == 1) Console.WriteLine("\r\n1 item updated.");
if (y == 100) Console.WriteLine("\r\n100 items updated.");
if (y == 500) Console.WriteLine("\r\n500 items updated.");
if (y == 800) Console.WriteLine("\r\n800 items updated.");
if (y == 1000) Console.WriteLine("\r\n1000 items updated.");
if (y == 2000) Console.WriteLine("\r\n2000 items updated.");
if (y == 3000) Console.WriteLine("\r\n3000 items updated.");
if (y == 4000) Console.WriteLine("\r\n4000 items updated.");
}
Console.WriteLine("\r\nDone!");
Console.Read();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.Read();
}
}