James
James

Reputation: 1261

Unable to update permissions for Sharepoint site

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

Answers (1)

James
James

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

Related Questions