Reputation: 1261
I came up with the CSOM code to update permissions but for some reason the update doesn't take place. I refresh the site and permission settings stay the same. Is the anything wrong with the code?
private static void UpdatePermissions(ClientContext clientContext)
{
try
{
clientContext.Load(clientContext.Web);
clientContext.Load(clientContext.Web.RoleDefinitions);
clientContext.ExecuteQuery();
var roleDefinitions = clientContext.Web.RoleDefinitions;
var ownerPermissions = roleDefinitions.GetByName("Owner");
clientContext.Load(ownerPermissions);
clientContext.ExecuteQuery();
ownerPermissions.BasePermissions.Set(PermissionKind.DeleteVersions);
ownerPermissions.BasePermissions.Set(PermissionKind.UseClientIntegration);
ownerPermissions.BasePermissions.Set(PermissionKind.UseRemoteAPIs);
//clientContext.Load(ownerPermissions);
clientContext.Web.Update();
clientContext.ExecuteQuery();
}
catch (Exception e)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("UpdatePermissions " + e.Message);
WriteLog(fileName, "UpdatePermissions " + e.Message);
}
finally
{
Console.ForegroundColor = ConsoleColor.White;
}
}
Upvotes: 0
Views: 182
Reputation: 1261
Found a solution
private static void UpdatePermissions(ClientContext clientContext)
{
try
{
clientContext.Load(clientContext.Web);
clientContext.Load(clientContext.Web.RoleDefinitions);
clientContext.ExecuteQuery();
var roleDefinitions = clientContext.Web.RoleDefinitions;
var ownerPermissions = roleDefinitions.GetByName("Owner");
clientContext.Load(ownerPermissions);
clientContext.ExecuteQuery();
var basePermissions = CopyBasePermissionLevel(ownerPermissions.BasePermissions);
basePermissions.Set(PermissionKind.DeleteVersions);
basePermissions.Set(PermissionKind.UseClientIntegration);
basePermissions.Set(PermissionKind.UseRemoteAPIs);
ownerPermissions.BasePermissions = basePermissions;
//clientContext.Load(ownerPermissions);
ownerPermissions.Update();
clientContext.ExecuteQuery();
}
catch (Exception e)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("UpdatePermissions " + e.Message);
WriteLog(fileName, "UpdatePermissions " + e.Message);
}
finally
{
Console.ForegroundColor = ConsoleColor.White;
}
}
private static BasePermissions CopyBasePermissionLevel(BasePermissions basePermission)
{
var copiedPermissions = new BasePermissions();
foreach (var permission in Enum.GetValues(typeof(PermissionKind)))
{
if (basePermission.Has((PermissionKind) permission))
{
copiedPermissions.Set((PermissionKind)permission);
}
}
return copiedPermissions;
}
Upvotes: 1