Browse Source

feat: Annotation Dynamic Permission

pull/1568/head
colin 3 weeks ago
parent
commit
a17e430bb7
  1. 16
      aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/WorkflowServiceModule.Configure.cs
  2. 4
      aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Server/LINGYUN/Abp/ElsaNext/Server/Permissions/ElsaWorkflowPermissions.cs
  3. 6
      aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN/Abp/ElsaNext/Permissions/AbpElsaPermissionMapClaimsPrincipalContributor.cs

16
aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/WorkflowServiceModule.Configure.cs

@ -9,6 +9,7 @@ using Elsa.Secrets.Persistence.EFCore.Extensions;
using Elsa.Secrets.Persistence.EFCore.Sqlite.Extensions;
using Elsa.Studio.Authentication.OpenIdConnect.HttpMessageHandlers;
using Elsa.Studio.Workflows.Designer.Extensions;
using LINGYUN.Abp.ElsaNext.Permissions;
using LINGYUN.Abp.ElsaNext.Studio.Blazor;
using LINGYUN.Abp.Localization.CultureMap;
using LINGYUN.Abp.LocalizationManagement;
@ -24,6 +25,7 @@ using Microsoft.AspNetCore.DataProtection;
using Microsoft.Extensions.Caching.StackExchangeRedis;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Microsoft.IdentityModel.Logging;
using Microsoft.IdentityModel.Tokens;
using Microsoft.OpenApi;
@ -41,6 +43,7 @@ using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Routing;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc.AntiForgery;
using Volo.Abp.Auditing;
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.BlobStoring;
using Volo.Abp.Caching;
using Volo.Abp.EntityFrameworkCore;
@ -489,6 +492,19 @@ public partial class WorkflowServiceModule
if (context.Principal?.Identity?.IsAuthenticated == true)
{
//var options = context.HttpContext.RequestServices.GetRequiredService<IOptions<AbpElsaPermissionMapOptions>>();
//var permissionChecker = context.HttpContext.RequestServices.GetRequiredService<IPermissionChecker>();
//var permissionNames = options.Value.PermissionMaps.Select(x => x.Source).ToArray();
//var checkResult = await permissionChecker.IsGrantedAsync(context.Principal, permissionNames);
//var grantPermissions = checkResult.Result.Where(x => x.Value == PermissionGrantResult.Granted).Select(x => x.Key);
//var elsaPermissions = options.Value.PermissionMaps.Where(x => grantPermissions.Contains(x.Source))
// .Select(x => new Claim("permissions", x.Target))
// .ToList();
//context.Principal.AddIdentity(new ClaimsIdentity(elsaPermissions));
var roleClaims = context.Principal.FindAll(AbpClaimTypes.Role);
if (roleClaims.Any(x => x.Value.Equals(AbpRoleConsts.AdminRoleName, StringComparison.CurrentCultureIgnoreCase)))
{

4
aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Server/LINGYUN/Abp/ElsaNext/Server/Permissions/ElsaWorkflowPermissions.cs

@ -6,7 +6,7 @@ public static class ElsaWorkflowPermissions
{
public static class Definitions
{
public const string Default = "workflows-definitions";
public const string Default = "workflow-definitions";
public const string Read = ElsaPermissionVerbs.Read + ":" + Default;
public const string Write = ElsaPermissionVerbs.Write + ":" + Default;
public const string Delete = ElsaPermissionVerbs.Delete + ":" + Default;
@ -18,7 +18,7 @@ public static class ElsaWorkflowPermissions
}
public static class Instances
{
public const string Default = "workflows-instances";
public const string Default = "workflow-instances";
public const string Read = ElsaPermissionVerbs.Read + ":" + Default;
public const string Write = ElsaPermissionVerbs.Write + ":" + Default;
public const string Delete = ElsaPermissionVerbs.Delete + ":" + Default;

6
aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN/Abp/ElsaNext/Permissions/AbpElsaPermissionMapClaimsPrincipalContributor.cs

@ -14,7 +14,7 @@
// public async override Task ContributeAsync(AbpClaimsPrincipalContributorContext context)
// {
// var claimsIdentity = context.ClaimsPrincipal.Identities.First();
// if (!claimsIdentity.IsAuthenticated || claimsIdentity.FindFirst(PermissionClaimType) != null)
// if (!claimsIdentity.IsAuthenticated)
// {
// return;
// }
@ -22,14 +22,14 @@
// var options = context.ServiceProvider.GetRequiredService<IOptions<AbpElsaPermissionMapOptions>>();
// var permissionChecker = context.ServiceProvider.GetRequiredService<IPermissionChecker>();
// var permissionNames = options.Value.PermissionMaps.Select(x => x.Source).ToArray();
// var checkResult = await permissionChecker.IsGrantedAsync(permissionNames);
// var checkResult = await permissionChecker.IsGrantedAsync(context.ClaimsPrincipal, permissionNames);
// var grantPermissions = checkResult.Result.Where(x => x.Value == PermissionGrantResult.Granted).Select(x => x.Key);
// // PermissionNames.ClaimType => permissions
// // Permission.ToString() => $"{Verb}{Separator}{Resource}";
// var elsaPermissions = options.Value.PermissionMaps.Where(x => grantPermissions.Contains(x.Source))
// .Select(x => new AbpDynamicClaim("permissions", x.Target))
// .Select(x => new AbpDynamicClaim(PermissionClaimType, x.Target))
// .ToList();
// await AddDynamicClaimsAsync(context, claimsIdentity, elsaPermissions);

Loading…
Cancel
Save