无法更新 Sharepoint 网站的权限
Unable to update permissions for Sharepoint site
我想出了 CSOM 代码来更新权限,但由于某种原因更新没有发生。我刷新网站,权限设置保持不变。代码有问题吗?
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;
}
}
找到解决方案
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;
}
我想出了 CSOM 代码来更新权限,但由于某种原因更新没有发生。我刷新网站,权限设置保持不变。代码有问题吗?
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;
}
}
找到解决方案
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;
}