Skip to content

Commit 74280c4

Browse files
Add extensions methods (#4)
* add test grain * import missing namespace * move orleans extension methods to shared project from server project * add tests for grain authorized with role * add test when grain with role and method without * add more role tests * extensions * add method description for session grain * add description for extension methods Co-authored-by: ksemenenko <mail@ksemenenko.com>
1 parent 00c3403 commit 74280c4

File tree

19 files changed

+333
-15
lines changed

19 files changed

+333
-15
lines changed

Directory.Build.props

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717
<RepositoryUrl>https://github.com/managedcode/Orleans.Identity</RepositoryUrl>
1818
<PackageProjectUrl>https://github.com/managedcode/Orleans.Identity</PackageProjectUrl>
1919
<Product>Managed Code - Orleans Identity</Product>
20-
<Version>1.0.0.0</Version>
21-
<PackageVersion>1.0.0.0</PackageVersion>
20+
<Version>7.0.0</Version>
21+
<PackageVersion>7.0.0</PackageVersion>
2222

2323
</PropertyGroup>
2424
<PropertyGroup Condition="'$(GITHUB_ACTIONS)' == 'true'">

ManagedCode.Orleans.Identity.Client/Extensions/AuthenticationHandlerExtensions.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,24 @@ namespace ManagedCode.Orleans.Identity.Client.Extensions;
1010

1111
public static class AuthenticationHandlerExtensions
1212
{
13+
/// <summary>
14+
/// Use Orleans.Identity authentication as default authentication scheme
15+
/// </summary>
16+
/// <param name="services"></param>
17+
/// <param name="sessionOption">Options for working with session</param>
1318
public static void AddOrleansIdentity(this IServiceCollection services, Action<SessionOption> sessionOption)
1419
{
1520
var option = new SessionOption();
1621
sessionOption?.Invoke(option);
1722
AddOrleansIdentity(services, option);
1823
}
1924

20-
public static void AddOrleansIdentity(this IServiceCollection services, SessionOption sessionOption = null)
25+
/// <summary>
26+
/// Use Orleans.Identity authentication as default authentication scheme
27+
/// </summary>
28+
/// <param name="services"></param>
29+
/// <param name="sessionOption">Options for working with session</param>
30+
public static void AddOrleansIdentity(this IServiceCollection services, SessionOption? sessionOption = null)
2131
{
2232
sessionOption ??= new SessionOption();
2333

ManagedCode.Orleans.Identity.Client/Extensions/OrleansContextMiddlewareExtensions.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,21 @@ namespace ManagedCode.Orleans.Identity.Client.Extensions;
55

66
public static class OrleansContextMiddlewareExtensions
77
{
8+
/// <summary>
9+
/// Use middleware to set claims and session id for request to cluster
10+
/// </summary>
11+
/// <param name="builder"></param>
12+
/// <returns></returns>
813
public static IApplicationBuilder UseOrleansIdentity(this IApplicationBuilder builder)
914
{
1015
return builder.UseMiddleware<OrleansContextMiddleware>();
1116
}
1217

18+
/// <summary>
19+
/// Use middleware to set claims and session id for request to cluster, this method includes <c>UseAuthentication</c> and <c>UseAuthorization</c> middlewares
20+
/// </summary>
21+
/// <param name="builder"></param>
22+
/// <returns></returns>
1323
public static IApplicationBuilder UseAuthenticationAndOrleansIdentity(this IApplicationBuilder builder)
1424
{
1525
builder.UseAuthentication();

ManagedCode.Orleans.Identity.Client/Middlewares/OrleansContextMiddleware.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Threading.Tasks;
2+
using ManagedCode.Orleans.Identity.Extensions;
23
using Microsoft.AspNetCore.Http;
34

45
namespace ManagedCode.Orleans.Identity.Client.Middlewares;

ManagedCode.Orleans.Identity.Client/Middlewares/OrleansIdentityAuthenticationHandler.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System.Text.Encodings.Web;
44
using System.Threading.Tasks;
55
using ManagedCode.Orleans.Identity.Constants;
6+
using ManagedCode.Orleans.Identity.Extensions;
67
using ManagedCode.Orleans.Identity.Interfaces;
78
using Microsoft.AspNetCore.Authentication;
89
using Microsoft.Extensions.Logging;
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
using ManagedCode.Orleans.Identity.Server.GrainCallFilter;
2+
using Orleans.Hosting;
3+
4+
namespace ManagedCode.Orleans.Identity.Server.Extensions;
5+
6+
public static class SiloBuilderExtensions
7+
{
8+
/// <summary>
9+
/// Add incoming grain filter for authorization
10+
/// </summary>
11+
/// <param name="siloBuilder"></param>
12+
/// <returns></returns>
13+
public static ISiloBuilder AddOrleansIdentity(this ISiloBuilder siloBuilder)
14+
{
15+
siloBuilder.AddIncomingGrainCallFilter<GrainAuthorizationIncomingFilter>();
16+
return siloBuilder;
17+
}
18+
}

ManagedCode.Orleans.Identity.Server/GrainCallFilter/GrainAuthorizationIncomingFilter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
using System.Linq;
44
using System.Reflection;
55
using System.Threading.Tasks;
6+
using ManagedCode.Orleans.Identity.Extensions;
67
using ManagedCode.Orleans.Identity.Interfaces;
7-
using ManagedCode.Orleans.Identity.Server.Extensions;
88
using Microsoft.AspNetCore.Authorization;
99
using Orleans;
1010

ManagedCode.Orleans.Identity.Server/Grains/SessionGrain.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,8 @@ public async Task<Result<SessionModel>> CreateAsync(CreateSessionModel model)
4545
{
4646
var date = DateTime.UtcNow;
4747

48-
_sessionState.State = new SessionModel
48+
_sessionState.State = new SessionModel(this.GetPrimaryKeyString())
4949
{
50-
Id = this.GetPrimaryKeyString(),
5150
IsActive = true,
5251
UserGrainId = model.UserGrainId,
5352
UserData = model.UserData ?? new Dictionary<string, HashSet<string>>(),
@@ -275,9 +274,8 @@ public override async Task OnDeactivateAsync(DeactivationReason reason, Cancella
275274

276275
private SessionModel GetSessionModel()
277276
{
278-
return new SessionModel
277+
return new SessionModel(_sessionState.State.Id)
279278
{
280-
Id = _sessionState.State.Id,
281279
IsActive = _sessionState.State.IsActive,
282280
ClosedDate = _sessionState.State.ClosedDate,
283281
CreatedDate = _sessionState.State.CreatedDate,
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 IModeratorGrain : IGrainWithStringKey
4+
{
5+
Task<string> GetInfo();
6+
Task<string> GetModerators();
7+
Task<string> GetPublicInformation();
8+
}
9+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
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+
[Authorize(Roles = TestRoles.MODERATOR)]
8+
public class ModeratorGrain : Grain, IModeratorGrain
9+
{
10+
public Task<string> GetInfo()
11+
{
12+
return Task.FromResult("info");
13+
}
14+
15+
[Authorize]
16+
public Task<string> GetModerators()
17+
{
18+
return Task.FromResult("moderators");
19+
}
20+
21+
[AllowAnonymous]
22+
public Task<string> GetPublicInformation()
23+
{
24+
return Task.FromResult("public info");
25+
}
26+
}
27+
}

0 commit comments

Comments
 (0)