From 5aec22d1f4e7964547268bd6b05aaaf42af3be1a Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Wed, 27 Mar 2019 20:53:11 +0300 Subject: [PATCH] Resolved #925: Add MultiTenancySide to PermissionDefinition --- .../Volo.Abp.Authorization.csproj | 1 + .../Authorization/AbpAuthorizationModule.cs | 4 ++- .../IPermissionDefinitionContext.cs | 6 ++++- .../Permissions/PermissionDefinition.cs | 19 +++++++++++--- .../PermissionDefinitionContext.cs | 8 ++++-- .../Permissions/PermissionGroupDefinition.cs | 16 +++++++++--- .../Abp/MultiTenancy/AbpMultiTenancyModule.cs | 2 ++ .../Abp/MultiTenancy/MultiTenancySides.cs | 26 +++++++++++++++++++ ...tManagementPermissionDefinitionProvider.cs | 11 ++++---- 9 files changed, 78 insertions(+), 15 deletions(-) create mode 100644 framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenancySides.cs diff --git a/framework/src/Volo.Abp.Authorization/Volo.Abp.Authorization.csproj b/framework/src/Volo.Abp.Authorization/Volo.Abp.Authorization.csproj index 5942fada15..1be1b27c4f 100644 --- a/framework/src/Volo.Abp.Authorization/Volo.Abp.Authorization.csproj +++ b/framework/src/Volo.Abp.Authorization/Volo.Abp.Authorization.csproj @@ -19,6 +19,7 @@ + diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AbpAuthorizationModule.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AbpAuthorizationModule.cs index 880673f86b..060fe03dc4 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AbpAuthorizationModule.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AbpAuthorizationModule.cs @@ -5,13 +5,15 @@ using Microsoft.Extensions.DependencyInjection; using Volo.Abp.Authorization.Permissions; using Volo.Abp.Localization; using Volo.Abp.Modularity; +using Volo.Abp.MultiTenancy; using Volo.Abp.Security; namespace Volo.Abp.Authorization { [DependsOn( typeof(AbpSecurityModule), - typeof(AbpLocalizationAbstractionsModule) + typeof(AbpLocalizationAbstractionsModule), + typeof(AbpMultiTenancyModule) )] public class AbpAuthorizationModule : AbpModule { diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/IPermissionDefinitionContext.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/IPermissionDefinitionContext.cs index 84530e2aa6..e5541caf3f 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/IPermissionDefinitionContext.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/IPermissionDefinitionContext.cs @@ -1,5 +1,6 @@ using JetBrains.Annotations; using Volo.Abp.Localization; +using Volo.Abp.MultiTenancy; namespace Volo.Abp.Authorization.Permissions { @@ -8,7 +9,10 @@ namespace Volo.Abp.Authorization.Permissions //TODO: Add Get methods to find and modify a permission or group. PermissionGroupDefinition GetGroupOrNull(string name); - PermissionGroupDefinition AddGroup([NotNull] string name, ILocalizableString displayName = null); + PermissionGroupDefinition AddGroup( + [NotNull] string name, + ILocalizableString displayName = null, + MultiTenancySides multiTenancySide = MultiTenancySides.Both); void RemoveGroup(string name); } diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinition.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinition.cs index de4ca1221f..2e274965b2 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinition.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinition.cs @@ -2,6 +2,7 @@ using System.Collections.Immutable; using JetBrains.Annotations; using Volo.Abp.Localization; +using Volo.Abp.MultiTenancy; namespace Volo.Abp.Authorization.Permissions { @@ -18,6 +19,12 @@ namespace Volo.Abp.Authorization.Permissions /// public PermissionDefinition Parent { get; private set; } + /// + /// MultiTenancy side. + /// Default: + /// + public MultiTenancySides MultiTenancySide { get; set; } + /// /// A list of allowed providers to get/set value of this permission. /// An empty list indicates that all providers are allowed. @@ -55,10 +62,12 @@ namespace Volo.Abp.Authorization.Permissions protected internal PermissionDefinition( [NotNull] string name, - ILocalizableString displayName = null) + ILocalizableString displayName = null, + MultiTenancySides multiTenancySide = MultiTenancySides.Both) { Name = Check.NotNull(name, nameof(name)); DisplayName = displayName ?? new FixedLocalizableString(name); + MultiTenancySide = multiTenancySide; Properties = new Dictionary(); Providers = new List(); @@ -67,9 +76,13 @@ namespace Volo.Abp.Authorization.Permissions public virtual PermissionDefinition AddChild( [NotNull] string name, - ILocalizableString displayName = null) + ILocalizableString displayName = null, + MultiTenancySides multiTenancySide = MultiTenancySides.Both) { - var child = new PermissionDefinition(name, displayName) + var child = new PermissionDefinition( + name, + displayName, + multiTenancySide) { Parent = this }; diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinitionContext.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinitionContext.cs index 2fdb60b75f..777cd1f7b0 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinitionContext.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinitionContext.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using Volo.Abp.Localization; +using Volo.Abp.MultiTenancy; namespace Volo.Abp.Authorization.Permissions { @@ -12,7 +13,10 @@ namespace Volo.Abp.Authorization.Permissions Groups = new Dictionary(); } - public virtual PermissionGroupDefinition AddGroup(string name, ILocalizableString displayName = null) + public virtual PermissionGroupDefinition AddGroup( + string name, + ILocalizableString displayName = null, + MultiTenancySides multiTenancySide = MultiTenancySides.Both) { Check.NotNull(name, nameof(name)); @@ -21,7 +25,7 @@ namespace Volo.Abp.Authorization.Permissions throw new AbpException($"There is already an existing permission group with name: {name}"); } - return Groups[name] = new PermissionGroupDefinition(name, displayName); + return Groups[name] = new PermissionGroupDefinition(name, displayName, multiTenancySide); } public virtual PermissionGroupDefinition GetGroupOrNull(string name) diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionGroupDefinition.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionGroupDefinition.cs index 623db24c8a..5582739a11 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionGroupDefinition.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionGroupDefinition.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.Collections.Immutable; using Volo.Abp.Localization; +using Volo.Abp.MultiTenancy; namespace Volo.Abp.Authorization.Permissions { @@ -20,6 +21,12 @@ namespace Volo.Abp.Authorization.Permissions } private ILocalizableString _displayName; + /// + /// MultiTenancy side. + /// Default: + /// + public MultiTenancySides MultiTenancySide { get; set; } + public IReadOnlyList Permissions => _permissions.ToImmutableList(); private readonly List _permissions; @@ -39,10 +46,12 @@ namespace Volo.Abp.Authorization.Permissions protected internal PermissionGroupDefinition( string name, - ILocalizableString displayName = null) + ILocalizableString displayName = null, + MultiTenancySides multiTenancySide = MultiTenancySides.Both) { Name = name; DisplayName = displayName ?? new FixedLocalizableString(Name); + MultiTenancySide = multiTenancySide; Properties = new Dictionary(); _permissions = new List(); @@ -50,9 +59,10 @@ namespace Volo.Abp.Authorization.Permissions public virtual PermissionDefinition AddPermission( string name, - ILocalizableString displayName = null) + ILocalizableString displayName = null, + MultiTenancySides multiTenancySide = MultiTenancySides.Both) { - var permission = new PermissionDefinition(name, displayName); + var permission = new PermissionDefinition(name, displayName, multiTenancySide); _permissions.Add(permission); diff --git a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/AbpMultiTenancyModule.cs b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/AbpMultiTenancyModule.cs index a9b4c7b488..75d5631658 100644 --- a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/AbpMultiTenancyModule.cs +++ b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/AbpMultiTenancyModule.cs @@ -6,6 +6,8 @@ using Volo.Abp.Security; namespace Volo.Abp.MultiTenancy { + //TODO: Create a Volo.Abp.MultiTenancy.Abstractions package? + [DependsOn( typeof(AbpDataModule), typeof(AbpSecurityModule) diff --git a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenancySides.cs b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenancySides.cs new file mode 100644 index 0000000000..0210b9a706 --- /dev/null +++ b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenancySides.cs @@ -0,0 +1,26 @@ +using System; + +namespace Volo.Abp.MultiTenancy +{ + /// + /// Represents sides in a multi tenancy application. + /// + [Flags] + public enum MultiTenancySides + { + /// + /// Tenant side. + /// + Tenant = 1, + + /// + /// Host side. + /// + Host = 2, + + /// + /// Both sides + /// + Both = Tenant | Host + } +} diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/AbpTenantManagementPermissionDefinitionProvider.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/AbpTenantManagementPermissionDefinitionProvider.cs index 32aae64598..5a2e2e9d46 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/AbpTenantManagementPermissionDefinitionProvider.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/AbpTenantManagementPermissionDefinitionProvider.cs @@ -1,5 +1,6 @@ using Volo.Abp.Authorization.Permissions; using Volo.Abp.Localization; +using Volo.Abp.MultiTenancy; using Volo.Abp.TenantManagement.Localization; namespace Volo.Abp.TenantManagement @@ -10,11 +11,11 @@ namespace Volo.Abp.TenantManagement { var tenantManagementGroup = context.AddGroup(TenantManagementPermissions.GroupName, L("Permission:TenantManagement")); - var tenantsPermission = tenantManagementGroup.AddPermission(TenantManagementPermissions.Tenants.Default, L("Permission:TenantManagement")); - tenantsPermission.AddChild(TenantManagementPermissions.Tenants.Create, L("Permission:Create")); - tenantsPermission.AddChild(TenantManagementPermissions.Tenants.Update, L("Permission:Edit")); - tenantsPermission.AddChild(TenantManagementPermissions.Tenants.Delete, L("Permission:Delete")); - tenantsPermission.AddChild(TenantManagementPermissions.Tenants.ManageFeatures, L("Permission:ManageFeatures")); + var tenantsPermission = tenantManagementGroup.AddPermission(TenantManagementPermissions.Tenants.Default, L("Permission:TenantManagement"), multiTenancySide: MultiTenancySides.Host); + tenantsPermission.AddChild(TenantManagementPermissions.Tenants.Create, L("Permission:Create"), multiTenancySide: MultiTenancySides.Host); + tenantsPermission.AddChild(TenantManagementPermissions.Tenants.Update, L("Permission:Edit"), multiTenancySide: MultiTenancySides.Host); + tenantsPermission.AddChild(TenantManagementPermissions.Tenants.Delete, L("Permission:Delete"), multiTenancySide: MultiTenancySides.Host); + tenantsPermission.AddChild(TenantManagementPermissions.Tenants.ManageFeatures, L("Permission:ManageFeatures"), multiTenancySide: MultiTenancySides.Host); } private static LocalizableString L(string name)