Browse Source

Resolved #925: Add MultiTenancySide to PermissionDefinition

pull/926/head
Halil ibrahim Kalkan 8 years ago
parent
commit
5aec22d1f4
  1. 1
      framework/src/Volo.Abp.Authorization/Volo.Abp.Authorization.csproj
  2. 4
      framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AbpAuthorizationModule.cs
  3. 6
      framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/IPermissionDefinitionContext.cs
  4. 19
      framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinition.cs
  5. 8
      framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinitionContext.cs
  6. 16
      framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionGroupDefinition.cs
  7. 2
      framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/AbpMultiTenancyModule.cs
  8. 26
      framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenancySides.cs
  9. 11
      modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/AbpTenantManagementPermissionDefinitionProvider.cs

1
framework/src/Volo.Abp.Authorization/Volo.Abp.Authorization.csproj

@ -19,6 +19,7 @@
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\Volo.Abp.Localization.Abstractions\Volo.Abp.Localization.Abstractions.csproj" /> <ProjectReference Include="..\Volo.Abp.Localization.Abstractions\Volo.Abp.Localization.Abstractions.csproj" />
<ProjectReference Include="..\Volo.Abp.MultiTenancy\Volo.Abp.MultiTenancy.csproj" />
<ProjectReference Include="..\Volo.Abp.Security\Volo.Abp.Security.csproj" /> <ProjectReference Include="..\Volo.Abp.Security\Volo.Abp.Security.csproj" />
</ItemGroup> </ItemGroup>

4
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.Authorization.Permissions;
using Volo.Abp.Localization; using Volo.Abp.Localization;
using Volo.Abp.Modularity; using Volo.Abp.Modularity;
using Volo.Abp.MultiTenancy;
using Volo.Abp.Security; using Volo.Abp.Security;
namespace Volo.Abp.Authorization namespace Volo.Abp.Authorization
{ {
[DependsOn( [DependsOn(
typeof(AbpSecurityModule), typeof(AbpSecurityModule),
typeof(AbpLocalizationAbstractionsModule) typeof(AbpLocalizationAbstractionsModule),
typeof(AbpMultiTenancyModule)
)] )]
public class AbpAuthorizationModule : AbpModule public class AbpAuthorizationModule : AbpModule
{ {

6
framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/IPermissionDefinitionContext.cs

@ -1,5 +1,6 @@
using JetBrains.Annotations; using JetBrains.Annotations;
using Volo.Abp.Localization; using Volo.Abp.Localization;
using Volo.Abp.MultiTenancy;
namespace Volo.Abp.Authorization.Permissions 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. //TODO: Add Get methods to find and modify a permission or group.
PermissionGroupDefinition GetGroupOrNull(string name); 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); void RemoveGroup(string name);
} }

19
framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinition.cs

@ -2,6 +2,7 @@
using System.Collections.Immutable; using System.Collections.Immutable;
using JetBrains.Annotations; using JetBrains.Annotations;
using Volo.Abp.Localization; using Volo.Abp.Localization;
using Volo.Abp.MultiTenancy;
namespace Volo.Abp.Authorization.Permissions namespace Volo.Abp.Authorization.Permissions
{ {
@ -18,6 +19,12 @@ namespace Volo.Abp.Authorization.Permissions
/// </summary> /// </summary>
public PermissionDefinition Parent { get; private set; } public PermissionDefinition Parent { get; private set; }
/// <summary>
/// MultiTenancy side.
/// Default: <see cref="MultiTenancySides.Both"/>
/// </summary>
public MultiTenancySides MultiTenancySide { get; set; }
/// <summary> /// <summary>
/// A list of allowed providers to get/set value of this permission. /// A list of allowed providers to get/set value of this permission.
/// An empty list indicates that all providers are allowed. /// An empty list indicates that all providers are allowed.
@ -55,10 +62,12 @@ namespace Volo.Abp.Authorization.Permissions
protected internal PermissionDefinition( protected internal PermissionDefinition(
[NotNull] string name, [NotNull] string name,
ILocalizableString displayName = null) ILocalizableString displayName = null,
MultiTenancySides multiTenancySide = MultiTenancySides.Both)
{ {
Name = Check.NotNull(name, nameof(name)); Name = Check.NotNull(name, nameof(name));
DisplayName = displayName ?? new FixedLocalizableString(name); DisplayName = displayName ?? new FixedLocalizableString(name);
MultiTenancySide = multiTenancySide;
Properties = new Dictionary<string, object>(); Properties = new Dictionary<string, object>();
Providers = new List<string>(); Providers = new List<string>();
@ -67,9 +76,13 @@ namespace Volo.Abp.Authorization.Permissions
public virtual PermissionDefinition AddChild( public virtual PermissionDefinition AddChild(
[NotNull] string name, [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 Parent = this
}; };

8
framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinitionContext.cs

@ -1,5 +1,6 @@
using System.Collections.Generic; using System.Collections.Generic;
using Volo.Abp.Localization; using Volo.Abp.Localization;
using Volo.Abp.MultiTenancy;
namespace Volo.Abp.Authorization.Permissions namespace Volo.Abp.Authorization.Permissions
{ {
@ -12,7 +13,10 @@ namespace Volo.Abp.Authorization.Permissions
Groups = new Dictionary<string, PermissionGroupDefinition>(); Groups = new Dictionary<string, PermissionGroupDefinition>();
} }
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)); 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}"); 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) public virtual PermissionGroupDefinition GetGroupOrNull(string name)

16
framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionGroupDefinition.cs

@ -1,6 +1,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.Immutable; using System.Collections.Immutable;
using Volo.Abp.Localization; using Volo.Abp.Localization;
using Volo.Abp.MultiTenancy;
namespace Volo.Abp.Authorization.Permissions namespace Volo.Abp.Authorization.Permissions
{ {
@ -20,6 +21,12 @@ namespace Volo.Abp.Authorization.Permissions
} }
private ILocalizableString _displayName; private ILocalizableString _displayName;
/// <summary>
/// MultiTenancy side.
/// Default: <see cref="MultiTenancySides.Both"/>
/// </summary>
public MultiTenancySides MultiTenancySide { get; set; }
public IReadOnlyList<PermissionDefinition> Permissions => _permissions.ToImmutableList(); public IReadOnlyList<PermissionDefinition> Permissions => _permissions.ToImmutableList();
private readonly List<PermissionDefinition> _permissions; private readonly List<PermissionDefinition> _permissions;
@ -39,10 +46,12 @@ namespace Volo.Abp.Authorization.Permissions
protected internal PermissionGroupDefinition( protected internal PermissionGroupDefinition(
string name, string name,
ILocalizableString displayName = null) ILocalizableString displayName = null,
MultiTenancySides multiTenancySide = MultiTenancySides.Both)
{ {
Name = name; Name = name;
DisplayName = displayName ?? new FixedLocalizableString(Name); DisplayName = displayName ?? new FixedLocalizableString(Name);
MultiTenancySide = multiTenancySide;
Properties = new Dictionary<string, object>(); Properties = new Dictionary<string, object>();
_permissions = new List<PermissionDefinition>(); _permissions = new List<PermissionDefinition>();
@ -50,9 +59,10 @@ namespace Volo.Abp.Authorization.Permissions
public virtual PermissionDefinition AddPermission( public virtual PermissionDefinition AddPermission(
string name, 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); _permissions.Add(permission);

2
framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/AbpMultiTenancyModule.cs

@ -6,6 +6,8 @@ using Volo.Abp.Security;
namespace Volo.Abp.MultiTenancy namespace Volo.Abp.MultiTenancy
{ {
//TODO: Create a Volo.Abp.MultiTenancy.Abstractions package?
[DependsOn( [DependsOn(
typeof(AbpDataModule), typeof(AbpDataModule),
typeof(AbpSecurityModule) typeof(AbpSecurityModule)

26
framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenancySides.cs

@ -0,0 +1,26 @@
using System;
namespace Volo.Abp.MultiTenancy
{
/// <summary>
/// Represents sides in a multi tenancy application.
/// </summary>
[Flags]
public enum MultiTenancySides
{
/// <summary>
/// Tenant side.
/// </summary>
Tenant = 1,
/// <summary>
/// Host side.
/// </summary>
Host = 2,
/// <summary>
/// Both sides
/// </summary>
Both = Tenant | Host
}
}

11
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.Authorization.Permissions;
using Volo.Abp.Localization; using Volo.Abp.Localization;
using Volo.Abp.MultiTenancy;
using Volo.Abp.TenantManagement.Localization; using Volo.Abp.TenantManagement.Localization;
namespace Volo.Abp.TenantManagement namespace Volo.Abp.TenantManagement
@ -10,11 +11,11 @@ namespace Volo.Abp.TenantManagement
{ {
var tenantManagementGroup = context.AddGroup(TenantManagementPermissions.GroupName, L("Permission:TenantManagement")); var tenantManagementGroup = context.AddGroup(TenantManagementPermissions.GroupName, L("Permission:TenantManagement"));
var tenantsPermission = tenantManagementGroup.AddPermission(TenantManagementPermissions.Tenants.Default, L("Permission:TenantManagement")); var tenantsPermission = tenantManagementGroup.AddPermission(TenantManagementPermissions.Tenants.Default, L("Permission:TenantManagement"), multiTenancySide: MultiTenancySides.Host);
tenantsPermission.AddChild(TenantManagementPermissions.Tenants.Create, L("Permission:Create")); tenantsPermission.AddChild(TenantManagementPermissions.Tenants.Create, L("Permission:Create"), multiTenancySide: MultiTenancySides.Host);
tenantsPermission.AddChild(TenantManagementPermissions.Tenants.Update, L("Permission:Edit")); tenantsPermission.AddChild(TenantManagementPermissions.Tenants.Update, L("Permission:Edit"), multiTenancySide: MultiTenancySides.Host);
tenantsPermission.AddChild(TenantManagementPermissions.Tenants.Delete, L("Permission:Delete")); tenantsPermission.AddChild(TenantManagementPermissions.Tenants.Delete, L("Permission:Delete"), multiTenancySide: MultiTenancySides.Host);
tenantsPermission.AddChild(TenantManagementPermissions.Tenants.ManageFeatures, L("Permission:ManageFeatures")); tenantsPermission.AddChild(TenantManagementPermissions.Tenants.ManageFeatures, L("Permission:ManageFeatures"), multiTenancySide: MultiTenancySides.Host);
} }
private static LocalizableString L(string name) private static LocalizableString L(string name)

Loading…
Cancel
Save