Browse Source

feat: Increase the definition of workflow permissions

pull/1568/head
colin 3 weeks ago
parent
commit
26cd678cea
  1. 14
      aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/WorkflowServiceModule.Configure.cs
  2. 9
      aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Server/LINGYUN.Abp.ElsaNext.Server.csproj
  3. 85
      aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Server/LINGYUN/Abp/ElsaNext/Server/AbpElsaNextServerModule.cs
  4. 10
      aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Server/LINGYUN/Abp/ElsaNext/Server/AbpElsaPermissionEvaluator.cs
  5. 9
      aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Server/LINGYUN/Abp/ElsaNext/Server/Localization/Resources/en.json
  6. 9
      aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Server/LINGYUN/Abp/ElsaNext/Server/Localization/Resources/zh-Hans.json
  7. 102
      aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Server/LINGYUN/Abp/ElsaNext/Server/Permissions/ElsaWorkflowPermissionDefinitionProvider.cs
  8. 40
      aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Server/LINGYUN/Abp/ElsaNext/Server/Permissions/ElsaWorkflowPermissionNames.cs
  9. 27
      aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Server/LINGYUN/Abp/ElsaNext/Server/Permissions/ElsaWorkflowPermissions.cs
  10. 5
      aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN.Abp.ElsaNext.csproj
  11. 11
      aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN/Abp/ElsaNext/AbpElsaNextModule.cs
  12. 14
      aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN/Abp/ElsaNext/Localization/Resources/en.json
  13. 14
      aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN/Abp/ElsaNext/Localization/Resources/zh-Hans.json
  14. 37
      aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN/Abp/ElsaNext/Permissions/AbpElsaPermissionMapClaimsPrincipalContributor.cs
  15. 40
      aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN/Abp/ElsaNext/Permissions/AbpElsaPermissionMapOptions.cs
  16. 20
      aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN/Abp/ElsaNext/Permissions/ElsaPermissionDefinitionProvider.cs
  17. 6
      aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN/Abp/ElsaNext/Permissions/ElsaPermissionNames.cs
  18. 15
      aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN/Abp/ElsaNext/Permissions/ElsaPermissionVerbs.cs

14
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<PermissionManagementOptions>(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) }));
}
}
};
})

9
aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Server/LINGYUN.Abp.ElsaNext.Server.csproj

@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\..\configureawait.props" />
<Import Project="..\..\..\..\common.props" />
@ -14,6 +14,11 @@
<RootNamespace />
</PropertyGroup>
<ItemGroup>
<None Remove="LINGYUN\Abp\ElsaNext\Server\Localization\Resources\*.json" />
<EmbeddedResource Include="LINGYUN\Abp\ElsaNext\Server\Localization\Resources\*.json" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Elsa.Api.Common" VersionOverride="$(ElsaNextPackageVersion)" />
<PackageReference Include="Elsa.Dashboard.Api" VersionOverride="$(ElsaNextPackageVersion)" />
@ -26,7 +31,7 @@
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\LINGYUN.Abp.ElsaNext\LINGYUN.Abp.ElsaNext.csproj" />
<ProjectReference Include="..\LINGYUN.Abp.ElsaNext\LINGYUN.Abp.ElsaNext.csproj" />
</ItemGroup>
</Project>

85
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<AbpElsaNextServerModule>();
});
}
public override void ConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpVirtualFileSystemOptions>(options =>
{
options.FileSets.AddEmbedded<AbpElsaNextServerModule>();
});
Configure<AbpLocalizationOptions>(options =>
{
options.Resources
.Get<ElsaNextResource>()
.AddVirtualJson("/LINGYUN/Abp/ElsaNext/Server/Localization/Resources");
});
Configure<AbpElsaPermissionMapOptions>(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);
});
}
}

10
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
//{
//}

9
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": "版本"
}
}

9
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": "版本"
}
}

102
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<ElsaNextResource>(name);
}
}

40
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";
}
}
}

27
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;
}
}

5
aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext/LINGYUN.Abp.ElsaNext.csproj

@ -13,6 +13,11 @@
<RootNamespace />
</PropertyGroup>
<ItemGroup>
<None Remove="LINGYUN\Abp\ElsaNext\Localization\Resources\*.json" />
<EmbeddedResource Include="LINGYUN\Abp\ElsaNext\Localization\Resources\*.json" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.Features" />
<PackageReference Include="Volo.Abp.Guids" />

11
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<IIdentityGenerator, AbpElsaIdentityGenerator>());
Configure<AbpVirtualFileSystemOptions>(options =>
{
options.FileSets.AddEmbedded<AbpElsaNextModule>();
});
Configure<AbpLocalizationOptions>(options =>
{
options.Resources.Add<ElsaNextResource>("en");
options.Resources
.Add<ElsaNextResource>("en")
.AddVirtualJson("/LINGYUN/Abp/ElsaNext/Localization/Resources");
});
}
}

14
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"
}
}

14
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": "重载"
}
}

37
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<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 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);
// }
//}

40
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<ElsaPermissionMapRecord> PermissionMaps { get; }
public AbpElsaPermissionMapOptions()
{
PermissionMaps = new List<ElsaPermissionMapRecord>();
}
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
{
/// <summary>
/// Abp Permission
/// </summary>
public string Source { get; }
/// <summary>
/// Elsa Permission
/// </summary>
public string Target { get; }
public ElsaPermissionMapRecord(string source, string target)
{
Source = source;
Target = target;
}
}

20
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<ElsaNextResource>(name);
}
}

6
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";
}

15
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";
}
Loading…
Cancel
Save