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