csharp/Microsoft.Azure.Databricks.Client/PermissionsApiClient.cs (379 lines of code) (raw):
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
using Microsoft.Azure.Databricks.Client.Models;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text.Json;
using System.Text.Json.Nodes;
using System.Threading;
using System.Threading.Tasks;
namespace Microsoft.Azure.Databricks.Client;
public class PermissionsApiClient : ApiClient, IPermissionsApi
{
public PermissionsApiClient(HttpClient httpClient) : base(httpClient)
{
}
private async Task<IEnumerable<(PermissionLevel, string)>> GetPermissionLevels(string apiUri,
CancellationToken cancellationToken = default)
{
var result = await HttpGet<JsonObject>(HttpClient, apiUri, cancellationToken).ConfigureAwait(false);
result.TryGetPropertyValue("permission_levels", out var permissionLevelsNode);
return from node in permissionLevelsNode!.AsArray()
let permLevel = node!["permission_level"]!.Deserialize<PermissionLevel>(Options)
let desc = node!["description"]?.GetValue<string>() ?? string.Empty
select (permLevel, desc);
}
private async Task<IEnumerable<AclPermissionItem>> GetPermissions(string apiUri,
CancellationToken cancellationToken = default)
{
var result = await HttpGet<JsonObject>(HttpClient, apiUri, cancellationToken);
return from aclItemNode in result["access_control_list"]!.AsArray()
select aclItemNode.Deserialize<AclPermissionItem>(Options);
}
private async Task<IEnumerable<AclPermissionItem>> PutPermissions<TBody>(string apiUri, TBody requestBody,
CancellationToken cancellationToken)
{
var result = await HttpPut<TBody, JsonObject>(HttpClient, apiUri, requestBody, cancellationToken);
return from aclItemNode in result["access_control_list"]!.AsArray()
select aclItemNode.Deserialize<AclPermissionItem>(Options);
}
private async Task<IEnumerable<AclPermissionItem>> PatchPermissions<TBody>(string apiUri, TBody requestBody,
CancellationToken cancellationToken)
{
var result = await HttpPatch<TBody, JsonObject>(HttpClient, apiUri, requestBody, cancellationToken);
return from aclItemNode in result["access_control_list"]!.AsArray()
select aclItemNode.Deserialize<AclPermissionItem>(Options);
}
public async Task<IEnumerable<(PermissionLevel, string)>> GetClusterPermissionLevels(string clusterId,
CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/clusters/{clusterId}/permissionLevels";
return await GetPermissionLevels(requestUri, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<AclPermissionItem>> GetClusterPermissions(string clusterId,
CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/clusters/{clusterId}";
return await GetPermissions(requestUri, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<(PermissionLevel, string)>> GetClusterPolicyPermissionLevels(string policyId, CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/cluster-policies/{policyId}/permissionLevels";
return await GetPermissionLevels(requestUri, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<AclPermissionItem>> GetClusterPolicyPermissions(string policyId, CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/cluster-policies/{policyId}";
return await GetPermissions(requestUri, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<(PermissionLevel, string)>> GetDirectoryPermissionLevels(string directoryId,
CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/directories/{directoryId}/permissionLevels";
return await GetPermissionLevels(requestUri, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<AclPermissionItem>> GetDirectoryPermissions(string directoryId,
CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/directories/{directoryId}";
return await GetPermissions(requestUri, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<(PermissionLevel, string)>> GetExperimentPermissionLevels(string experimentId,
CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/experiments/{experimentId}/permissionLevels";
return await GetPermissionLevels(requestUri, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<AclPermissionItem>> GetExperimentPermissions(string experimentId,
CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/experiments/{experimentId}";
return await GetPermissions(requestUri, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<(PermissionLevel, string)>> GetInstancePoolPermissionLevels(string instancePoolId,
CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/instance-pools/{instancePoolId}/permissionLevels";
return await GetPermissionLevels(requestUri, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<AclPermissionItem>> GetInstancePoolPermissions(string instancePoolId,
CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/instance-pools/{instancePoolId}";
return await GetPermissions(requestUri, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<(PermissionLevel, string)>> GetJobPermissionLevels(string jobId,
CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/jobs/{jobId}/permissionLevels";
return await GetPermissionLevels(requestUri, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<AclPermissionItem>> GetJobPermissions(string jobId,
CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/jobs/{jobId}";
return await GetPermissions(requestUri, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<(PermissionLevel, string)>> GetNotebookPermissionLevels(string notebookId,
CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/notebooks/{notebookId}/permissionLevels";
return await GetPermissionLevels(requestUri, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<AclPermissionItem>> GetNotebookPermissions(string notebookId,
CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/notebooks/{notebookId}";
return await GetPermissions(requestUri, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<(PermissionLevel, string)>> GetPipelinePermissionLevels(string pipelineId,
CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/pipelines/{pipelineId}/permissionLevels";
return await GetPermissionLevels(requestUri, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<AclPermissionItem>> GetPipelinePermissions(string pipelineId,
CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/pipelines/{pipelineId}";
return await GetPermissions(requestUri, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<(PermissionLevel, string)>> GetRegisteredModelPermissionLevels(
string registeredModelId, CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/registered-models/{registeredModelId}/permissionLevels";
return await GetPermissionLevels(requestUri, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<AclPermissionItem>> GetRegisteredModelPermissions(string registeredModelId,
CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/registered-models/{registeredModelId}";
return await GetPermissions(requestUri, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<(PermissionLevel, string)>> GetRepoPermissionLevels(string repoId,
CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/repos/{repoId}/permissionLevels";
return await GetPermissionLevels(requestUri, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<AclPermissionItem>> GetRepoPermissions(string repoId,
CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/repos/{repoId}";
return await GetPermissions(requestUri, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<(PermissionLevel, string)>> GetSqlWarehousePermissionLevels(string endpointId,
CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/sql/endpoints/{endpointId}/permissionLevels";
return await GetPermissionLevels(requestUri, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<AclPermissionItem>> GetSqlWarehousePermissions(string endpointId,
CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/sql/endpoints/{endpointId}";
return await GetPermissions(requestUri, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<(PermissionLevel, string)>> GetTokenPermissionLevels(
CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/authorization/tokens/permissionLevels";
return await GetPermissionLevels(requestUri, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<AclPermissionItem>> GetTokenPermissions(
CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/authorization/tokens";
return await GetPermissions(requestUri, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<AclPermissionItem>> ReplaceClusterPermissions(
IEnumerable<AclPermissionItem> accessControlList, string clusterId,
CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/clusters/{clusterId}";
var body = new { access_control_list = accessControlList };
return await PutPermissions(requestUri, body, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<AclPermissionItem>> ReplaceClusterPolicyPermissions(
IEnumerable<AclPermissionItem> accessControlList, string policyId,
CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/cluster-policies/{policyId}";
var body = new { access_control_list = accessControlList };
return await PutPermissions(requestUri, body, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<AclPermissionItem>> ReplaceDirectoryPermissions(
IEnumerable<AclPermissionItem> accessControlList,
string directoryId, CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/directories/{directoryId}";
var body = new { access_control_list = accessControlList };
return await PutPermissions(requestUri, body, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<AclPermissionItem>> ReplaceExperimentPermissions(
IEnumerable<AclPermissionItem> accessControlList,
string experimentId, CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/experiments/{experimentId}";
var body = new { access_control_list = accessControlList };
return await PutPermissions(requestUri, body, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<AclPermissionItem>> ReplaceInstancePoolPermissions(
IEnumerable<AclPermissionItem> accessControlList,
string instancePoolId, CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/instance-pools/{instancePoolId}";
var body = new { access_control_list = accessControlList };
return await PutPermissions(requestUri, body, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<AclPermissionItem>> ReplaceJobPermissions(
IEnumerable<AclPermissionItem> accessControlList, string jobId,
CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/jobs/{jobId}";
var body = new { access_control_list = accessControlList };
return await PutPermissions(requestUri, body, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<AclPermissionItem>> ReplaceNotebookPermissions(
IEnumerable<AclPermissionItem> accessControlList,
string notebookId, CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/notebooks/{notebookId}";
var body = new { access_control_list = accessControlList };
return await PutPermissions(requestUri, body, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<AclPermissionItem>> ReplacePipelinePermissions(
IEnumerable<AclPermissionItem> accessControlList,
string pipelineId, CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/pipelines/{pipelineId}";
var body = new { access_control_list = accessControlList };
return await PutPermissions(requestUri, body, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<AclPermissionItem>> ReplaceRegisteredModelPermissions(
IEnumerable<AclPermissionItem> accessControlList,
string registeredModelId, CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/registered-models/{registeredModelId}";
var body = new { access_control_list = accessControlList };
return await PutPermissions(requestUri, body, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<AclPermissionItem>> ReplaceRepoPermissions(
IEnumerable<AclPermissionItem> accessControlList, string repoId,
CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/repos/{repoId}";
var body = new { access_control_list = accessControlList };
return await PutPermissions(requestUri, body, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<AclPermissionItem>> ReplaceSqlWarehousePermissions(
IEnumerable<AclPermissionItem> accessControlList,
string endpointId, CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/sql/endpoints/{endpointId}";
var body = new { access_control_list = accessControlList };
return await PutPermissions(requestUri, body, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<AclPermissionItem>> ReplaceTokenPermissionsForWorkspace(
IEnumerable<AclPermissionItem> accessControlList,
CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/authorization/tokens";
var body = new { access_control_list = accessControlList };
return await PutPermissions(requestUri, body, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<AclPermissionItem>> UpdateClusterPermissions(
IEnumerable<AclPermissionItem> accessControlList, string clusterId,
CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/clusters/{clusterId}";
var body = new { access_control_list = accessControlList };
return await PatchPermissions(requestUri, body, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<AclPermissionItem>> UpdateClusterPolicyPermissions(IEnumerable<AclPermissionItem> accessControlList, string policyId,
CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/cluster-policies/{policyId}";
var body = new { access_control_list = accessControlList };
return await PatchPermissions(requestUri, body, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<AclPermissionItem>> UpdateDirectoryPermissions(
IEnumerable<AclPermissionItem> accessControlList,
string directoryId, CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/directories/{directoryId}";
var body = new { access_control_list = accessControlList };
return await PatchPermissions(requestUri, body, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<AclPermissionItem>> UpdateExperimentPermissions(
IEnumerable<AclPermissionItem> accessControlList,
string experimentId, CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/experiments/{experimentId}";
var body = new { access_control_list = accessControlList };
return await PatchPermissions(requestUri, body, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<AclPermissionItem>> UpdateInstancePoolPermissions(
IEnumerable<AclPermissionItem> accessControlList,
string instancePoolId, CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/instance-pools/{instancePoolId}";
var body = new { access_control_list = accessControlList };
return await PatchPermissions(requestUri, body, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<AclPermissionItem>> UpdateJobPermissions(
IEnumerable<AclPermissionItem> accessControlList, string jobId,
CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/jobs/{jobId}";
var body = new { access_control_list = accessControlList };
return await PatchPermissions(requestUri, body, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<AclPermissionItem>> UpdateNotebookPermissions(
IEnumerable<AclPermissionItem> accessControlList, string notebookId,
CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/notebooks/{notebookId}";
var body = new { access_control_list = accessControlList };
return await PatchPermissions(requestUri, body, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<AclPermissionItem>> UpdatePipelinePermissions(
IEnumerable<AclPermissionItem> accessControlList, string pipelineId,
CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/pipelines/{pipelineId}";
var body = new { access_control_list = accessControlList };
return await PatchPermissions(requestUri, body, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<AclPermissionItem>> UpdateRegisteredModelPermissions(
IEnumerable<AclPermissionItem> accessControlList,
string registeredModelId, CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/registered-models/{registeredModelId}";
var body = new { access_control_list = accessControlList };
return await PatchPermissions(requestUri, body, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<AclPermissionItem>> UpdateRepoPermissions(
IEnumerable<AclPermissionItem> accessControlList, string repoId,
CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/repos/{repoId}";
var body = new { access_control_list = accessControlList };
return await PatchPermissions(requestUri, body, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<AclPermissionItem>> UpdateSqlWarehousePermissions(
IEnumerable<AclPermissionItem> accessControlList,
string endpointId, CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/sql/endpoints/{endpointId}";
var body = new { access_control_list = accessControlList };
return await PatchPermissions(requestUri, body, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<AclPermissionItem>> UpdateTokenPermissions(
IEnumerable<AclPermissionItem> accessControlList,
CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/permissions/authorization/tokens";
var body = new { access_control_list = accessControlList };
return await PatchPermissions(requestUri, body, cancellationToken).ConfigureAwait(false);
}
}