Я пытаюсь установить разрешения ACL для пользователя с помощью API REST Azure Data Lake Storage Gen2. Но я не могу найти к нему пути. Для этого я использовал следующую ссылку Microsoft: microsoft-link-path-update
Вот код, который я придумал, используя C#:
static async Task SetUpPermissions(string accessToken)
{
// Replace with your values
string accountName = "<account-name>";
string filesystem = "<container-name>";
string directoryOrFile = "<file-name-with-path>";
string userObjectId = "<user-object-id>";
// URL for setting ACL
string url = $"https://{accountName}.dfs.core.windows.net/{filesystem}/{directoryOrFile}?action= setAccessControl";
// Headers
using (HttpClient client = new HttpClient())
{
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
client.DefaultRequestHeaders.Add("x-ms-version", "2023-08-03");
client.DefaultRequestHeaders.Add("x-ms-lease-action", "acquire-release");
client.DefaultRequestHeaders.Add("x-ms-date", DateTime.UtcNow.ToString("R"));
client.DefaultRequestHeaders.Add("x-ms-client-request-id", Guid.NewGuid().ToString());
// Body with ACL settings
string aclString = $"user:{userObjectId}:rwx,group::r-x,other::r--,mask::rwx,default:user:{userObjectId}:rwx,default:group::r-x,default:other::r--";
string body = $"[{{\"acl\": \"{aclString}\"}}]";
// Make the request
HttpContent content = new StringContent(body, Encoding.UTF8, "application/json");
HttpResponseMessage response = await client.PatchAsync(url, content);
// Check the response
if (response.IsSuccessStatusCode)
{
Console.WriteLine("ACL set successfully");
}
else
{
string responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine($"Failed to set ACL: {response.StatusCode} {responseBody}");
}
}
}
Я получаю следующую ошибку:
«Не указан HTTP-заголовок, обязательный для этого запроса»,
однако следует требовать только «x-ms-lease-action».
Установите разрешения ACL для пользователя с помощью API REST Azure Data Lake Storage Gen2.
Вы можете использовать приведенный ниже код, чтобы установить разрешения ACL
для пользователя, использующего Azure Data Lake Storage Gen2 REST APIs
.
Код:
using System;
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp
{
class Program
{
static async Task Main(string[] args)
{
string accessToken = "<access token>";
await SetUpPermissions(accessToken);
}
static async Task SetUpPermissions(string accessToken)
{
// Replace with your values
string accountName = "Storage account name";
string filesystem = "filesystem name";
string directoryOrFile = "path to file";
string userObjectId = "user object id";
string url = $"https://{accountName}.dfs.core.windows.net/{filesystem}/{directoryOrFile}?action=setAccessControl";
using (HttpClient client = new HttpClient())
{
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
client.DefaultRequestHeaders.Add("x-ms-version", "2023-08-03");
client.DefaultRequestHeaders.Add("x-ms-date", DateTime.UtcNow.ToString("R"));
client.DefaultRequestHeaders.Add("x-ms-acl", $"user:{userObjectId}:rwx,group::r-x,other::r--,mask::rwx");
HttpContent content = new StringContent(string.Empty);
HttpResponseMessage response = await client.PatchAsync(url, content);
if (response.IsSuccessStatusCode)
{
Console.WriteLine("ACL set successfully");
}
else
{
string responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine($"Failed to set ACL: {response.StatusCode} {responseBody}");
}
}
}
}
}
Выход:
ACL set successfully
Портал:
Ссылка:
Выполнение простых операций REST API ADLS Gen2 Storage с помощью CURL - Центр сообщества Microsoft
Я не мог заставить ваш фрагмент кода работать, пока не предоставил правильные разрешения ACL на уровне контейнера субъекту-службе, устанавливающему разрешение. Все хорошо, и я подтверждаю, что этот код работает. Большое спасибо