18 changed files with 459 additions and 8 deletions
@ -0,0 +1,10 @@ |
|||||
|
//using System;
|
||||
|
//using System.Collections.Generic;
|
||||
|
//using System.Text;
|
||||
|
|
||||
|
//namespace LINGYUN.Abp.ElsaNext.Server;
|
||||
|
|
||||
|
// TODO: 在IPermissionEvaluator接口可用时启用
|
||||
|
//public class AbpElsaPermissionEvaluator : IPermissionEvaluator
|
||||
|
//{
|
||||
|
//}
|
||||
@ -0,0 +1,9 @@ |
|||||
|
{ |
||||
|
"culture": "en", |
||||
|
"texts": { |
||||
|
"Permission:Definitions": "工作流定义", |
||||
|
"Permission:Instances": "工作流实例", |
||||
|
"Permission:Variables": "变量", |
||||
|
"Permission:Versions": "版本" |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,9 @@ |
|||||
|
{ |
||||
|
"culture": "zh-Hans", |
||||
|
"texts": { |
||||
|
"Permission:Definitions": "工作流定义", |
||||
|
"Permission:Instances": "工作流实例", |
||||
|
"Permission:Variables": "变量", |
||||
|
"Permission:Versions": "版本" |
||||
|
} |
||||
|
} |
||||
@ -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); |
||||
|
} |
||||
|
} |
||||
@ -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"; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -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; |
||||
|
} |
||||
|
} |
||||
@ -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" |
||||
|
} |
||||
|
} |
||||
@ -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": "重载" |
||||
|
} |
||||
|
} |
||||
@ -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);
|
||||
|
// }
|
||||
|
//}
|
||||
@ -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; |
||||
|
} |
||||
|
} |
||||
@ -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); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,6 @@ |
|||||
|
namespace LINGYUN.Abp.ElsaNext.Permissions; |
||||
|
|
||||
|
public static class ElsaPermissionNames |
||||
|
{ |
||||
|
public const string GroupName = "AbpElsaNext"; |
||||
|
} |
||||
@ -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…
Reference in new issue