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)