Browse Source

Added tests for permission system.

pull/208/head
Halil İbrahim Kalkan 9 years ago
parent
commit
84785fa241
  1. 5
      src/Volo.Abp.Permissions/Volo/Abp/Permissions/PermissionDefinition.cs
  2. 1
      src/Volo.Abp.Session/Volo.Abp.Session.csproj
  3. 41
      src/Volo.Abp.Session/Volo/Abp/Permissions/UserSettingManagerExtensions.cs
  4. 7
      src/Volo.Abp.Session/Volo/Abp/Session/AbpSessionModule.cs
  5. 45
      src/Volo.Abp.Session/Volo/Abp/Session/UserPermissionValueProvider.cs
  6. 2
      src/Volo.Abp/Volo/Abp/AbpCommonModule.cs
  7. 15
      test/Volo.Abp.Permissions.Tests/Volo/Abp/Permissions/AbpPermissionTestDataBuilder.cs
  8. 12
      test/Volo.Abp.Permissions.Tests/Volo/Abp/Permissions/PermissionManager_Basic_Tests.cs
  9. 75
      test/Volo.Abp.Permissions.Tests/Volo/Abp/Permissions/PermissionManager_User_Tests.cs
  10. 3
      test/Volo.Abp.Permissions.Tests/Volo/Abp/Permissions/TestPermissionDefinitionProvider.cs
  11. 4
      test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/AbpSettingTestDataBuilder.cs
  12. 2
      test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/SettingManager_User_Tests.cs

5
src/Volo.Abp.Permissions/Volo/Abp/Permissions/PermissionDefinition.cs

@ -22,7 +22,10 @@
public PermissionDefinition CreateChild(string name)
{
return new PermissionDefinition(name) {Parent = this};
return new PermissionDefinition(name)
{
Parent = this
};
}
}
}

1
src/Volo.Abp.Session/Volo.Abp.Session.csproj

@ -15,6 +15,7 @@
<ItemGroup>
<ProjectReference Include="..\Volo.Abp.Core\Volo.Abp.Core.csproj" />
<ProjectReference Include="..\Volo.Abp.Permissions\Volo.Abp.Permissions.csproj" />
<ProjectReference Include="..\Volo.Abp.Security\Volo.Abp.Security.csproj" />
<ProjectReference Include="..\Volo.Abp.Settings\Volo.Abp.Settings.csproj" />
</ItemGroup>

41
src/Volo.Abp.Session/Volo/Abp/Permissions/UserSettingManagerExtensions.cs

@ -0,0 +1,41 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using JetBrains.Annotations;
using Volo.Abp.Session;
namespace Volo.Abp.Permissions
{
public static class UserPermissionManagerExtensions
{
public static Task<bool> IsGrantedForUserAsync(this IPermissionManager permissionManager, [NotNull] string name, Guid userId, bool fallback = true)
{
return permissionManager.IsGrantedAsync(name, UserPermissionValueProvider.ProviderName, userId.ToString(), fallback);
}
public static Task<bool> IsGrantedForCurrentUserAsync(this IPermissionManager permissionManager, [NotNull] string name, bool fallback = true)
{
return permissionManager.IsGrantedAsync(name, UserPermissionValueProvider.ProviderName, null, fallback);
}
public static Task<List<PermissionGrantInfo>> GetAllForUserAsync(this IPermissionManager permissionManager, Guid userId, bool fallback = true)
{
return permissionManager.GetAllAsync(UserPermissionValueProvider.ProviderName, userId.ToString(), fallback);
}
public static Task<List<PermissionGrantInfo>> GetAllForCurrentUserAsync(this IPermissionManager permissionManager, bool fallback = true)
{
return permissionManager.GetAllAsync(UserPermissionValueProvider.ProviderName, null, fallback);
}
public static Task SetForUserAsync(this IPermissionManager permissionManager, Guid userId, [NotNull] string name, bool? isGranted, bool forceToSet = false)
{
return permissionManager.SetAsync(name, isGranted, UserPermissionValueProvider.ProviderName, userId.ToString(), forceToSet);
}
public static Task SetForCurrentUserAsync(this IPermissionManager permissionManager, [NotNull] string name, bool? isGranted, bool forceToSet = false)
{
return permissionManager.SetAsync(name, isGranted, UserPermissionValueProvider.ProviderName, null, forceToSet);
}
}
}

7
src/Volo.Abp.Session/Volo/Abp/Session/AbpSessionModule.cs

@ -1,5 +1,6 @@
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Modularity;
using Volo.Abp.Permissions;
using Volo.Abp.Security;
using Volo.Abp.Settings;
@ -7,6 +8,7 @@ namespace Volo.Abp.Session
{
[DependsOn(typeof(AbpSecurityModule))]
[DependsOn(typeof(AbpSettingsModule))]
[DependsOn(typeof(AbpPermissionsModule))]
public class AbpSessionModule : AbpModule
{
public override void ConfigureServices(IServiceCollection services)
@ -16,6 +18,11 @@ namespace Volo.Abp.Session
options.ValueProviders.Add<UserSettingValueProvider>();
});
services.Configure<PermissionOptions>(options =>
{
options.ValueProviders.Add<UserPermissionValueProvider>();
});
services.AddAssemblyOf<AbpSessionModule>();
}
}

45
src/Volo.Abp.Session/Volo/Abp/Session/UserPermissionValueProvider.cs

@ -0,0 +1,45 @@
using System.Threading.Tasks;
using Volo.Abp.Permissions;
namespace Volo.Abp.Session
{
public class UserPermissionValueProvider : PermissionValueProvider
{
public const string ProviderName = "User";
public override string Name => ProviderName;
protected ICurrentUser CurrentUser { get; }
public UserPermissionValueProvider(IPermissionStore permissionStore, ICurrentUser currentUser)
: base(permissionStore)
{
CurrentUser = currentUser;
}
public override async Task<bool?> IsGrantedAsync(PermissionDefinition permission, string providerKey)
{
if (providerKey == null)
{
if (CurrentUser.Id == null)
{
return null;
}
providerKey = CurrentUser.Id.ToString();
}
return await PermissionStore.IsGrantedAsync(permission.Name, Name, providerKey);
}
public override Task SetAsync(PermissionDefinition permission, bool isGranted, string providerKey)
{
return PermissionStore.SetAsync(permission.Name, isGranted, Name, providerKey);
}
public override Task ClearAsync(PermissionDefinition permission, string providerKey)
{
return PermissionStore.DeleteAsync(permission.Name, Name, providerKey);
}
}
}

2
src/Volo.Abp/Volo/Abp/AbpCommonModule.cs

@ -7,6 +7,7 @@ using Volo.Abp.Localization;
using Volo.Abp.Modularity;
using Volo.Abp.MultiTenancy;
using Volo.Abp.ObjectMapping;
using Volo.Abp.Permissions;
using Volo.Abp.Security;
using Volo.Abp.Session;
using Volo.Abp.Settings;
@ -22,6 +23,7 @@ namespace Volo.Abp
[DependsOn(typeof(AbpSecurityModule))]
[DependsOn(typeof(AbpSessionModule))]
[DependsOn(typeof(AbpSettingsModule))]
[DependsOn(typeof(AbpPermissionsModule))]
[DependsOn(typeof(AbpDataModule))]
[DependsOn(typeof(AbpJsonModule))]
[DependsOn(typeof(AbpVirtualFileSystemModule))]

15
test/Volo.Abp.Permissions.Tests/Volo/Abp/Permissions/AbpPermissionTestDataBuilder.cs

@ -1,13 +1,14 @@
using System;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Guids;
using Volo.Abp.Session;
namespace Volo.Abp.Permissions
{
public class AbpPermissionTestDataBuilder : ITransientDependency
{
public static Guid User1Id = Guid.NewGuid();
public static Guid User2Id = Guid.NewGuid();
public static Guid User1Id { get; } = Guid.NewGuid();
public static Guid User2Id { get; } = Guid.NewGuid();
private readonly IPermissionGrantRepository _permissionGrantRepository;
private readonly IGuidGenerator _guidGenerator;
@ -20,7 +21,15 @@ namespace Volo.Abp.Permissions
public void Build()
{
_permissionGrantRepository.Insert(
new PermissionGrant(
_guidGenerator.Create(),
"MyPermission1",
true,
UserPermissionValueProvider.ProviderName,
User1Id.ToString()
)
);
}
}
}

12
test/Volo.Abp.Permissions.Tests/Volo/Abp/Permissions/PermissionManager_Basic_Tests.cs

@ -14,9 +14,17 @@ namespace Volo.Abp.Permissions
}
[Fact]
public async Task Test1()
public async Task Should_Throw_Exception_If_Permission_Is_Not_Defined()
{
_permissionManager.ShouldNotBeNull();
await Assert.ThrowsAsync<AbpException>(async () =>
await _permissionManager.IsGrantedAsync("UndefinedPermissionName")
);
}
[Fact]
public async Task Should_Return_False_As_Default_For_Any_Permission()
{
(await _permissionManager.IsGrantedAsync("MyPermission1")).ShouldBeFalse();
}
}
}

75
test/Volo.Abp.Permissions.Tests/Volo/Abp/Permissions/PermissionManager_User_Tests.cs

@ -0,0 +1,75 @@
using System;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using NSubstitute;
using Shouldly;
using Volo.Abp.Session;
using Xunit;
namespace Volo.Abp.Permissions
{
public class PermissionManager_User_Tests : AbpPermissionTestBase
{
private readonly IPermissionManager _permissionManager;
private Guid? _currentUserId;
public PermissionManager_User_Tests()
{
_permissionManager = GetRequiredService<IPermissionManager>();
}
protected override void AfterAddApplication(IServiceCollection services)
{
var currentUser = Substitute.For<ICurrentUser>();
currentUser.Id.Returns(ci => _currentUserId);
services.AddSingleton(currentUser);
}
[Fact]
public async Task Should_Return_True_For_Granted_User()
{
(await _permissionManager.IsGrantedForUserAsync(
"MyPermission1",
AbpPermissionTestDataBuilder.User1Id
)).ShouldBeTrue();
}
[Fact]
public async Task Should_Return_True_For_Granted_Current_User()
{
_currentUserId = AbpPermissionTestDataBuilder.User1Id;
(await _permissionManager.IsGrantedForCurrentUserAsync(
"MyPermission1"
)).ShouldBeTrue();
}
[Fact]
public async Task Should_Return_False_For_Non_Granted_User()
{
(await _permissionManager.IsGrantedForUserAsync(
"MyPermission1",
AbpPermissionTestDataBuilder.User2Id
)).ShouldBeFalse();
}
[Fact]
public async Task Should_Return_False_For_Non_Granted_Current_User()
{
_currentUserId = AbpPermissionTestDataBuilder.User2Id;
(await _permissionManager.IsGrantedForCurrentUserAsync(
"MyPermission1"
)).ShouldBeFalse();
}
[Fact]
public async Task Should_Return_False_For_Current_User_If_Anonymous()
{
(await _permissionManager.IsGrantedForCurrentUserAsync(
"MyPermission1"
)).ShouldBeFalse();
}
}
}

3
test/Volo.Abp.Permissions.Tests/Volo/Abp/Permissions/TestPermissionDefinitionProvider.cs

@ -5,9 +5,8 @@
public override void Define(IPermissionDefinitionContext context)
{
var myPermission1 = new PermissionDefinition("MyPermission1");
var myPermission2 = new PermissionDefinition("MyPermission2");
context.Add(myPermission1, myPermission2);
context.Add(myPermission1);
}
}
}

4
test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/AbpSettingTestDataBuilder.cs

@ -7,8 +7,8 @@ namespace Volo.Abp.Settings
{
public class AbpSettingTestDataBuilder : ITransientDependency
{
public static Guid User1Id = Guid.NewGuid();
public static Guid User2Id = Guid.NewGuid();
public static Guid User1Id { get; } = Guid.NewGuid();
public static Guid User2Id { get; } = Guid.NewGuid();
private readonly ISettingRepository _settingRepository;
private readonly IGuidGenerator _guidGenerator;

2
test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/SettingManager_User_Tests.cs

@ -11,7 +11,7 @@ namespace Volo.Abp.Settings
{
public class SettingManager_User_Tests: AbpSettingsTestBase
{
private Guid _currentUserId;
private Guid? _currentUserId;
private readonly ISettingManager _settingManager;

Loading…
Cancel
Save