diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/WorkflowServiceModule.Configure.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/WorkflowServiceModule.Configure.cs index 10bda73f8..e4faf6073 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/WorkflowServiceModule.Configure.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/WorkflowServiceModule.Configure.cs @@ -50,6 +50,7 @@ using Volo.Abp.Json.SystemTextJson; using Volo.Abp.Localization; using Volo.Abp.MultiTenancy; using Volo.Abp.PermissionManagement; +using Volo.Abp.Roles; using Volo.Abp.Security.Claims; using Volo.Abp.Threading; using Volo.Abp.Timing; @@ -333,7 +334,7 @@ public partial class WorkflowServiceModule Configure(options => { options.IsDynamicPermissionStoreEnabled = true; - options.SaveStaticPermissionsToDatabase = false; + options.SaveStaticPermissionsToDatabase = true; }); } @@ -365,7 +366,7 @@ public partial class WorkflowServiceModule { options.IsDynamicClaimsEnabled = true; options.RemoteRefreshUrl = configuration["App:RefreshClaimsUrl"] + options.RemoteRefreshUrl; - + options.DynamicClaims.Add(Elsa.PermissionNames.ClaimType); }); } @@ -485,10 +486,15 @@ public partial class WorkflowServiceModule options.Events.OnTokenValidated = async context => { await previousOnTokenValidated(context); + if (context.Principal?.Identity?.IsAuthenticated == true) { - context.Principal.AddIdentity(new ClaimsIdentity( - new[] { new Claim(Elsa.PermissionNames.ClaimType, Elsa.PermissionNames.All) })); + var roleClaims = context.Principal.FindAll(AbpClaimTypes.Role); + if (roleClaims.Any(x => x.Value.Equals(AbpRoleConsts.AdminRoleName, StringComparison.CurrentCultureIgnoreCase))) + { + context.Principal.AddIdentity(new ClaimsIdentity( + new[] { new Claim(Elsa.PermissionNames.ClaimType, Elsa.PermissionNames.All) })); + } } }; }) diff --git a/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Server/LINGYUN.Abp.ElsaNext.Server.csproj b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Server/LINGYUN.Abp.ElsaNext.Server.csproj index 3080d0fe9..9b7c762c1 100644 --- a/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Server/LINGYUN.Abp.ElsaNext.Server.csproj +++ b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Server/LINGYUN.Abp.ElsaNext.Server.csproj @@ -1,4 +1,4 @@ - + @@ -14,6 +14,11 @@ + + + + + @@ -26,7 +31,7 @@ - + diff --git a/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Server/LINGYUN/Abp/ElsaNext/Server/AbpElsaNextServerModule.cs b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Server/LINGYUN/Abp/ElsaNext/Server/AbpElsaNextServerModule.cs index 818e1e517..137486ee6 100644 --- a/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Server/LINGYUN/Abp/ElsaNext/Server/AbpElsaNextServerModule.cs +++ b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Server/LINGYUN/Abp/ElsaNext/Server/AbpElsaNextServerModule.cs @@ -1,7 +1,12 @@ using Elsa.Extensions; using Elsa.Features.Services; +using LINGYUN.Abp.ElsaNext.Localization; +using LINGYUN.Abp.ElsaNext.Permissions; +using LINGYUN.Abp.ElsaNext.Server.Permissions; using Microsoft.Extensions.Configuration; +using Volo.Abp.Localization; using Volo.Abp.Modularity; +using Volo.Abp.VirtualFileSystem; namespace LINGYUN.Abp.ElsaNext.Server; @@ -52,4 +57,84 @@ public class AbpElsaNextServerModule : AbpModule elsa.AddWorkflowsFrom(); }); } + + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + options.FileSets.AddEmbedded(); + }); + + Configure(options => + { + options.Resources + .Get() + .AddVirtualJson("/LINGYUN/Abp/ElsaNext/Server/Localization/Resources"); + }); + + Configure(options => + { + options.MapPermission( + ElsaWorkflowPermissionNames.Definitions.Default, + ElsaWorkflowPermissions.Definitions.Read); + options.MapPermission( + ElsaWorkflowPermissionNames.Definitions.Delete, + ElsaWorkflowPermissions.Definitions.Delete); + options.MapPermission( + ElsaWorkflowPermissionNames.Definitions.Execute, + ElsaWorkflowPermissions.Definitions.Execute); + options.MapPermission( + ElsaWorkflowPermissionNames.Definitions.Publish, + ElsaWorkflowPermissions.Definitions.Publish); + options.MapPermission( + ElsaWorkflowPermissionNames.Definitions.Retract, + ElsaWorkflowPermissions.Definitions.Retract); + options.MapPermission( + ElsaWorkflowPermissionNames.Definitions.Retract, + ElsaWorkflowPermissions.Definitions.Retract); + options.MapPermission( + ElsaWorkflowPermissionNames.Definitions.Update, + ElsaWorkflowPermissions.Definitions.Write); + options.MapPermission( + ElsaWorkflowPermissionNames.Definitions.Create, + ElsaWorkflowPermissions.Definitions.Write); + options.MapPermission( + ElsaWorkflowPermissionNames.Definitions.Refresh, + ElsaWorkflowPermissions.Definitions.Refresh); + options.MapPermission( + ElsaWorkflowPermissionNames.Definitions.Reload, + ElsaWorkflowPermissions.Definitions.Reload); + options.MapPermission( + ElsaWorkflowPermissionNames.Definitions.Versions.Default, + ElsaWorkflowPermissions.Definitions.Read); + options.MapPermission( + ElsaWorkflowPermissionNames.Definitions.Versions.Delete, + ElsaWorkflowPermissions.Definitions.Delete); + options.MapPermission( + ElsaWorkflowPermissionNames.Definitions.Versions.Revert, + ElsaWorkflowPermissions.Definitions.Publish); + + options.MapPermission( + ElsaWorkflowPermissionNames.Instances.Default, + ElsaWorkflowPermissions.Instances.Read); + options.MapPermission( + ElsaWorkflowPermissionNames.Instances.Delete, + ElsaWorkflowPermissions.Instances.Delete); + options.MapPermission( + ElsaWorkflowPermissionNames.Instances.Create, + ElsaWorkflowPermissions.Instances.Write); + options.MapPermission( + ElsaWorkflowPermissionNames.Instances.Update, + ElsaWorkflowPermissions.Instances.Write); + options.MapPermission( + ElsaWorkflowPermissionNames.Instances.Cancel, + ElsaWorkflowPermissions.Instances.Cancel); + options.MapPermission( + ElsaWorkflowPermissionNames.Instances.Variables.Default, + ElsaWorkflowPermissions.Instances.Read); + options.MapPermission( + ElsaWorkflowPermissionNames.Instances.Variables.Update, + ElsaWorkflowPermissions.Instances.Write); + }); + } } diff --git a/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Server/LINGYUN/Abp/ElsaNext/Server/AbpElsaPermissionEvaluator.cs b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Server/LINGYUN/Abp/ElsaNext/Server/AbpElsaPermissionEvaluator.cs new file mode 100644 index 000000000..04a8442eb --- /dev/null +++ b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Server/LINGYUN/Abp/ElsaNext/Server/AbpElsaPermissionEvaluator.cs @@ -0,0 +1,10 @@ +//using System; +//using System.Collections.Generic; +//using System.Text; + +//namespace LINGYUN.Abp.ElsaNext.Server; + +// TODO: 在IPermissionEvaluator接口可用时启用 +//public class AbpElsaPermissionEvaluator : IPermissionEvaluator +//{ +//} diff --git a/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Server/LINGYUN/Abp/ElsaNext/Server/Localization/Resources/en.json b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Server/LINGYUN/Abp/ElsaNext/Server/Localization/Resources/en.json new file mode 100644 index 000000000..14d6ec5b7 --- /dev/null +++ b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Server/LINGYUN/Abp/ElsaNext/Server/Localization/Resources/en.json @@ -0,0 +1,9 @@ +{ + "culture": "en", + "texts": { + "Permission:Definitions": "工作流定义", + "Permission:Instances": "工作流实例", + "Permission:Variables": "变量", + "Permission:Versions": "版本" + } +} diff --git a/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Server/LINGYUN/Abp/ElsaNext/Server/Localization/Resources/zh-Hans.json b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Server/LINGYUN/Abp/ElsaNext/Server/Localization/Resources/zh-Hans.json new file mode 100644 index 000000000..d02a5fd89 --- /dev/null +++ b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Server/LINGYUN/Abp/ElsaNext/Server/Localization/Resources/zh-Hans.json @@ -0,0 +1,9 @@ +{ + "culture": "zh-Hans", + "texts": { + "Permission:Definitions": "工作流定义", + "Permission:Instances": "工作流实例", + "Permission:Variables": "变量", + "Permission:Versions": "版本" + } +} diff --git a/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Server/LINGYUN/Abp/ElsaNext/Server/Permissions/ElsaWorkflowPermissionDefinitionProvider.cs b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Server/LINGYUN/Abp/ElsaNext/Server/Permissions/ElsaWorkflowPermissionDefinitionProvider.cs new file mode 100644 index 000000000..cbfd6b60b --- /dev/null +++ b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Server/LINGYUN/Abp/ElsaNext/Server/Permissions/ElsaWorkflowPermissionDefinitionProvider.cs @@ -0,0 +1,102 @@ +using LINGYUN.Abp.ElsaNext.Localization; +using LINGYUN.Abp.ElsaNext.Permissions; +using Volo.Abp.Authorization.Permissions; +using Volo.Abp.Localization; +using Volo.Abp.MultiTenancy; + +namespace LINGYUN.Abp.ElsaNext.Server.Permissions; + +public class ElsaWorkflowPermissionDefinitionProvider : PermissionDefinitionProvider +{ + public override void Define(IPermissionDefinitionContext context) + { + var elsaPermission = context.GetGroupOrNull(ElsaPermissionNames.GroupName); + if (elsaPermission == null) + { + return; + } + + var definitionsPermission = elsaPermission.AddPermission( + ElsaWorkflowPermissionNames.Definitions.Default, + L("Permission:Definitions"), + MultiTenancySides.Host); + definitionsPermission.AddChild( + ElsaWorkflowPermissionNames.Definitions.Create, + L("Permission:Create"), + MultiTenancySides.Host); + definitionsPermission.AddChild( + ElsaWorkflowPermissionNames.Definitions.Update, + L("Permission:Update"), + MultiTenancySides.Host); + definitionsPermission.AddChild( + ElsaWorkflowPermissionNames.Definitions.Delete, + L("Permission:Delete"), + MultiTenancySides.Host); + definitionsPermission.AddChild( + ElsaWorkflowPermissionNames.Definitions.Execute, + L("Permission:Execute"), + MultiTenancySides.Host); + definitionsPermission.AddChild( + ElsaWorkflowPermissionNames.Definitions.Publish, + L("Permission:Publish"), + MultiTenancySides.Host); + definitionsPermission.AddChild( + ElsaWorkflowPermissionNames.Definitions.Retract, + L("Permission:Retract"), + MultiTenancySides.Host); + definitionsPermission.AddChild( + ElsaWorkflowPermissionNames.Definitions.Refresh, + L("Permission:Refresh"), + MultiTenancySides.Host); + definitionsPermission.AddChild( + ElsaWorkflowPermissionNames.Definitions.Reload, + L("Permission:Reload"), + MultiTenancySides.Host); + var definitionsVesionPermission = definitionsPermission.AddChild( + ElsaWorkflowPermissionNames.Definitions.Versions.Default, + L("Permission:Versions"), + MultiTenancySides.Host); + definitionsVesionPermission.AddChild( + ElsaWorkflowPermissionNames.Definitions.Versions.Revert, + L("Permission:Revert"), + MultiTenancySides.Host); + definitionsVesionPermission.AddChild( + ElsaWorkflowPermissionNames.Definitions.Versions.Delete, + L("Permission:Delete"), + MultiTenancySides.Host); + + var instancesPermission = elsaPermission.AddPermission( + ElsaWorkflowPermissionNames.Instances.Default, + L("Permission:Instances"), + MultiTenancySides.Host); + instancesPermission.AddChild( + ElsaWorkflowPermissionNames.Instances.Create, + L("Permission:Create"), + MultiTenancySides.Host); + instancesPermission.AddChild( + ElsaWorkflowPermissionNames.Instances.Update, + L("Permission:Update"), + MultiTenancySides.Host); + instancesPermission.AddChild( + ElsaWorkflowPermissionNames.Instances.Delete, + L("Permission:Delete"), + MultiTenancySides.Host); + instancesPermission.AddChild( + ElsaWorkflowPermissionNames.Instances.Cancel, + L("Permission:Cancel"), + MultiTenancySides.Host); + var instancesVariablesPermission = instancesPermission.AddChild( + ElsaWorkflowPermissionNames.Instances.Variables.Default, + L("Permission:Variables"), + MultiTenancySides.Host); + instancesVariablesPermission.AddChild( + ElsaWorkflowPermissionNames.Instances.Variables.Update, + L("Permission:Update"), + MultiTenancySides.Host); + } + + private static LocalizableString L(string name) + { + return LocalizableString.Create(name); + } +} diff --git a/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Server/LINGYUN/Abp/ElsaNext/Server/Permissions/ElsaWorkflowPermissionNames.cs b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Server/LINGYUN/Abp/ElsaNext/Server/Permissions/ElsaWorkflowPermissionNames.cs new file mode 100644 index 000000000..cd38165c1 --- /dev/null +++ b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Server/LINGYUN/Abp/ElsaNext/Server/Permissions/ElsaWorkflowPermissionNames.cs @@ -0,0 +1,40 @@ +using LINGYUN.Abp.ElsaNext.Permissions; + +namespace LINGYUN.Abp.ElsaNext.Server.Permissions; + +public static class ElsaWorkflowPermissionNames +{ + public const string Prefix = ElsaPermissionNames.GroupName + ".Workflows"; + + public static class Definitions + { + public const string Default = Prefix + ".Definitions"; + public const string Create = Default + ".Create"; + public const string Update = Default + ".Update"; + public const string Delete = Default + ".Delete"; + public const string Execute = Default + ".Execute"; + public const string Publish = Default + ".Publish"; + public const string Retract = Default + ".Retract"; + public const string Refresh = Default + ".Refresh"; + public const string Reload = Default + ".Reload"; + public static class Versions + { + public const string Default = Definitions.Default + ".Versions"; + public const string Delete = Default + ".Delete"; + public const string Revert = Default + ".Revert"; + } + } + public static class Instances + { + public const string Default = Prefix + ".Instances"; + public const string Create = Default + ".Create"; + public const string Update = Default + ".Update"; + public const string Delete = Default + ".Delete"; + public const string Cancel = Default + ".Cancel"; + public static class Variables + { + public const string Default = Instances.Default + ".Variables"; + public const string Update = Default + ".Update"; + } + } +} diff --git a/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Server/LINGYUN/Abp/ElsaNext/Server/Permissions/ElsaWorkflowPermissions.cs b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Server/LINGYUN/Abp/ElsaNext/Server/Permissions/ElsaWorkflowPermissions.cs new file mode 100644 index 000000000..b9305d658 --- /dev/null +++ b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Server/LINGYUN/Abp/ElsaNext/Server/Permissions/ElsaWorkflowPermissions.cs @@ -0,0 +1,27 @@ +using LINGYUN.Abp.ElsaNext.Permissions; + +namespace LINGYUN.Abp.ElsaNext.Server.Permissions; + +public static class ElsaWorkflowPermissions +{ + public static class Definitions + { + public const string Default = "workflows-definitions"; + public const string Read = ElsaPermissionVerbs.Read + ":" + Default; + public const string Write = ElsaPermissionVerbs.Write + ":" + Default; + public const string Delete = ElsaPermissionVerbs.Delete + ":" + Default; + public const string Execute = ElsaPermissionVerbs.Execute + ":" + Default; + public const string Publish = ElsaPermissionVerbs.Publish + ":" + Default; + public const string Retract = ElsaPermissionVerbs.Retract + ":" + Default; + public const string Refresh = ElsaPermissionVerbs.Actions + ":" + Default + ":" + ElsaPermissionVerbs.Refresh; + public const string Reload = ElsaPermissionVerbs.Reload + ":" + Default + ":" + ElsaPermissionVerbs.Reload; + } + public static class Instances + { + public const string Default = "workflows-instances"; + public const string Read = ElsaPermissionVerbs.Read + ":" + Default; + public const string Write = ElsaPermissionVerbs.Write + ":" + Default; + public const string Delete = ElsaPermissionVerbs.Delete + ":" + Default; + public const string Cancel = ElsaPermissionVerbs.Cancel + ":" + Default; + } +} diff --git a/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN.Abp.ElsaNext.csproj b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN.Abp.ElsaNext.csproj index fa07bc599..628740c84 100644 --- a/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN.Abp.ElsaNext.csproj +++ b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN.Abp.ElsaNext.csproj @@ -13,6 +13,11 @@ + + + + + diff --git a/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN/Abp/ElsaNext/AbpElsaNextModule.cs b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN/Abp/ElsaNext/AbpElsaNextModule.cs index 072e9c653..070ac3d87 100644 --- a/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN/Abp/ElsaNext/AbpElsaNextModule.cs +++ b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN/Abp/ElsaNext/AbpElsaNextModule.cs @@ -1,7 +1,6 @@ using Elsa.Common.Multitenancy; using Elsa.Extensions; using Elsa.Features.Services; -using Elsa.ShellFeatures; using Elsa.Workflows; using LINGYUN.Abp.ElsaNext.Localization; using LINGYUN.Abp.ElsaNext.Multitenancy; @@ -12,6 +11,7 @@ using Volo.Abp.Json; using Volo.Abp.Localization; using Volo.Abp.Modularity; using Volo.Abp.Threading; +using Volo.Abp.VirtualFileSystem; namespace LINGYUN.Abp.ElsaNext; @@ -39,9 +39,16 @@ public class AbpElsaNextModule : AbpModule context.Services.Replace( ServiceDescriptor.Singleton()); + Configure(options => + { + options.FileSets.AddEmbedded(); + }); + Configure(options => { - options.Resources.Add("en"); + options.Resources + .Add("en") + .AddVirtualJson("/LINGYUN/Abp/ElsaNext/Localization/Resources"); }); } } diff --git a/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN/Abp/ElsaNext/Localization/Resources/en.json b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN/Abp/ElsaNext/Localization/Resources/en.json new file mode 100644 index 000000000..ef9a34049 --- /dev/null +++ b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN/Abp/ElsaNext/Localization/Resources/en.json @@ -0,0 +1,14 @@ +{ + "culture": "en", + "texts": { + "Permission:Elsa": "Elsa Workflows", + "Permission:Create": "Create", + "Permission:Update": "Update", + "Permission:Delete": "Delete", + "Permission:Execute": "Execute", + "Permission:Publish": "Publish", + "Permission:Retract": "Retract", + "Permission:Refresh": "Refresh", + "Permission:Reload": "Reload" + } +} diff --git a/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN/Abp/ElsaNext/Localization/Resources/zh-Hans.json b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN/Abp/ElsaNext/Localization/Resources/zh-Hans.json new file mode 100644 index 000000000..6b6ab1662 --- /dev/null +++ b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN/Abp/ElsaNext/Localization/Resources/zh-Hans.json @@ -0,0 +1,14 @@ +{ + "culture": "zh-Hans", + "texts": { + "Permission:Elsa": "Elsa工作流", + "Permission:Create": "新增", + "Permission:Update": "编辑", + "Permission:Delete": "删除", + "Permission:Execute": "触发", + "Permission:Publish": "发布", + "Permission:Retract": "撤销", + "Permission:Refresh": "刷新", + "Permission:Reload": "重载" + } +} diff --git a/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN/Abp/ElsaNext/Permissions/AbpElsaPermissionMapClaimsPrincipalContributor.cs b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN/Abp/ElsaNext/Permissions/AbpElsaPermissionMapClaimsPrincipalContributor.cs new file mode 100644 index 000000000..663306cf1 --- /dev/null +++ b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN/Abp/ElsaNext/Permissions/AbpElsaPermissionMapClaimsPrincipalContributor.cs @@ -0,0 +1,37 @@ +//using Microsoft.Extensions.DependencyInjection; +//using Microsoft.Extensions.Options; +//using System; +//using System.Linq; +//using System.Threading.Tasks; +//using Volo.Abp.Authorization.Permissions; +//using Volo.Abp.Security.Claims; + +//namespace LINGYUN.Abp.ElsaNext.Permissions; + +//public class AbpElsaPermissionMapClaimsPrincipalContributor : AbpDynamicClaimsPrincipalContributorBase +//{ +// private const string PermissionClaimType = "permissions"; +// public async override Task ContributeAsync(AbpClaimsPrincipalContributorContext context) +// { +// var claimsIdentity = context.ClaimsPrincipal.Identities.First(); +// if (!claimsIdentity.IsAuthenticated || claimsIdentity.FindFirst(PermissionClaimType) != null) +// { +// return; +// } + +// var options = context.ServiceProvider.GetRequiredService>(); +// var permissionChecker = context.ServiceProvider.GetRequiredService(); +// var permissionNames = options.Value.PermissionMaps.Select(x => x.Source).ToArray(); +// var checkResult = await permissionChecker.IsGrantedAsync(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)) +// .ToList(); + +// await AddDynamicClaimsAsync(context, claimsIdentity, elsaPermissions); +// } +//} diff --git a/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN/Abp/ElsaNext/Permissions/AbpElsaPermissionMapOptions.cs b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN/Abp/ElsaNext/Permissions/AbpElsaPermissionMapOptions.cs new file mode 100644 index 000000000..ae3cfb131 --- /dev/null +++ b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN/Abp/ElsaNext/Permissions/AbpElsaPermissionMapOptions.cs @@ -0,0 +1,40 @@ +using System.Collections.Generic; +using System.Linq; + +namespace LINGYUN.Abp.ElsaNext.Permissions; + +public class AbpElsaPermissionMapOptions +{ + public IList PermissionMaps { get; } + public AbpElsaPermissionMapOptions() + { + PermissionMaps = new List(); + } + + public AbpElsaPermissionMapOptions MapPermission(string source, string target) + { + if (!PermissionMaps.Any(x => x.Target == target)) + { + PermissionMaps.Add(new ElsaPermissionMapRecord(source, target)); + } + + return this; + } +} + +public class ElsaPermissionMapRecord +{ + /// + /// Abp Permission + /// + public string Source { get; } + /// + /// Elsa Permission + /// + public string Target { get; } + public ElsaPermissionMapRecord(string source, string target) + { + Source = source; + Target = target; + } +} \ No newline at end of file diff --git a/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN/Abp/ElsaNext/Permissions/ElsaPermissionDefinitionProvider.cs b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN/Abp/ElsaNext/Permissions/ElsaPermissionDefinitionProvider.cs new file mode 100644 index 000000000..a27d6efb8 --- /dev/null +++ b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN/Abp/ElsaNext/Permissions/ElsaPermissionDefinitionProvider.cs @@ -0,0 +1,20 @@ +using LINGYUN.Abp.ElsaNext.Localization; +using Volo.Abp.Authorization.Permissions; +using Volo.Abp.Localization; + +namespace LINGYUN.Abp.ElsaNext.Permissions; + +public class ElsaPermissionDefinitionProvider : PermissionDefinitionProvider +{ + public override void Define(IPermissionDefinitionContext context) + { + context.AddGroup( + ElsaPermissionNames.GroupName, + L("Permission:Elsa")); + } + + private static LocalizableString L(string name) + { + return LocalizableString.Create(name); + } +} diff --git a/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN/Abp/ElsaNext/Permissions/ElsaPermissionNames.cs b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN/Abp/ElsaNext/Permissions/ElsaPermissionNames.cs new file mode 100644 index 000000000..3d057e017 --- /dev/null +++ b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN/Abp/ElsaNext/Permissions/ElsaPermissionNames.cs @@ -0,0 +1,6 @@ +namespace LINGYUN.Abp.ElsaNext.Permissions; + +public static class ElsaPermissionNames +{ + public const string GroupName = "AbpElsaNext"; +} diff --git a/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN/Abp/ElsaNext/Permissions/ElsaPermissionVerbs.cs b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN/Abp/ElsaNext/Permissions/ElsaPermissionVerbs.cs new file mode 100644 index 000000000..870771e6c --- /dev/null +++ b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN/Abp/ElsaNext/Permissions/ElsaPermissionVerbs.cs @@ -0,0 +1,15 @@ +namespace LINGYUN.Abp.ElsaNext.Permissions; + +public static class ElsaPermissionVerbs +{ + public const string Write = "write"; + public const string Delete = "delete"; + public const string Execute = "exec"; + public const string Read = "read"; + public const string Publish = "publish"; + public const string Retract = "retract"; + public const string Actions = "actions"; + public const string Refresh = "refresh"; + public const string Reload = "reload"; + public const string Cancel = "cancel"; +}