Skip to content

Commit 4d2d874

Browse files
authored
Hashset claims (#3)
* replace dictionary<string, string> with dictionary<string, HashSet<string>> * update value if record exists * add method for updating list of user data * add extension method * separate AddOrUpdate method to 3 methods * change grain methods and grain tests * tests for AddProperty method * tests for replace property with list of properties * add remove value from property test * init userdata in CreateSessionModel * cleanup * one more cleanup * more cleanup * add tests for RemoveValueFromProperty method * add more tests for RemoveValueFromProperty * add AddValueToProperty tests * tests for ClearUserData method * get back tests for controller * get back more controller tests * add important todo * add roles to claims as separated claims * add tests for grain filter * uncomment tests for controller * add new role * change older tests * add method for adding claims * parse each claim in seperate claim * register incoming filter in test app * set session id in claims * add test filter * check if session exists if grain/method is authorized * add tests for grain filter * add tests for grain when roles are required * add test when grain method has no attribute * add tests when grain is not authorized * add test when grain method has no attribute and user is authorized * remove test filter
1 parent 69afb5b commit 4d2d874

47 files changed

Lines changed: 1637 additions & 726 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
namespace ManagedCode.Orleans.Identity.Tests.Cluster.Grains.Interfaces;
2+
3+
public interface IPublicGrain : IGrainWithStringKey
4+
{
5+
Task<string> CommonMethod();
6+
Task<string> AuthorizedMethod();
7+
Task<string> AdminOnly();
8+
Task<string> ModeratorOnly();
9+
}

ManagedCode.Orleans.Identity.Tests/Cluster/Grains/Interfaces/IUserGrain.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,8 @@ namespace ManagedCode.Orleans.Identity.Tests.Cluster.Grains.Interfaces;
33
public interface IUserGrain : IGrainWithStringKey
44
{
55
Task<string> GetUser();
6+
Task<string> BanUser();
7+
Task<string> GetPublicInfo();
8+
Task<string> ModifyUser();
9+
Task<string> AddToList();
610
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
using ManagedCode.Orleans.Identity.Tests.Cluster.Grains.Interfaces;
2+
using ManagedCode.Orleans.Identity.Tests.Constants;
3+
using Microsoft.AspNetCore.Authorization;
4+
5+
namespace ManagedCode.Orleans.Identity.Tests.Cluster.Grains;
6+
7+
public class PublicGrain : Grain, IPublicGrain
8+
{
9+
public Task<string> CommonMethod()
10+
{
11+
return Task.FromResult("common");
12+
}
13+
14+
[Authorize]
15+
public Task<string> AuthorizedMethod()
16+
{
17+
return Task.FromResult("authorized");
18+
}
19+
20+
[Authorize(Roles = TestRoles.ADMIN)]
21+
public Task<string> AdminOnly()
22+
{
23+
return Task.FromResult("admin only");
24+
}
25+
26+
[Authorize(Roles = TestRoles.MODERATOR)]
27+
public Task<string> ModeratorOnly()
28+
{
29+
return Task.FromResult("moderator only");
30+
}
31+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,38 @@
11
using ManagedCode.Orleans.Identity.Tests.Cluster.Grains.Interfaces;
2+
using ManagedCode.Orleans.Identity.Tests.Constants;
23
using Microsoft.AspNetCore.Authorization;
34

45
namespace ManagedCode.Orleans.Identity.Tests.Cluster.Grains;
56

67
[Authorize]
78
public class UserGrain : Grain, IUserGrain
89
{
10+
[Authorize]
911
public Task<string> GetUser()
1012
{
1113
return Task.FromResult("user");
1214
}
15+
16+
[Authorize(Roles = TestRoles.ADMIN)]
17+
public Task<string> BanUser()
18+
{
19+
return Task.FromResult("User is banned");
20+
}
21+
22+
[AllowAnonymous]
23+
public Task<string> GetPublicInfo()
24+
{
25+
return Task.FromResult("public info");
26+
}
27+
28+
[Authorize(Roles = TestRoles.MODERATOR)]
29+
public Task<string> ModifyUser()
30+
{
31+
return Task.FromResult("user modified");
32+
}
33+
34+
public Task<string> AddToList()
35+
{
36+
return Task.FromResult("add to list");
37+
}
1338
}

ManagedCode.Orleans.Identity.Tests/Cluster/TestClientConfigurations.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
1-
using ManagedCode.Communication;
2-
using ManagedCode.Orleans.Identity;
31
using Microsoft.Extensions.Configuration;
42
using Orleans.TestingHost;
53

6-
74
namespace ManagedCode.Orleans.Identity.Tests.Cluster;
85

96
public class TestClientConfigurations : IClientBuilderConfigurator

ManagedCode.Orleans.Identity.Tests/Cluster/TestClusterApplication.cs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public class TestClusterApplication : WebApplicationFactory<HttpHostProgram>, IC
1212
{
1313
public TestClusterApplication()
1414
{
15-
TestClusterBuilder builder = new TestClusterBuilder();
15+
var builder = new TestClusterBuilder();
1616
builder.AddSiloBuilderConfigurator<TestSiloConfigurations>();
1717
builder.AddClientBuilderConfigurator<TestClientConfigurations>();
1818
Cluster = builder.Build();
@@ -28,16 +28,13 @@ protected override IHost CreateHost(IHostBuilder builder)
2828
Environment.SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "Development");
2929
}
3030

31-
builder.ConfigureServices(s =>
32-
{
33-
s.AddSingleton(Cluster.Client);
34-
});
31+
builder.ConfigureServices(s => { s.AddSingleton(Cluster.Client); });
3532
return base.CreateHost(builder);
3633
}
3734

3835
public HubConnection CreateSignalRClient(string hubUrl, Action<HubConnectionBuilder>? configure = null)
3936
{
40-
HubConnectionBuilder builder = new HubConnectionBuilder();
37+
var builder = new HubConnectionBuilder();
4138
configure?.Invoke(builder);
4239
return builder.WithUrl(new Uri(Server.BaseAddress, hubUrl), o => o.HttpMessageHandlerFactory = _ => Server.CreateHandler())
4340
.Build();

ManagedCode.Orleans.Identity.Tests/Cluster/TestSiloConfigurations.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using ManagedCode.Orleans.Identity.Options;
1+
using ManagedCode.Orleans.Identity.GrainCallFilter;
22
using ManagedCode.Orleans.Identity.Shared.Constants;
33
using Microsoft.Extensions.DependencyInjection;
44
using Orleans.Serialization;
@@ -10,17 +10,18 @@ public class TestSiloConfigurations : ISiloConfigurator
1010
{
1111
public void Configure(ISiloBuilder siloBuilder)
1212
{
13-
siloBuilder.Services.AddSerializer(serializerBuilder =>
14-
{
15-
serializerBuilder.AddJsonSerializer();
16-
});
13+
siloBuilder.Services.AddSerializer(serializerBuilder => { serializerBuilder.AddJsonSerializer(); });
14+
15+
// TODO: Move to the extension method
16+
siloBuilder.AddIncomingGrainCallFilter<GrainAuthorizationIncomingFilter>();
17+
//siloBuilder.AddIncomingGrainCallFilter<GrainAuthorizationFilter>();
1718

1819
// For test purpose
1920
siloBuilder.AddMemoryGrainStorage(OrleansIdentityConstants.SESSION_STORAGE_NAME);
2021

2122
siloBuilder.ConfigureServices(services =>
2223
{
23-
services.AddSingleton<SessionOption>(TestSiloOptions.SessionOption);
24+
services.AddSingleton(TestSiloOptions.SessionOption);
2425
// services.AddGrpcOrleansScaling();
2526
// services.AddApiOrleansScaling();
2627
});

ManagedCode.Orleans.Identity.Tests/Cluster/TestSiloOptions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ namespace ManagedCode.Orleans.Identity.Tests.Cluster;
44

55
public static class TestSiloOptions
66
{
7-
public static SessionOption SessionOption { get; } = new SessionOption();
7+
public static SessionOption SessionOption { get; } = new();
88
}
Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,27 @@
1-
namespace ManagedCode.Orleans.Identity.Tests.Constants
1+
namespace ManagedCode.Orleans.Identity.Tests.Constants;
2+
3+
public static class TestControllerRoutes
24
{
3-
public static class TestControllerRoutes
4-
{
5-
public const string ANONYMOUS_ROUTE = "/anonymous";
6-
public const string AUTHORIZE_ROUTE = "/authorize";
7-
public const string ADMIN_ROUTE = "/admin";
8-
public const string MODERATOR_ROUTE = "/moderator";
9-
public const string COMMON_ROUTE = "/common";
5+
public const string ANONYMOUS_ROUTE = "/anonymous";
6+
public const string AUTHORIZE_ROUTE = "/authorize";
7+
public const string ADMIN_ROUTE = "/admin";
8+
public const string MODERATOR_ROUTE = "/moderator";
9+
public const string COMMON_ROUTE = "/common";
10+
11+
public const string ADMIN_CONTROLLER_DEFAULT_ROUTE = "/adminController";
12+
public const string ADMIN_CONTROLLER_ADMINS_LIST = "/adminController/adminsList";
13+
public const string ADMIN_CONTROLLER_ADMIN_GET_ADMIN = "/adminController/getAdmin";
14+
public const string ADMIN_CONTROLLER_EDIT_ADMINS = "/adminController/editAdmin";
1015

11-
public const string ADMIN_CONTROLLER_DEFAULT_ROUTE = "/adminController";
12-
public const string ADMIN_CONTROLLER_ADMINS_LIST = "/adminController/adminsList";
13-
public const string ADMIN_CONTROLLER_ADMIN_GET_ADMIN = "/adminController/getAdmin";
16+
public const string USER_CONTROLLER_DEFAULT_ROUTE = "/userController";
17+
public const string USER_CONTROLLER_ANONYMOUS_ROUTE = "/userController/anonymous";
18+
public const string USER_CONTROLLER_BAN_ROUTE = "/userController/ban";
19+
public const string USER_CONTROLLER_PUBLIC_INFO_ROUTE = "/userController/publicInfo";
20+
public const string USER_CONTROLLER_MODIFY = "/userController/modify";
21+
public const string USER_CONTROLLER_ADD_TO_LIST = "/userController/addToList";
1422

15-
public const string USER_CONTROLLER_DEFAULT_ROUTE = "/userController";
16-
public const string USER_CONTROLLER_ANONYMOUS_ROUTE = "/userController/anonymous";
17-
}
18-
}
23+
public const string PUBLIC_CONTROLLER_DEFAULT_ROUTE = "/publicController";
24+
public const string PUBLIC_CONTROLLER_AUTH_METHOD_ROUTE = "/publicController/authorizedMethod";
25+
public const string PUBLIC_CONTROLLER_ADMIN_METHOD_ROUTE = "/publicController/adminMethod";
26+
public const string PUBLIC_CONTROLLER_MODERATOR_METHOD_ROUTE = "/publicController/moderatorMethod";
27+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
namespace ManagedCode.Orleans.Identity.Tests.Constants
2+
{
3+
public static class TestRoles
4+
{
5+
public const string ADMIN = "admin";
6+
public const string MODERATOR = "moderator";
7+
public const string USER = "user";
8+
}
9+
}

0 commit comments

Comments
 (0)