Skip to content

Commit 1682bdb

Browse files
authored
Obsolete SiteOwner claim and fix OpenId (#17089)
1 parent bb7359e commit 1682bdb

File tree

7 files changed

+30
-14
lines changed

7 files changed

+30
-14
lines changed

src/OrchardCore.Modules/OrchardCore.Roles/Services/RoleClaimsProvider.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,17 +33,19 @@ public async Task GenerateAsync(IUser user, ClaimsIdentity claims)
3333
return;
3434
}
3535

36+
var roleNames = await _userManager.GetRolesAsync(user);
37+
3638
var isAdministrator = false;
3739

38-
if (await _userManager.IsInRoleAsync(user, await _systemRoleNameProvider.GetAdminRoleAsync()))
40+
foreach (var roleName in roleNames)
3941
{
40-
claims.AddClaim(StandardClaims.SiteOwner);
41-
42-
isAdministrator = true;
42+
if (await _systemRoleNameProvider.IsAdminRoleAsync(roleName))
43+
{
44+
isAdministrator = true;
45+
break;
46+
}
4347
}
4448

45-
var roleNames = await _userManager.GetRolesAsync(user);
46-
4749
foreach (var roleName in roleNames)
4850
{
4951
claims.AddClaim(new Claim(_identityOptions.ClaimsIdentity.RoleClaimType, roleName));

src/OrchardCore.Modules/OrchardCore.Settings/OrchardCore.Settings.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
<ProjectReference Include="..\..\OrchardCore\OrchardCore.Navigation.Core\OrchardCore.Navigation.Core.csproj" />
2424
<ProjectReference Include="..\..\OrchardCore\OrchardCore.Liquid.Abstractions\OrchardCore.Liquid.Abstractions.csproj" />
2525
<ProjectReference Include="..\..\OrchardCore\OrchardCore.Recipes.Abstractions\OrchardCore.Recipes.Abstractions.csproj" />
26+
<ProjectReference Include="..\..\OrchardCore\OrchardCore.Roles.Core\OrchardCore.Roles.Core.csproj" />
2627
<ProjectReference Include="..\..\OrchardCore\OrchardCore.Settings.Core\OrchardCore.Settings.Core.csproj" />
2728
<ProjectReference Include="..\..\OrchardCore\OrchardCore.Setup.Abstractions\OrchardCore.Setup.Abstractions.csproj" />
2829
</ItemGroup>

src/OrchardCore.Modules/OrchardCore.Settings/Services/SuperUserHandler.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Security.Claims;
22
using Microsoft.AspNetCore.Authorization;
3+
using OrchardCore.Roles;
34
using OrchardCore.Security;
45

56
namespace OrchardCore.Settings.Services;
@@ -10,10 +11,14 @@ namespace OrchardCore.Settings.Services;
1011
public class SuperUserHandler : IAuthorizationHandler
1112
{
1213
private readonly ISiteService _siteService;
14+
private readonly ISystemRoleNameProvider _systemRoleNameProvider;
1315

14-
public SuperUserHandler(ISiteService siteService)
16+
public SuperUserHandler(
17+
ISiteService siteService,
18+
ISystemRoleNameProvider systemRoleNameProvider)
1519
{
1620
_siteService = siteService;
21+
_systemRoleNameProvider = systemRoleNameProvider;
1722
}
1823

1924
public async Task HandleAsync(AuthorizationHandlerContext context)
@@ -25,7 +30,7 @@ public async Task HandleAsync(AuthorizationHandlerContext context)
2530
return;
2631
}
2732

28-
if (user.HasClaim(StandardClaims.SiteOwner.Type, StandardClaims.SiteOwner.Value))
33+
if (user.IsInRole(await _systemRoleNameProvider.GetAdminRoleAsync()))
2934
{
3035
SucceedAllRequirements(context);
3136

src/OrchardCore.Modules/OrchardCore.Settings/Startup.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
using OrchardCore.Recipes;
1212
using OrchardCore.Recipes.Services;
1313
using OrchardCore.ResourceManagement;
14+
using OrchardCore.Roles;
1415
using OrchardCore.Security.Permissions;
1516
using OrchardCore.Settings.Deployment;
1617
using OrchardCore.Settings.Drivers;
@@ -65,7 +66,9 @@ public override void ConfigureServices(IServiceCollection services)
6566

6667
services.AddScoped<ISetupEventHandler, SetupEventHandler>();
6768
services.AddPermissionProvider<Permissions>();
68-
services.AddScoped<IAuthorizationHandler, SuperUserHandler>();
69+
70+
services.AddRolesCoreServices()
71+
.AddScoped<IAuthorizationHandler, SuperUserHandler>();
6972

7073
services.AddRecipeExecutionStep<SettingsStep>();
7174
services.AddSingleton<ISiteService, SiteService>();

src/OrchardCore.Modules/OrchardCore.Users/Liquid/UserFilters.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,20 @@
55
using Microsoft.Extensions.DependencyInjection;
66
using Microsoft.Extensions.Logging;
77
using OrchardCore.Liquid;
8-
using OrchardCore.Security;
8+
using OrchardCore.Roles;
99
using OrchardCore.Security.Permissions;
1010

1111
namespace OrchardCore.Users.Liquid;
1212

1313
public static class UserFilters
1414
{
15-
public static ValueTask<FluidValue> HasClaim(FluidValue input, FilterArguments arguments, TemplateContext ctx)
15+
public static async ValueTask<FluidValue> HasClaim(FluidValue input, FilterArguments arguments, TemplateContext ctx)
1616
{
1717
if (input.ToObjectValue() is LiquidUserAccessor)
1818
{
1919
var context = (LiquidTemplateContext)ctx;
2020
var httpContextAccessor = context.Services.GetRequiredService<IHttpContextAccessor>();
21+
var systemRoleNameProvider = context.Services.GetRequiredService<ISystemRoleNameProvider>();
2122

2223
var user = httpContextAccessor.HttpContext?.User;
2324
if (user != null)
@@ -45,7 +46,7 @@ public static ValueTask<FluidValue> HasClaim(FluidValue input, FilterArguments a
4546
// {% assign isAuthorized = User | has_permission: "AccessAdminPanel" %}
4647
// ```
4748
if (string.Equals(claimType, Permission.ClaimType, StringComparison.OrdinalIgnoreCase) &&
48-
user.HasClaim(StandardClaims.SiteOwner.Type, StandardClaims.SiteOwner.Value))
49+
user.IsInRole(await systemRoleNameProvider.GetAdminRoleAsync()))
4950
{
5051
var logger = context.Services.GetRequiredService<ILogger<Startup>>();
5152

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System.Security.Claims;
1+
using System.Security.Claims;
22

33
namespace OrchardCore.Security;
44

@@ -7,5 +7,6 @@ public static class StandardClaims
77
/// <summary>
88
/// This claim is assigned by the system during the login process if the user belongs to the Administrator role.
99
/// </summary>
10+
[Obsolete("This claim is obsolete and will be removed in the next major version.")]
1011
public static readonly Claim SiteOwner = new("SiteOwner", "true");
1112
}
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
using Microsoft.Extensions.DependencyInjection;
2+
using Microsoft.Extensions.DependencyInjection.Extensions;
23

34
namespace OrchardCore.Roles;
45

56
public static class ServiceCollectionExtensions
67
{
78
public static IServiceCollection AddRolesCoreServices(this IServiceCollection services)
89
{
9-
return services.AddSingleton<ISystemRoleNameProvider, DefaultSystemRoleNameProvider>();
10+
services.TryAddSingleton<ISystemRoleNameProvider, DefaultSystemRoleNameProvider>();
11+
12+
return services;
1013
}
1114
}

0 commit comments

Comments
 (0)