From e1b1c664a8be3383cc8b48db10dbc1ad5bae3f7d Mon Sep 17 00:00:00 2001 From: Dmitry Kuimov Date: Mon, 4 Sep 2023 21:52:49 +0300 Subject: [PATCH] fix: enforce methods --- src/Casdoor.Client/CasdoorClient.CasbinApi.cs | 92 ++++++++++++------- 1 file changed, 59 insertions(+), 33 deletions(-) diff --git a/src/Casdoor.Client/CasdoorClient.CasbinApi.cs b/src/Casdoor.Client/CasdoorClient.CasbinApi.cs index 3d27f60..1011268 100644 --- a/src/Casdoor.Client/CasdoorClient.CasbinApi.cs +++ b/src/Casdoor.Client/CasdoorClient.CasbinApi.cs @@ -12,51 +12,57 @@ // See the License for the specific language governing permissions and // limitations under the License. +using System.Net.Http.Headers; using System.Net.Http.Json; +using System.Text; +using System.Text.Json; +using IdentityModel.Client; namespace Casdoor.Client; public partial class CasdoorClient { - public virtual async Task EnforceAsync( - CasdoorEnforceData enforceData, + public virtual Task EnforceAsync( + IEnumerable permissionRule, string? permissionId, string? modelId, string? resourceId, string? enforcerId, CancellationToken cancellationToken = default) { - var queryMapBuilder = new QueryMapBuilder(); - - if (!string.IsNullOrEmpty(permissionId)) - { - queryMapBuilder.Add(permissionId!); - } - - if (!string.IsNullOrEmpty(modelId)) - { - queryMapBuilder.Add(modelId!); - } - - if (!string.IsNullOrEmpty(resourceId)) - { - queryMapBuilder.Add(resourceId!); - } - - if (!string.IsNullOrEmpty(enforcerId)) - { - queryMapBuilder.Add(enforcerId!); - } + return DoEnforceAsync( + "enforce", + JsonSerializer.Serialize(permissionRule), + permissionId, + modelId, + resourceId, + enforcerId, + cancellationToken); + } - var queryMap = queryMapBuilder.QueryMap; - var response = await PostAsJsonAsync(_options.GetActionUrl("enforce", queryMap), enforceData.Data, cancellationToken); - return new CasdoorEnforceResult { Result = response.DeserializeData>() }; + public virtual Task BatchEnforceAsync( + IEnumerable> permissionRule, + string? permissionId, + string? modelId, + string? enforcerId, + CancellationToken cancellationToken = default) + { + return DoEnforceAsync( + "batch-enforce", + JsonSerializer.Serialize(permissionRule), + permissionId, + modelId, + null, + enforcerId, + cancellationToken); } - public virtual async Task?> BatchEnforceAsync( - IEnumerable enforceData, + private async Task DoEnforceAsync( + string url, + string data, string? permissionId, string? modelId, + string? resourceId, string? enforcerId, CancellationToken cancellationToken = default) { @@ -65,23 +71,42 @@ public partial class CasdoorClient if (!string.IsNullOrEmpty(permissionId)) { queryMapBuilder.Add(permissionId!); + queryMapBuilder.Add("permissionId", permissionId!); } if (!string.IsNullOrEmpty(modelId)) { queryMapBuilder.Add(modelId!); + queryMapBuilder.Add("modelId", modelId!); + } + + if (!string.IsNullOrEmpty(resourceId)) + { + queryMapBuilder.Add(resourceId!); + queryMapBuilder.Add("resourceId", resourceId!); } if (!string.IsNullOrEmpty(enforcerId)) { queryMapBuilder.Add(enforcerId!); + queryMapBuilder.Add("enforcerId", enforcerId!); } - var queryMap = queryMapBuilder.QueryMap; - var data = enforceData.Select(data => data.Data); - var response = await PostAsJsonAsync(_options.GetActionUrl("batch-enforce", queryMap), data, cancellationToken); - var results = response.DeserializeData>>(); - return results!.Select(result => new CasdoorEnforceResult { Result = result }); + var request = new HttpRequestMessage + { + Method = HttpMethod.Post, + RequestUri = new Uri(_options.GetActionUrl(url, queryMapBuilder.QueryMap)), + Content = new StringContent( + data, + Encoding.UTF8, + "application/json") + }; + request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); + request.SetBasicAuthentication(_options.ClientId, _options.ClientSecret); + + var response = await _httpClient.SendAsync(request, cancellationToken); + string responseContent = await response.Content.ReadAsStringAsync(); // netstandard2.0 does not support cancellationToken + return JsonSerializer.Deserialize(responseContent)!; } public virtual Task?> GetAllObjectsAsync(CancellationToken cancellationToken = default) => @@ -90,6 +115,7 @@ public partial class CasdoorClient public virtual Task?> GetAllActionsAsync(CancellationToken cancellationToken = default) => GetAllAsync("get-all-actions", cancellationToken); + public virtual Task?> GetAllRolesAsync(CancellationToken cancellationToken = default) => GetAllAsync("get-all-roles", cancellationToken);