From 5811d878180a85af5c41b9cb3b8f272d589539e9 Mon Sep 17 00:00:00 2001 From: Syndamia Date: Thu, 17 Dec 2020 11:21:14 +0200 Subject: Roles are now in a seperate table, user can contain multiple roles (BUT JWT doesn't support mutiple yet), added migrations, userrepository returns user roles with the user --- src/DevHive.Data/Models/Role.cs | 3 +++ src/DevHive.Data/Models/User.cs | 3 ++- src/DevHive.Data/Repositories/DevHiveContext.cs | 4 ++++ src/DevHive.Data/Repositories/RoleRepository.cs | 7 +++++++ src/DevHive.Data/Repositories/UserRepository.cs | 7 ++++++- 5 files changed, 22 insertions(+), 2 deletions(-) (limited to 'src/DevHive.Data') diff --git a/src/DevHive.Data/Models/Role.cs b/src/DevHive.Data/Models/Role.cs index b4c7009..0bf2ab9 100644 --- a/src/DevHive.Data/Models/Role.cs +++ b/src/DevHive.Data/Models/Role.cs @@ -1,6 +1,7 @@ using System; using Microsoft.AspNetCore.Identity; using System.ComponentModel.DataAnnotations.Schema; +using System.Collections.Generic; namespace DevHive.Data.Models { @@ -8,5 +9,7 @@ namespace DevHive.Data.Models public class Role : IdentityRole { public const string DefaultRole = "User"; + + public virtual List Users { get; set; } } } diff --git a/src/DevHive.Data/Models/User.cs b/src/DevHive.Data/Models/User.cs index a3731cb..ecd7af8 100644 --- a/src/DevHive.Data/Models/User.cs +++ b/src/DevHive.Data/Models/User.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; using Microsoft.AspNetCore.Identity; @@ -19,7 +20,7 @@ namespace DevHive.Data.Models public string ProfilePicture { get; set; } - public string Role { get; set; } + public virtual List Roles { get; set; } //public List Friends { get; set; } } diff --git a/src/DevHive.Data/Repositories/DevHiveContext.cs b/src/DevHive.Data/Repositories/DevHiveContext.cs index 2f0fa55..373eb5e 100644 --- a/src/DevHive.Data/Repositories/DevHiveContext.cs +++ b/src/DevHive.Data/Repositories/DevHiveContext.cs @@ -18,6 +18,10 @@ namespace DevHive.Data.Repositories builder.Entity() .HasIndex(x => x.UserName) .IsUnique(); + + builder.Entity() + .HasIndex(x => x.Id) + .IsUnique(); base.OnModelCreating(builder); } diff --git a/src/DevHive.Data/Repositories/RoleRepository.cs b/src/DevHive.Data/Repositories/RoleRepository.cs index 2652760..21c29db 100644 --- a/src/DevHive.Data/Repositories/RoleRepository.cs +++ b/src/DevHive.Data/Repositories/RoleRepository.cs @@ -34,6 +34,13 @@ namespace DevHive.Data.Repositories .FindAsync(id); } + public async Task GetByNameAsync(string name) + { + return await this._context + .Set() + .FirstOrDefaultAsync(x => x.Name == name); + } + //Update public async Task EditAsync(Role newEntity) { diff --git a/src/DevHive.Data/Repositories/UserRepository.cs b/src/DevHive.Data/Repositories/UserRepository.cs index f5a074b..1508947 100644 --- a/src/DevHive.Data/Repositories/UserRepository.cs +++ b/src/DevHive.Data/Repositories/UserRepository.cs @@ -33,6 +33,7 @@ namespace DevHive.Data.Repositories { return this._context .Set() + .Include(x => x.Roles) .AsNoTracking() .AsEnumerable(); } @@ -41,13 +42,17 @@ namespace DevHive.Data.Repositories { return await this._context .Set() - .FindAsync(id); + .Include(x => x.Roles) + // To also return the roles, you need to include the roles table, + // but then you loose FindAsync, because there is id of role and id of user + .FirstOrDefaultAsync(x => x.Id == id); } public async Task GetByUsername(string username) { return await this._context .Set() + .Include(u => u.Roles) .FirstOrDefaultAsync(x => x.UserName == username); } -- cgit v1.2.3