-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathRoleExtensions.cs
57 lines (50 loc) · 2.08 KB
/
RoleExtensions.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
using MediatR;
using Microsoft.AspNetCore.Identity;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using ZauberCMS.Core.Data;
using ZauberCMS.Core.Membership.Models;
using ZauberCMS.Core.Settings;
using ZauberCMS.Core.Shared.Models;
namespace ZauberCMS.Core.Extensions;
public static class RoleExtensions
{
public static async Task<AuthenticationResult> AssignStartingRoleAsync(
this UserManager<User> userManager,
RoleManager<Role> roleManager,
ILogger logger,
ZauberDbContext dbContext,
IOptions<ZauberSettings> settings,
IMediator mediator,
User newUser,
AuthenticationResult loginResult)
{
// Log new account creation
logger.LogInformation("{RequestUsername} created a new account", newUser.UserName);
var globalSettings = await mediator.GetGlobalSettings();
// Determine starting role name
var startingRoleName = settings.Value.NewUserStartingRole ?? Constants.Roles.StandardRoleName;
if (dbContext.Users.Count() == 1 ||
globalSettings.AdminEmailAddresses.Count != 0 &&
globalSettings.AdminEmailAddresses.Contains(newUser.Email!))
{
startingRoleName = Constants.Roles.AdminRoleName;
}
// Check if the role exists
var roleExist = await roleManager.RoleExistsAsync(startingRoleName);
if (!roleExist)
{
await roleManager.CreateAsync(new Role { Name = startingRoleName });
}
// Add user to role
var addToRoleResult = await userManager.AddToRoleAsync(newUser, startingRoleName);
if (addToRoleResult.Succeeded == false)
{
addToRoleResult.LogErrors();
loginResult.AddMessage(addToRoleResult.ToErrorsList(), ResultMessageType.Error);
loginResult.Success = false;
return loginResult;
}
return loginResult;
}
}