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
|
||||
}
|
||||
|
||||
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();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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; }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
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 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>();
|
||||
}
|
||||
}
|
||||
|
|
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