csharp/Microsoft.Azure.Databricks.Client/UnityCatalog/UnityCatalogPermissionsApiClient.cs (65 lines of code) (raw):
using Microsoft.Azure.Databricks.Client.Models.UnityCatalog;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Text.Json.Nodes;
using System.Threading;
using System.Threading.Tasks;
namespace Microsoft.Azure.Databricks.Client.UnityCatalog;
public class UnityCatalogPermissionsApiClient : ApiClient, IUnityCatalogPermissionsApi
{
public UnityCatalogPermissionsApiClient(HttpClient httpClient) : base(httpClient)
{
}
public async Task<IEnumerable<Permission>> Get(
SecurableType securableType,
string securableFullName,
string principal = default,
CancellationToken cancellationToken = default)
{
var requestUriSb = new StringBuilder(
$"{BaseUnityCatalogUri}/permissions/{securableType.ToString().ToLower()}/{securableFullName}");
if (principal != null)
{
requestUriSb.Append($"?principal={principal}");
}
var requestUri = requestUriSb.ToString();
var permissionsList = await HttpGet<JsonObject>(HttpClient, requestUri, cancellationToken).ConfigureAwait(false);
permissionsList.TryGetPropertyValue("privilege_assignments", out var permissions);
return permissions.Deserialize<IEnumerable<Permission>>(Options) ?? Enumerable.Empty<Permission>();
}
public async Task<IEnumerable<Permission>> Update(
SecurableType securableType,
string securableFullName,
IEnumerable<PermissionsUpdate> permissionsUpdates,
CancellationToken cancellationToken = default)
{
var request = new
{
changes = permissionsUpdates,
};
var requestUri = $"{BaseUnityCatalogUri}/permissions/{securableType.ToString().ToLower()}/{securableFullName}";
var permissionsList = await HttpPatch<dynamic, JsonObject>(HttpClient, requestUri, request, cancellationToken).ConfigureAwait(false);
permissionsList.TryGetPropertyValue("privilege_assignments", out var permissions);
return permissions.Deserialize<IEnumerable<Permission>>(Options) ?? Enumerable.Empty<Permission>();
}
public async Task<IEnumerable<EffectivePermission>> GetEffective(
SecurableType securableType,
string securableFullName,
string principal = default,
CancellationToken cancellationToken = default)
{
var requestUriSb = new StringBuilder(
$"{BaseUnityCatalogUri}/effective-permissions/{securableType.ToString().ToLower()}/{securableFullName}");
if (principal != null)
{
requestUriSb.Append($"?principal={principal}");
}
var requestUri = requestUriSb.ToString();
var effectivePermissionsList = await HttpGet<JsonObject>(HttpClient, requestUri, cancellationToken).ConfigureAwait(false);
effectivePermissionsList.TryGetPropertyValue("privilege_assignments", out var effectivePermissions);
return effectivePermissions.Deserialize<IEnumerable<EffectivePermission>>(Options) ?? Enumerable.Empty<EffectivePermission>();
}
}