Finished Authorization

Added default users to DbInitializer (DiscordIds still missing)
This commit is contained in:
t.ruspekhofer 2022-02-22 14:34:07 +01:00
parent e47d6488c2
commit bca270757c
9 changed files with 109 additions and 36 deletions

View file

@ -12,24 +12,49 @@ namespace Lieb.Data
return; // DB has been seeded
}
UserRole admin = new UserRole();
admin.RoleName = Constants.Roles.Admin;
UserRole guildLead = new UserRole();
guildLead.RoleName = Constants.Roles.GuildLead;
UserRole member = new UserRole();
member.RoleName = Constants.Roles.User;
List<LiebRole> roles = new List<LiebRole>();
foreach (string roleName in Constants.Roles.GetAllRoles())
{
LiebRole role = new LiebRole()
{
RoleName = roleName
};
roles.Add(role);
}
context.LiebRoles.AddRange(roles);
context.SaveChanges();
var users = new LiebUser[]
{
new LiebUser{DiscordUserId=0, Name="Sarah",Birthday=DateTime.Parse("1992-01-15"), Roles=new List<UserRole>(){admin}},
new LiebUser{DiscordUserId=1, Name="Lisa",Birthday=DateTime.Parse("1991-02-15"), Roles=new List<UserRole>(){guildLead} },
new LiebUser{DiscordUserId=2, Name="Simon",Birthday=DateTime.Parse("2019-09-01"), Roles=new List<UserRole>(){member}}
new LiebUser{DiscordUserId=194863625477816321, Name="Sarah", Birthday=DateTime.Parse("1992-01-15")},
new LiebUser{DiscordUserId=1, Name="Lisa"},
new LiebUser{DiscordUserId=2, Name="Simon"}
};
context.LiebUsers.AddRange(users);
context.SaveChanges();
var assignments = new RoleAssignment[]
{
new RoleAssignment{LiebUserId = users[0].LiebUserId, LiebRoleId = roles.FirstOrDefault(x => x.RoleName == Constants.Roles.Admin).LiebRoleId },
new RoleAssignment{LiebUserId = users[0].LiebUserId, LiebRoleId = roles.FirstOrDefault(x => x.RoleName == Constants.Roles.GuildLead).LiebRoleId },
new RoleAssignment{LiebUserId = users[0].LiebUserId, LiebRoleId = roles.FirstOrDefault(x => x.RoleName == Constants.Roles.RaidLead).LiebRoleId },
new RoleAssignment{LiebUserId = users[0].LiebUserId, LiebRoleId = roles.FirstOrDefault(x => x.RoleName == Constants.Roles.User).LiebRoleId },
new RoleAssignment{LiebUserId = users[1].LiebUserId, LiebRoleId = roles.FirstOrDefault(x => x.RoleName == Constants.Roles.Admin).LiebRoleId },
new RoleAssignment{LiebUserId = users[1].LiebUserId, LiebRoleId = roles.FirstOrDefault(x => x.RoleName == Constants.Roles.GuildLead).LiebRoleId },
new RoleAssignment{LiebUserId = users[1].LiebUserId, LiebRoleId = roles.FirstOrDefault(x => x.RoleName == Constants.Roles.RaidLead).LiebRoleId },
new RoleAssignment{LiebUserId = users[1].LiebUserId, LiebRoleId = roles.FirstOrDefault(x => x.RoleName == Constants.Roles.User).LiebRoleId },
new RoleAssignment{LiebUserId = users[2].LiebUserId, LiebRoleId = roles.FirstOrDefault(x => x.RoleName == Constants.Roles.GuildLead).LiebRoleId },
new RoleAssignment{LiebUserId = users[2].LiebUserId, LiebRoleId = roles.FirstOrDefault(x => x.RoleName == Constants.Roles.RaidLead).LiebRoleId },
new RoleAssignment{LiebUserId = users[2].LiebUserId, LiebRoleId = roles.FirstOrDefault(x => x.RoleName == Constants.Roles.User).LiebRoleId }
};
context.RoleAssignments.AddRange(assignments);
context.SaveChanges();
}
}
}

View file

@ -14,7 +14,8 @@ namespace Lieb.Data
}
public DbSet<LiebUser> LiebUsers { get; set; }
public DbSet<UserRole> UserRoles { get; set; }
public DbSet<RoleAssignment> RoleAssignments { get; set; }
public DbSet<LiebRole> LiebRoles { get; set; }
public DbSet<GuildWars2Account> GuildWars2Account { get; set; }
public DbSet<Equipped> Equipped { get; set; }
public DbSet<GuildWars2Build> RaidRoles { get; set; }
@ -28,7 +29,8 @@ namespace Lieb.Data
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<LiebUser>().ToTable("LiebUser");
modelBuilder.Entity<UserRole>().ToTable("UserRole");
modelBuilder.Entity<RoleAssignment>().ToTable("RoleAssignment");
modelBuilder.Entity<LiebRole>().ToTable("LiebRole");
modelBuilder.Entity<GuildWars2Account>().ToTable("GuildWars2Account");
modelBuilder.Entity<Equipped>().ToTable("Equipped");
modelBuilder.Entity<GuildWars2Build>().ToTable("GuildWars2Build");

View file

@ -37,16 +37,46 @@ namespace Discord.OAuth2
await Events.CreatingTicket(context);
LiebUser? user = await _LiebDbcontext.LiebUsers.Include(u => u.Roles).FirstOrDefaultAsync(m => m.DiscordUserId == 1);
if (user != null)
{
foreach (UserRole role in user.Roles)
{
context.Identity.AddClaim(new Claim(Constants.ClaimType, role.RoleName));
}
}
//debug
//context.Identity.AddClaim(new Claim(Constants.ClaimType, Constants.Roles.User));
context = await ManageUserRights(context);
return new AuthenticationTicket(context.Principal, context.Properties, Scheme.Name);
}
private async Task<OAuthCreatingTicketContext> ManageUserRights(OAuthCreatingTicketContext context)
{
ulong discordId = ulong.Parse(context.Identity.Claims.Where(x => x.Type == ClaimTypes.NameIdentifier).FirstOrDefault().Value);
LiebUser? user = await _LiebDbcontext.LiebUsers.Include(u => u.RoleAssignments).ThenInclude(r => r.LiebRole).FirstOrDefaultAsync(m => m.DiscordUserId == discordId);
if (user != null)
{
if (user.BannedUntil == null || user.BannedUntil < DateTime.UtcNow)
{
foreach (RoleAssignment role in user.RoleAssignments)
{
context.Identity.AddClaim(new Claim(Constants.ClaimType, role.LiebRole.RoleName));
}
}
}
else
{
LiebRole standardRole = await _LiebDbcontext.LiebRoles.FirstOrDefaultAsync(m => m.RoleName == Constants.Roles.User);
LiebUser newUser = new LiebUser();
newUser.DiscordUserId = discordId;
_LiebDbcontext.LiebUsers.Add(newUser);
await _LiebDbcontext.SaveChangesAsync();
RoleAssignment roleAssignment = new RoleAssignment()
{
LiebRoleId = standardRole.LiebRoleId,
LiebUserId = newUser.LiebUserId
};
_LiebDbcontext.RoleAssignments.Add(roleAssignment);
await _LiebDbcontext.SaveChangesAsync();
context.Identity.AddClaim(new Claim(Constants.ClaimType, Constants.Roles.User));
}
return context;
}
}
}

View file

@ -7,8 +7,8 @@
public bool CanTank { get; set; }
public int GuildWars2AccountId { get; set; }
public int RaidRoleId { get; set; }
public GuildWars2Account GuildWars2Account { get; set; } = new GuildWars2Account();
public GuildWars2Build RaidRole { get; set; } = new GuildWars2Build();
public int GuildWars2BuildId { get; set; }
public GuildWars2Account GuildWars2Account { get; set; }
public GuildWars2Build GuildWars2Build { get; set; }
}
}

View file

@ -14,15 +14,15 @@
public int RaidSignUpId { get; set; }
public int RaidId { get; set; }
public int UserId { get; set; }
public int LiebUserId { get; set; }
public int GuildWars2AccountId { get; set; }
public int PlannedRaidRoleId { get; set; }
public SignUpType SignUpType { get; set; }
public Raid Raid { get; set; }
public LiebUser User { get; set; } = new LiebUser();
public GuildWars2Account GuildWars2Account { get; set; } = new GuildWars2Account();
public PlannedRaidRole PlannedRaidRole { get; set; } = new PlannedRaidRole();
public LiebUser LiebUser { get; set; }
public GuildWars2Account GuildWars2Account { get; set; }
public PlannedRaidRole PlannedRaidRole { get; set; }
}
}

11
Lieb/Models/LiebRole.cs Normal file
View file

@ -0,0 +1,11 @@
namespace Lieb.Models
{
public class LiebRole
{
public int LiebRoleId { get; set; }
public string RoleName { get; set; } = string.Empty;
public ICollection<RoleAssignment> RoleAssignments { get; set; } = new List<RoleAssignment>();
}
}

View file

@ -9,7 +9,8 @@ namespace Lieb.Models
public string Name { get; set; } = string.Empty;
public string Pronouns { get; set; } = string.Empty;
public DateTime? Birthday { get; set; }
public DateTime? BannedUntil { get; set; }
public ICollection<GuildWars2Account> GuildWars2Accounts { get; set; } = new List<GuildWars2Account>();
public ICollection<UserRole> Roles { get; set; } = new List<UserRole>();
public ICollection<RoleAssignment> RoleAssignments { get; set; } = new List<RoleAssignment>();
}
}

View file

@ -0,0 +1,13 @@
namespace Lieb.Models
{
public class RoleAssignment
{
public int RoleAssignmentId { get; set; }
public int LiebRoleId { get; set; }
public int LiebUserId { get; set; }
public LiebRole LiebRole { get; set; }
public LiebUser LiebUser { get; set; }
}
}

View file

@ -1,9 +0,0 @@
namespace Lieb.Models
{
public class UserRole
{
public int UserRoleId { get; set; }
public string RoleName { get; set; } = string.Empty;
}
}