Finished Authorization
Added default users to DbInitializer (DiscordIds still missing)
This commit is contained in:
parent
e47d6488c2
commit
bca270757c
9 changed files with 109 additions and 36 deletions
|
@ -12,24 +12,49 @@ namespace Lieb.Data
|
||||||
return; // DB has been seeded
|
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[]
|
var users = new LiebUser[]
|
||||||
{
|
{
|
||||||
new LiebUser{DiscordUserId=0, Name="Sarah",Birthday=DateTime.Parse("1992-01-15"), Roles=new List<UserRole>(){admin}},
|
new LiebUser{DiscordUserId=194863625477816321, Name="Sarah", Birthday=DateTime.Parse("1992-01-15")},
|
||||||
new LiebUser{DiscordUserId=1, Name="Lisa",Birthday=DateTime.Parse("1991-02-15"), Roles=new List<UserRole>(){guildLead} },
|
new LiebUser{DiscordUserId=1, Name="Lisa"},
|
||||||
new LiebUser{DiscordUserId=2, Name="Simon",Birthday=DateTime.Parse("2019-09-01"), Roles=new List<UserRole>(){member}}
|
new LiebUser{DiscordUserId=2, Name="Simon"}
|
||||||
};
|
};
|
||||||
|
|
||||||
context.LiebUsers.AddRange(users);
|
context.LiebUsers.AddRange(users);
|
||||||
context.SaveChanges();
|
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();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,8 @@ namespace Lieb.Data
|
||||||
}
|
}
|
||||||
|
|
||||||
public DbSet<LiebUser> LiebUsers { get; set; }
|
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<GuildWars2Account> GuildWars2Account { get; set; }
|
||||||
public DbSet<Equipped> Equipped { get; set; }
|
public DbSet<Equipped> Equipped { get; set; }
|
||||||
public DbSet<GuildWars2Build> RaidRoles { get; set; }
|
public DbSet<GuildWars2Build> RaidRoles { get; set; }
|
||||||
|
@ -28,7 +29,8 @@ namespace Lieb.Data
|
||||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||||
{
|
{
|
||||||
modelBuilder.Entity<LiebUser>().ToTable("LiebUser");
|
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<GuildWars2Account>().ToTable("GuildWars2Account");
|
||||||
modelBuilder.Entity<Equipped>().ToTable("Equipped");
|
modelBuilder.Entity<Equipped>().ToTable("Equipped");
|
||||||
modelBuilder.Entity<GuildWars2Build>().ToTable("GuildWars2Build");
|
modelBuilder.Entity<GuildWars2Build>().ToTable("GuildWars2Build");
|
||||||
|
|
|
@ -37,16 +37,46 @@ namespace Discord.OAuth2
|
||||||
|
|
||||||
await Events.CreatingTicket(context);
|
await Events.CreatingTicket(context);
|
||||||
|
|
||||||
LiebUser? user = await _LiebDbcontext.LiebUsers.Include(u => u.Roles).FirstOrDefaultAsync(m => m.DiscordUserId == 1);
|
//debug
|
||||||
if (user != null)
|
//context.Identity.AddClaim(new Claim(Constants.ClaimType, Constants.Roles.User));
|
||||||
{
|
|
||||||
foreach (UserRole role in user.Roles)
|
context = await ManageUserRights(context);
|
||||||
{
|
|
||||||
context.Identity.AddClaim(new Claim(Constants.ClaimType, role.RoleName));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return new AuthenticationTicket(context.Principal, context.Properties, Scheme.Name);
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,8 +7,8 @@
|
||||||
public bool CanTank { get; set; }
|
public bool CanTank { get; set; }
|
||||||
|
|
||||||
public int GuildWars2AccountId { get; set; }
|
public int GuildWars2AccountId { get; set; }
|
||||||
public int RaidRoleId { get; set; }
|
public int GuildWars2BuildId { get; set; }
|
||||||
public GuildWars2Account GuildWars2Account { get; set; } = new GuildWars2Account();
|
public GuildWars2Account GuildWars2Account { get; set; }
|
||||||
public GuildWars2Build RaidRole { get; set; } = new GuildWars2Build();
|
public GuildWars2Build GuildWars2Build { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,15 +14,15 @@
|
||||||
public int RaidSignUpId { get; set; }
|
public int RaidSignUpId { get; set; }
|
||||||
|
|
||||||
public int RaidId { get; set; }
|
public int RaidId { get; set; }
|
||||||
public int UserId { get; set; }
|
public int LiebUserId { get; set; }
|
||||||
public int GuildWars2AccountId { get; set; }
|
public int GuildWars2AccountId { get; set; }
|
||||||
public int PlannedRaidRoleId { get; set; }
|
public int PlannedRaidRoleId { get; set; }
|
||||||
|
|
||||||
public SignUpType SignUpType { get; set; }
|
public SignUpType SignUpType { get; set; }
|
||||||
|
|
||||||
public Raid Raid { get; set; }
|
public Raid Raid { get; set; }
|
||||||
public LiebUser User { get; set; } = new LiebUser();
|
public LiebUser LiebUser { get; set; }
|
||||||
public GuildWars2Account GuildWars2Account { get; set; } = new GuildWars2Account();
|
public GuildWars2Account GuildWars2Account { get; set; }
|
||||||
public PlannedRaidRole PlannedRaidRole { get; set; } = new PlannedRaidRole();
|
public PlannedRaidRole PlannedRaidRole { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
11
Lieb/Models/LiebRole.cs
Normal file
11
Lieb/Models/LiebRole.cs
Normal 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>();
|
||||||
|
}
|
||||||
|
}
|
|
@ -9,7 +9,8 @@ namespace Lieb.Models
|
||||||
public string Name { get; set; } = string.Empty;
|
public string Name { get; set; } = string.Empty;
|
||||||
public string Pronouns { get; set; } = string.Empty;
|
public string Pronouns { get; set; } = string.Empty;
|
||||||
public DateTime? Birthday { get; set; }
|
public DateTime? Birthday { get; set; }
|
||||||
|
public DateTime? BannedUntil { get; set; }
|
||||||
public ICollection<GuildWars2Account> GuildWars2Accounts { get; set; } = new List<GuildWars2Account>();
|
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>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
13
Lieb/Models/RoleAssignment.cs
Normal file
13
Lieb/Models/RoleAssignment.cs
Normal 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; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,9 +0,0 @@
|
||||||
namespace Lieb.Models
|
|
||||||
{
|
|
||||||
public class UserRole
|
|
||||||
{
|
|
||||||
public int UserRoleId { get; set; }
|
|
||||||
|
|
||||||
public string RoleName { get; set; } = string.Empty;
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Add table
Add a link
Reference in a new issue