Moved from int id to guid

This commit is contained in:
Holger Börchers 2020-09-08 20:10:56 +02:00
parent 05efdf51de
commit 31ef9bf45b
16 changed files with 221 additions and 216 deletions

View File

@ -10,32 +10,32 @@ namespace UserService.DatabaseLayer.DataModels
public static void Seed(this ModelBuilder modelBuilder) public static void Seed(this ModelBuilder modelBuilder)
{ {
if (modelBuilder == null) throw new ArgumentNullException(nameof(modelBuilder)); if (modelBuilder == null) throw new ArgumentNullException(nameof(modelBuilder));
var groups = new OrganizationUnit { CommonName = "Groups", Id = -1 }; var groups = new OrganizationUnit { CommonName = "Groups", Id = Guid.NewGuid() };
var users = new OrganizationUnit { CommonName = "Users", Id = -2 }; var users = new OrganizationUnit { CommonName = "Users", Id = Guid.NewGuid() };
var germany = new OrganizationUnit{CommonName = "Germany", Id = -6, ParentId = -2}; var germany = new OrganizationUnit { CommonName = "Germany", Id = Guid.NewGuid(), ParentId = users.Id };
var usa = new OrganizationUnit{CommonName = "USA", Id = -5, ParentId = -2}; var usa = new OrganizationUnit { CommonName = "USA", Id = Guid.NewGuid(), ParentId = users.Id };
var arizona = new OrganizationUnit{CommonName = "Arizona" , Id = -4, ParentId = -5 }; var arizona = new OrganizationUnit { CommonName = "Arizona", Id = Guid.NewGuid(), ParentId = usa.Id };
var france = new OrganizationUnit{CommonName = "France" , Id = -3, ParentId = -2 }; var france = new OrganizationUnit { CommonName = "France", Id = Guid.NewGuid(), ParentId = users.Id };
modelBuilder.Entity<OrganizationUnit>().HasData(users, groups, germany, usa, arizona, france); modelBuilder.Entity<OrganizationUnit>().HasData(users, groups, germany, usa, arizona, france);
var user = new User { CommonName = Environment.UserName, IsActive = true, Id = -7, ParentId = users.Id }; var user = new User { CommonName = Environment.UserName, IsActive = true, Id = Guid.NewGuid(), ParentId = users.Id };
modelBuilder.Entity<User>().HasData(user); modelBuilder.Entity<User>().HasData(user);
var secGroup = new SecurityGroup { CommonName = "Global Admin", Id = -8, ParentId = groups.Id }; var secGroup = new SecurityGroup { CommonName = "Global Admin", Id = Guid.NewGuid(), ParentId = groups.Id };
modelBuilder.Entity<SecurityGroup>().HasData(secGroup); modelBuilder.Entity<SecurityGroup>().HasData(secGroup);
modelBuilder.Entity<UserMember>() modelBuilder.Entity<MembersMember>()
.HasData(new UserMember { MemberId = secGroup.Id, UserId = user.Id }); .HasData(new MembersMember { MemberId = secGroup.Id, AttachedMemberId = user.Id });
} }
public static void CreateRelations(this ModelBuilder modelBuilder) public static void CreateRelations(this ModelBuilder modelBuilder)
{ {
if (modelBuilder == null) throw new ArgumentNullException(nameof(modelBuilder)); if (modelBuilder == null) throw new ArgumentNullException(nameof(modelBuilder));
modelBuilder.Entity<UserMember>() modelBuilder.Entity<MembersMember>()
.HasKey(bc => new { bc.MemberId, bc.UserId }); .HasKey(bc => new { bc.MemberId, AttachedMemberId = bc.AttachedMemberId });
modelBuilder.Entity<UserMember>() modelBuilder.Entity<MembersMember>()
.HasOne(bc => bc.User) .HasOne(bc => bc.AttachedMember)
.WithMany(b => b!.MemberOf) .WithMany(b => b!.MemberOf)
.HasForeignKey(bc => bc.UserId); .HasForeignKey(bc => bc.AttachedMemberId);
modelBuilder.Entity<UserMember>() modelBuilder.Entity<MembersMember>()
.HasOne(bc => bc.Member) .HasOne(bc => bc.Member)
.WithMany(c => c!.Members) .WithMany(c => c!.Members)
.HasForeignKey(bc => bc.MemberId); .HasForeignKey(bc => bc.MemberId);
@ -64,13 +64,13 @@ namespace UserService.DatabaseLayer.DataModels
public static class SecurityGroupExtensions public static class SecurityGroupExtensions
{ {
public static IEnumerable<User> GetUsers(this SecurityGroup securityGroup) public static IEnumerable<Member> GetAttachedMembers(this SecurityGroup securityGroup)
{ {
if (securityGroup == null) throw new ArgumentNullException(nameof(securityGroup)); if (securityGroup == null) throw new ArgumentNullException(nameof(securityGroup));
foreach (var userMember in securityGroup.Members) foreach (var userMember in securityGroup.Members)
{ {
if (userMember.User is null) continue; if (userMember.AttachedMember is null) continue;
yield return userMember.User; yield return userMember.AttachedMember;
} }
} }

View File

@ -7,7 +7,7 @@ namespace UserService.DatabaseLayer.DataModels
{ {
public DbSet<User> Users { get; set; } = null!; public DbSet<User> Users { get; set; } = null!;
public DbSet<SecurityGroup> SecurityGroups { get; set; } = null!; public DbSet<SecurityGroup> SecurityGroups { get; set; } = null!;
public DbSet<UserMember> UserMembers { get; set; } = null!; public DbSet<MembersMember> UserMembers { get; set; } = null!;
public DbSet<OrganizationUnit> OrganizationUnits { get; set; } = null!; public DbSet<OrganizationUnit> OrganizationUnits { get; set; } = null!;
protected override void OnConfiguring(DbContextOptionsBuilder options) protected override void OnConfiguring(DbContextOptionsBuilder options)

View File

@ -9,7 +9,7 @@ using UserService.DatabaseLayer.DataModels;
namespace UserService.DatabaseLayer.Migrations namespace UserService.DatabaseLayer.Migrations
{ {
[DbContext(typeof(UserServiceDbContext))] [DbContext(typeof(UserServiceDbContext))]
[Migration("20200821193933_InitialCreate")] [Migration("20200906191545_InitialCreate")]
partial class InitialCreate partial class InitialCreate
{ {
protected override void BuildTargetModel(ModelBuilder modelBuilder) protected override void BuildTargetModel(ModelBuilder modelBuilder)
@ -18,11 +18,33 @@ namespace UserService.DatabaseLayer.Migrations
modelBuilder modelBuilder
.HasAnnotation("ProductVersion", "3.1.7"); .HasAnnotation("ProductVersion", "3.1.7");
modelBuilder.Entity("UserService.Infrastructure.DataModels.MembersMember", b =>
{
b.Property<Guid>("MemberId")
.HasColumnType("TEXT");
b.Property<Guid>("AttachedMemberId")
.HasColumnType("TEXT");
b.HasKey("MemberId", "AttachedMemberId");
b.HasIndex("AttachedMemberId");
b.ToTable("UserMembers");
b.HasData(
new
{
MemberId = new Guid("a830a548-8b92-4a95-aa8e-c71ae814c6a3"),
AttachedMemberId = new Guid("fd9f5d95-0898-47d4-8d25-6956077ba269")
});
});
modelBuilder.Entity("UserService.Infrastructure.DataModels.Node", b => modelBuilder.Entity("UserService.Infrastructure.DataModels.Node", b =>
{ {
b.Property<int>("Id") b.Property<Guid>("Id")
.ValueGeneratedOnAdd() .ValueGeneratedOnAdd()
.HasColumnType("INTEGER"); .HasColumnType("TEXT");
b.Property<string>("CommonName") b.Property<string>("CommonName")
.IsRequired() .IsRequired()
@ -35,8 +57,8 @@ namespace UserService.DatabaseLayer.Migrations
.IsRequired() .IsRequired()
.HasColumnType("TEXT"); .HasColumnType("TEXT");
b.Property<int?>("ParentId") b.Property<Guid?>("ParentId")
.HasColumnType("INTEGER"); .HasColumnType("TEXT");
b.HasKey("Id"); b.HasKey("Id");
@ -47,35 +69,10 @@ namespace UserService.DatabaseLayer.Migrations
b.HasDiscriminator<string>("Discriminator").HasValue("Node"); b.HasDiscriminator<string>("Discriminator").HasValue("Node");
}); });
modelBuilder.Entity("UserService.Infrastructure.DataModels.UserMember", b =>
{
b.Property<int>("MemberId")
.HasColumnType("INTEGER");
b.Property<int>("UserId")
.HasColumnType("INTEGER");
b.HasKey("MemberId", "UserId");
b.HasIndex("UserId");
b.ToTable("UserMembers");
b.HasData(
new
{
MemberId = -8,
UserId = -7
});
});
modelBuilder.Entity("UserService.Infrastructure.DataModels.Member", b => modelBuilder.Entity("UserService.Infrastructure.DataModels.Member", b =>
{ {
b.HasBaseType("UserService.Infrastructure.DataModels.Node"); b.HasBaseType("UserService.Infrastructure.DataModels.Node");
b.Property<string>("EMail")
.HasColumnType("TEXT");
b.HasDiscriminator().HasValue("Member"); b.HasDiscriminator().HasValue("Member");
}); });
@ -83,8 +80,8 @@ namespace UserService.DatabaseLayer.Migrations
{ {
b.HasBaseType("UserService.Infrastructure.DataModels.Node"); b.HasBaseType("UserService.Infrastructure.DataModels.Node");
b.Property<int?>("ManagerId") b.Property<Guid?>("ManagerId")
.HasColumnType("INTEGER"); .HasColumnType("TEXT");
b.HasIndex("ManagerId"); b.HasIndex("ManagerId");
@ -93,37 +90,37 @@ namespace UserService.DatabaseLayer.Migrations
b.HasData( b.HasData(
new new
{ {
Id = -2, Id = new Guid("c2366c9c-e79a-45c8-933c-40d0301b2551"),
CommonName = "Users" CommonName = "Users"
}, },
new new
{ {
Id = -1, Id = new Guid("c94f4749-b7c7-418d-8c10-bc4253c4b913"),
CommonName = "Groups" CommonName = "Groups"
}, },
new new
{ {
Id = -6, Id = new Guid("c743fff4-9bdf-45a4-b4c9-391f6fc46433"),
CommonName = "Germany", CommonName = "Germany",
ParentId = -2 ParentId = new Guid("c2366c9c-e79a-45c8-933c-40d0301b2551")
}, },
new new
{ {
Id = -5, Id = new Guid("cecbf557-59cc-475c-b136-02da39aa4911"),
CommonName = "USA", CommonName = "USA",
ParentId = -2 ParentId = new Guid("c2366c9c-e79a-45c8-933c-40d0301b2551")
}, },
new new
{ {
Id = -4, Id = new Guid("89e1d70e-da3d-4cc9-81f1-a2fa76a6d33b"),
CommonName = "Arizona", CommonName = "Arizona",
ParentId = -5 ParentId = new Guid("cecbf557-59cc-475c-b136-02da39aa4911")
}, },
new new
{ {
Id = -3, Id = new Guid("97ad8c82-c5ea-4de1-a474-bf25418a9533"),
CommonName = "France", CommonName = "France",
ParentId = -2 ParentId = new Guid("c2366c9c-e79a-45c8-933c-40d0301b2551")
}); });
}); });
@ -136,9 +133,9 @@ namespace UserService.DatabaseLayer.Migrations
b.HasData( b.HasData(
new new
{ {
Id = -8, Id = new Guid("a830a548-8b92-4a95-aa8e-c71ae814c6a3"),
CommonName = "Global Admin", CommonName = "Global Admin",
ParentId = -1 ParentId = new Guid("c94f4749-b7c7-418d-8c10-bc4253c4b913")
}); });
}); });
@ -146,6 +143,9 @@ namespace UserService.DatabaseLayer.Migrations
{ {
b.HasBaseType("UserService.Infrastructure.DataModels.Member"); b.HasBaseType("UserService.Infrastructure.DataModels.Member");
b.Property<string>("EMail")
.HasColumnType("TEXT");
b.Property<string>("FirstName") b.Property<string>("FirstName")
.HasColumnType("TEXT"); .HasColumnType("TEXT");
@ -160,13 +160,28 @@ namespace UserService.DatabaseLayer.Migrations
b.HasData( b.HasData(
new new
{ {
Id = -7, Id = new Guid("fd9f5d95-0898-47d4-8d25-6956077ba269"),
CommonName = "holger", CommonName = "holger",
ParentId = -2, ParentId = new Guid("c2366c9c-e79a-45c8-933c-40d0301b2551"),
IsActive = true IsActive = true
}); });
}); });
modelBuilder.Entity("UserService.Infrastructure.DataModels.MembersMember", b =>
{
b.HasOne("UserService.Infrastructure.DataModels.Member", "AttachedMember")
.WithMany("MemberOf")
.HasForeignKey("AttachedMemberId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("UserService.Infrastructure.DataModels.Member", "Member")
.WithMany("Members")
.HasForeignKey("MemberId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("UserService.Infrastructure.DataModels.Node", b => modelBuilder.Entity("UserService.Infrastructure.DataModels.Node", b =>
{ {
b.HasOne("UserService.Infrastructure.DataModels.Node", "Parent") b.HasOne("UserService.Infrastructure.DataModels.Node", "Parent")
@ -174,21 +189,6 @@ namespace UserService.DatabaseLayer.Migrations
.HasForeignKey("ParentId"); .HasForeignKey("ParentId");
}); });
modelBuilder.Entity("UserService.Infrastructure.DataModels.UserMember", b =>
{
b.HasOne("UserService.Infrastructure.DataModels.Member", "Member")
.WithMany("Members")
.HasForeignKey("MemberId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("UserService.Infrastructure.DataModels.User", "User")
.WithMany("MemberOf")
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("UserService.Infrastructure.DataModels.OrganizationUnit", b => modelBuilder.Entity("UserService.Infrastructure.DataModels.OrganizationUnit", b =>
{ {
b.HasOne("UserService.Infrastructure.DataModels.Member", "Manager") b.HasOne("UserService.Infrastructure.DataModels.Member", "Manager")

View File

@ -1,4 +1,5 @@
using Microsoft.EntityFrameworkCore.Migrations; using System;
using Microsoft.EntityFrameworkCore.Migrations;
namespace UserService.DatabaseLayer.Migrations namespace UserService.DatabaseLayer.Migrations
{ {
@ -10,17 +11,16 @@ namespace UserService.DatabaseLayer.Migrations
name: "Node", name: "Node",
columns: table => new columns: table => new
{ {
Id = table.Column<int>(nullable: false) Id = table.Column<Guid>(nullable: false),
.Annotation("Sqlite:Autoincrement", true),
CommonName = table.Column<string>(nullable: false), CommonName = table.Column<string>(nullable: false),
Description = table.Column<string>(nullable: true), Description = table.Column<string>(nullable: true),
ParentId = table.Column<int>(nullable: true), ParentId = table.Column<Guid>(nullable: true),
Discriminator = table.Column<string>(nullable: false), Discriminator = table.Column<string>(nullable: false),
EMail = table.Column<string>(nullable: true),
FirstName = table.Column<string>(nullable: true), FirstName = table.Column<string>(nullable: true),
LastName = table.Column<string>(nullable: true), LastName = table.Column<string>(nullable: true),
IsActive = table.Column<bool>(nullable: true), IsActive = table.Column<bool>(nullable: true),
ManagerId = table.Column<int>(nullable: true) EMail = table.Column<string>(nullable: true),
ManagerId = table.Column<Guid>(nullable: true)
}, },
constraints: table => constraints: table =>
{ {
@ -43,21 +43,21 @@ namespace UserService.DatabaseLayer.Migrations
name: "UserMembers", name: "UserMembers",
columns: table => new columns: table => new
{ {
MemberId = table.Column<int>(nullable: false), MemberId = table.Column<Guid>(nullable: false),
UserId = table.Column<int>(nullable: false) AttachedMemberId = table.Column<Guid>(nullable: false)
}, },
constraints: table => constraints: table =>
{ {
table.PrimaryKey("PK_UserMembers", x => new { x.MemberId, x.UserId }); table.PrimaryKey("PK_UserMembers", x => new { x.MemberId, x.AttachedMemberId });
table.ForeignKey( table.ForeignKey(
name: "FK_UserMembers_Node_MemberId", name: "FK_UserMembers_Node_AttachedMemberId",
column: x => x.MemberId, column: x => x.AttachedMemberId,
principalTable: "Node", principalTable: "Node",
principalColumn: "Id", principalColumn: "Id",
onDelete: ReferentialAction.Cascade); onDelete: ReferentialAction.Cascade);
table.ForeignKey( table.ForeignKey(
name: "FK_UserMembers_Node_UserId", name: "FK_UserMembers_Node_MemberId",
column: x => x.UserId, column: x => x.MemberId,
principalTable: "Node", principalTable: "Node",
principalColumn: "Id", principalColumn: "Id",
onDelete: ReferentialAction.Cascade); onDelete: ReferentialAction.Cascade);
@ -66,47 +66,47 @@ namespace UserService.DatabaseLayer.Migrations
migrationBuilder.InsertData( migrationBuilder.InsertData(
table: "Node", table: "Node",
columns: new[] { "Id", "CommonName", "Description", "Discriminator", "ParentId", "ManagerId" }, columns: new[] { "Id", "CommonName", "Description", "Discriminator", "ParentId", "ManagerId" },
values: new object[] { -2, "Users", null, "OrganizationUnit", null, null }); values: new object[] { new Guid("c2366c9c-e79a-45c8-933c-40d0301b2551"), "Users", null, "OrganizationUnit", null, null });
migrationBuilder.InsertData( migrationBuilder.InsertData(
table: "Node", table: "Node",
columns: new[] { "Id", "CommonName", "Description", "Discriminator", "ParentId", "ManagerId" }, columns: new[] { "Id", "CommonName", "Description", "Discriminator", "ParentId", "ManagerId" },
values: new object[] { -1, "Groups", null, "OrganizationUnit", null, null }); values: new object[] { new Guid("c94f4749-b7c7-418d-8c10-bc4253c4b913"), "Groups", null, "OrganizationUnit", null, null });
migrationBuilder.InsertData( migrationBuilder.InsertData(
table: "Node", table: "Node",
columns: new[] { "Id", "CommonName", "Description", "Discriminator", "ParentId", "ManagerId" }, columns: new[] { "Id", "CommonName", "Description", "Discriminator", "ParentId", "ManagerId" },
values: new object[] { -6, "Germany", null, "OrganizationUnit", -2, null }); values: new object[] { new Guid("c743fff4-9bdf-45a4-b4c9-391f6fc46433"), "Germany", null, "OrganizationUnit", new Guid("c2366c9c-e79a-45c8-933c-40d0301b2551"), null });
migrationBuilder.InsertData( migrationBuilder.InsertData(
table: "Node", table: "Node",
columns: new[] { "Id", "CommonName", "Description", "Discriminator", "ParentId", "ManagerId" }, columns: new[] { "Id", "CommonName", "Description", "Discriminator", "ParentId", "ManagerId" },
values: new object[] { -5, "USA", null, "OrganizationUnit", -2, null }); values: new object[] { new Guid("cecbf557-59cc-475c-b136-02da39aa4911"), "USA", null, "OrganizationUnit", new Guid("c2366c9c-e79a-45c8-933c-40d0301b2551"), null });
migrationBuilder.InsertData( migrationBuilder.InsertData(
table: "Node", table: "Node",
columns: new[] { "Id", "CommonName", "Description", "Discriminator", "ParentId", "ManagerId" }, columns: new[] { "Id", "CommonName", "Description", "Discriminator", "ParentId", "ManagerId" },
values: new object[] { -3, "France", null, "OrganizationUnit", -2, null }); values: new object[] { new Guid("97ad8c82-c5ea-4de1-a474-bf25418a9533"), "France", null, "OrganizationUnit", new Guid("c2366c9c-e79a-45c8-933c-40d0301b2551"), null });
migrationBuilder.InsertData( migrationBuilder.InsertData(
table: "Node", table: "Node",
columns: new[] { "Id", "CommonName", "Description", "Discriminator", "ParentId", "EMail", "FirstName", "IsActive", "LastName" }, columns: new[] { "Id", "CommonName", "Description", "Discriminator", "ParentId", "EMail", "FirstName", "IsActive", "LastName" },
values: new object[] { -7, "holger", null, "User", -2, null, null, true, null }); values: new object[] { new Guid("fd9f5d95-0898-47d4-8d25-6956077ba269"), "holger", null, "User", new Guid("c2366c9c-e79a-45c8-933c-40d0301b2551"), null, null, true, null });
migrationBuilder.InsertData( migrationBuilder.InsertData(
table: "Node", table: "Node",
columns: new[] { "Id", "CommonName", "Description", "Discriminator", "ParentId", "EMail" }, columns: new[] { "Id", "CommonName", "Description", "Discriminator", "ParentId" },
values: new object[] { -8, "Global Admin", null, "SecurityGroup", -1, null }); values: new object[] { new Guid("a830a548-8b92-4a95-aa8e-c71ae814c6a3"), "Global Admin", null, "SecurityGroup", new Guid("c94f4749-b7c7-418d-8c10-bc4253c4b913") });
migrationBuilder.InsertData( migrationBuilder.InsertData(
table: "Node", table: "Node",
columns: new[] { "Id", "CommonName", "Description", "Discriminator", "ParentId", "ManagerId" }, columns: new[] { "Id", "CommonName", "Description", "Discriminator", "ParentId", "ManagerId" },
values: new object[] { -4, "Arizona", null, "OrganizationUnit", -5, null }); values: new object[] { new Guid("89e1d70e-da3d-4cc9-81f1-a2fa76a6d33b"), "Arizona", null, "OrganizationUnit", new Guid("cecbf557-59cc-475c-b136-02da39aa4911"), null });
migrationBuilder.InsertData( migrationBuilder.InsertData(
table: "UserMembers", table: "UserMembers",
columns: new[] { "MemberId", "UserId" }, columns: new[] { "MemberId", "AttachedMemberId" },
values: new object[] { -8, -7 }); values: new object[] { new Guid("a830a548-8b92-4a95-aa8e-c71ae814c6a3"), new Guid("fd9f5d95-0898-47d4-8d25-6956077ba269") });
migrationBuilder.CreateIndex( migrationBuilder.CreateIndex(
name: "IX_Node_ParentId", name: "IX_Node_ParentId",
@ -119,9 +119,9 @@ namespace UserService.DatabaseLayer.Migrations
column: "ManagerId"); column: "ManagerId");
migrationBuilder.CreateIndex( migrationBuilder.CreateIndex(
name: "IX_UserMembers_UserId", name: "IX_UserMembers_AttachedMemberId",
table: "UserMembers", table: "UserMembers",
column: "UserId"); column: "AttachedMemberId");
} }
protected override void Down(MigrationBuilder migrationBuilder) protected override void Down(MigrationBuilder migrationBuilder)

View File

@ -16,11 +16,33 @@ namespace UserService.DatabaseLayer.Migrations
modelBuilder modelBuilder
.HasAnnotation("ProductVersion", "3.1.7"); .HasAnnotation("ProductVersion", "3.1.7");
modelBuilder.Entity("UserService.Infrastructure.DataModels.MembersMember", b =>
{
b.Property<Guid>("MemberId")
.HasColumnType("TEXT");
b.Property<Guid>("AttachedMemberId")
.HasColumnType("TEXT");
b.HasKey("MemberId", "AttachedMemberId");
b.HasIndex("AttachedMemberId");
b.ToTable("UserMembers");
b.HasData(
new
{
MemberId = new Guid("a830a548-8b92-4a95-aa8e-c71ae814c6a3"),
AttachedMemberId = new Guid("fd9f5d95-0898-47d4-8d25-6956077ba269")
});
});
modelBuilder.Entity("UserService.Infrastructure.DataModels.Node", b => modelBuilder.Entity("UserService.Infrastructure.DataModels.Node", b =>
{ {
b.Property<int>("Id") b.Property<Guid>("Id")
.ValueGeneratedOnAdd() .ValueGeneratedOnAdd()
.HasColumnType("INTEGER"); .HasColumnType("TEXT");
b.Property<string>("CommonName") b.Property<string>("CommonName")
.IsRequired() .IsRequired()
@ -33,8 +55,8 @@ namespace UserService.DatabaseLayer.Migrations
.IsRequired() .IsRequired()
.HasColumnType("TEXT"); .HasColumnType("TEXT");
b.Property<int?>("ParentId") b.Property<Guid?>("ParentId")
.HasColumnType("INTEGER"); .HasColumnType("TEXT");
b.HasKey("Id"); b.HasKey("Id");
@ -45,35 +67,10 @@ namespace UserService.DatabaseLayer.Migrations
b.HasDiscriminator<string>("Discriminator").HasValue("Node"); b.HasDiscriminator<string>("Discriminator").HasValue("Node");
}); });
modelBuilder.Entity("UserService.Infrastructure.DataModels.UserMember", b =>
{
b.Property<int>("MemberId")
.HasColumnType("INTEGER");
b.Property<int>("UserId")
.HasColumnType("INTEGER");
b.HasKey("MemberId", "UserId");
b.HasIndex("UserId");
b.ToTable("UserMembers");
b.HasData(
new
{
MemberId = -8,
UserId = -7
});
});
modelBuilder.Entity("UserService.Infrastructure.DataModels.Member", b => modelBuilder.Entity("UserService.Infrastructure.DataModels.Member", b =>
{ {
b.HasBaseType("UserService.Infrastructure.DataModels.Node"); b.HasBaseType("UserService.Infrastructure.DataModels.Node");
b.Property<string>("EMail")
.HasColumnType("TEXT");
b.HasDiscriminator().HasValue("Member"); b.HasDiscriminator().HasValue("Member");
}); });
@ -81,8 +78,8 @@ namespace UserService.DatabaseLayer.Migrations
{ {
b.HasBaseType("UserService.Infrastructure.DataModels.Node"); b.HasBaseType("UserService.Infrastructure.DataModels.Node");
b.Property<int?>("ManagerId") b.Property<Guid?>("ManagerId")
.HasColumnType("INTEGER"); .HasColumnType("TEXT");
b.HasIndex("ManagerId"); b.HasIndex("ManagerId");
@ -91,37 +88,37 @@ namespace UserService.DatabaseLayer.Migrations
b.HasData( b.HasData(
new new
{ {
Id = -2, Id = new Guid("c2366c9c-e79a-45c8-933c-40d0301b2551"),
CommonName = "Users" CommonName = "Users"
}, },
new new
{ {
Id = -1, Id = new Guid("c94f4749-b7c7-418d-8c10-bc4253c4b913"),
CommonName = "Groups" CommonName = "Groups"
}, },
new new
{ {
Id = -6, Id = new Guid("c743fff4-9bdf-45a4-b4c9-391f6fc46433"),
CommonName = "Germany", CommonName = "Germany",
ParentId = -2 ParentId = new Guid("c2366c9c-e79a-45c8-933c-40d0301b2551")
}, },
new new
{ {
Id = -5, Id = new Guid("cecbf557-59cc-475c-b136-02da39aa4911"),
CommonName = "USA", CommonName = "USA",
ParentId = -2 ParentId = new Guid("c2366c9c-e79a-45c8-933c-40d0301b2551")
}, },
new new
{ {
Id = -4, Id = new Guid("89e1d70e-da3d-4cc9-81f1-a2fa76a6d33b"),
CommonName = "Arizona", CommonName = "Arizona",
ParentId = -5 ParentId = new Guid("cecbf557-59cc-475c-b136-02da39aa4911")
}, },
new new
{ {
Id = -3, Id = new Guid("97ad8c82-c5ea-4de1-a474-bf25418a9533"),
CommonName = "France", CommonName = "France",
ParentId = -2 ParentId = new Guid("c2366c9c-e79a-45c8-933c-40d0301b2551")
}); });
}); });
@ -134,9 +131,9 @@ namespace UserService.DatabaseLayer.Migrations
b.HasData( b.HasData(
new new
{ {
Id = -8, Id = new Guid("a830a548-8b92-4a95-aa8e-c71ae814c6a3"),
CommonName = "Global Admin", CommonName = "Global Admin",
ParentId = -1 ParentId = new Guid("c94f4749-b7c7-418d-8c10-bc4253c4b913")
}); });
}); });
@ -144,6 +141,9 @@ namespace UserService.DatabaseLayer.Migrations
{ {
b.HasBaseType("UserService.Infrastructure.DataModels.Member"); b.HasBaseType("UserService.Infrastructure.DataModels.Member");
b.Property<string>("EMail")
.HasColumnType("TEXT");
b.Property<string>("FirstName") b.Property<string>("FirstName")
.HasColumnType("TEXT"); .HasColumnType("TEXT");
@ -158,13 +158,28 @@ namespace UserService.DatabaseLayer.Migrations
b.HasData( b.HasData(
new new
{ {
Id = -7, Id = new Guid("fd9f5d95-0898-47d4-8d25-6956077ba269"),
CommonName = "holger", CommonName = "holger",
ParentId = -2, ParentId = new Guid("c2366c9c-e79a-45c8-933c-40d0301b2551"),
IsActive = true IsActive = true
}); });
}); });
modelBuilder.Entity("UserService.Infrastructure.DataModels.MembersMember", b =>
{
b.HasOne("UserService.Infrastructure.DataModels.Member", "AttachedMember")
.WithMany("MemberOf")
.HasForeignKey("AttachedMemberId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("UserService.Infrastructure.DataModels.Member", "Member")
.WithMany("Members")
.HasForeignKey("MemberId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("UserService.Infrastructure.DataModels.Node", b => modelBuilder.Entity("UserService.Infrastructure.DataModels.Node", b =>
{ {
b.HasOne("UserService.Infrastructure.DataModels.Node", "Parent") b.HasOne("UserService.Infrastructure.DataModels.Node", "Parent")
@ -172,21 +187,6 @@ namespace UserService.DatabaseLayer.Migrations
.HasForeignKey("ParentId"); .HasForeignKey("ParentId");
}); });
modelBuilder.Entity("UserService.Infrastructure.DataModels.UserMember", b =>
{
b.HasOne("UserService.Infrastructure.DataModels.Member", "Member")
.WithMany("Members")
.HasForeignKey("MemberId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("UserService.Infrastructure.DataModels.User", "User")
.WithMany("MemberOf")
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("UserService.Infrastructure.DataModels.OrganizationUnit", b => modelBuilder.Entity("UserService.Infrastructure.DataModels.OrganizationUnit", b =>
{ {
b.HasOne("UserService.Infrastructure.DataModels.Member", "Manager") b.HasOne("UserService.Infrastructure.DataModels.Member", "Manager")

View File

@ -4,6 +4,8 @@ namespace UserService.Infrastructure.DataModels
{ {
public abstract class Member : Node public abstract class Member : Node
{ {
public ICollection<UserMember> Members { get; set; } = new List<UserMember>(); public ICollection<MembersMember> Members { get; set; } = new List<MembersMember>();
public ICollection<MembersMember> MemberOf { get; set; } = null!;
} }
} }

View File

@ -0,0 +1,13 @@
using System;
namespace UserService.Infrastructure.DataModels
{
public class MembersMember
{
public Guid MemberId { get; set; }
public Member? Member { get; set; }
public Guid AttachedMemberId { get; set; }
public Member? AttachedMember { get; set; }
}
}

View File

@ -7,12 +7,12 @@ namespace UserService.Infrastructure.DataModels
{ {
public abstract class Node : ICloneable public abstract class Node : ICloneable
{ {
public int Id { get; set; } public Guid Id { get; set; }
[Required] public string CommonName { get; set; } = null!; [Required] public string CommonName { get; set; } = null!;
public string? Description { get; set; } public string? Description { get; set; }
public ICollection<Node> Children { get; set; } = new List<Node>(); public ICollection<Node> Children { get; set; } = new List<Node>();
public Node? Parent { get; set; } //Parent public Node? Parent { get; set; } //Parent
public int? ParentId { get; set; } public Guid? ParentId { get; set; }
public override string ToString() => CommonName; public override string ToString() => CommonName;

View File

@ -14,7 +14,5 @@ namespace UserService.Infrastructure.DataModels
public string? EMail { get; set; } public string? EMail { get; set; }
public string FullName => $"{FirstName} {LastName}"; public string FullName => $"{FirstName} {LastName}";
public IEnumerable<UserMember> MemberOf { get; set; } = new List<UserMember>();
} }
} }

View File

@ -1,12 +0,0 @@
namespace UserService.Infrastructure.DataModels
{
public class UserMember
{
public int MemberId { get; set; }
public Member? Member { get; set; }
public int UserId { get; set; }
public User? User { get; set; }
}
}

View File

@ -26,7 +26,7 @@ namespace UserService.Test
var mo = await db.UserMembers.ToListAsync().ConfigureAwait(false); var mo = await db.UserMembers.ToListAsync().ConfigureAwait(false);
var securityGroupsOfUser = user.GetSecurityGroups(); var securityGroupsOfUser = user.GetSecurityGroups();
var usersOfSecurityGroup = secGroup.GetUsers(); var usersOfSecurityGroup = secGroup.GetAttachedMembers();
//var testGroup = new SecurityGroup {CommonName = "Test", Parent = ous.Last()}; //var testGroup = new SecurityGroup {CommonName = "Test", Parent = ous.Last()};
//await db.SecurityGroups.AddAsync(testGroup); //await db.SecurityGroups.AddAsync(testGroup);
//var testgroup = await db.SecurityGroups.FindAsync(1); //var testgroup = await db.SecurityGroups.FindAsync(1);

Binary file not shown.

View File

@ -74,10 +74,10 @@ else
} }
</DisplayTemplate> </DisplayTemplate>
<EditTemplate> <EditTemplate>
<Select TValue="int?" SelectedValue="@((int?)(context.CellValue))" SelectedValueChanged="@(v => context.CellValue = v)" > <Select TValue="Guid?" SelectedValue="@((Guid?)(context.CellValue))" SelectedValueChanged="@(v => context.CellValue = v)" >
@foreach (var item in OrganizationUnits ?? Enumerable.Empty<OrganizationUnit>()) @foreach (var item in OrganizationUnits ?? Enumerable.Empty<OrganizationUnit>())
{ {
<SelectItem TValue="int" Value="@(item.Id)">@item.CommonName</SelectItem> <SelectItem TValue="Guid" Value="@(item.Id)">@item.CommonName</SelectItem>
} }
</Select> </Select>
</EditTemplate> </EditTemplate>
@ -129,13 +129,17 @@ else
</TableRow> </TableRow>
</TableHeader> </TableHeader>
<TableBody> <TableBody>
@foreach (var member in SelectedSecurityGroup?.Members ?? Enumerable.Empty<MembersMember>())
{
<TableRow> <TableRow>
<TableRowHeader>1</TableRowHeader> <TableRowHeader>@member.MemberId</TableRowHeader>
<TableRowCell>Mark</TableRowCell> <TableRowCell>Mark</TableRowCell>
<TableRowCell> <TableRowCell>
<Button Color="Color.Danger">Delete</Button> <Button Color="Color.Danger">Delete</Button>
</TableRowCell> </TableRowCell>
</TableRow> </TableRow>
}
<TableRow> <TableRow>
<TableRowHeader>2</TableRowHeader> <TableRowHeader>2</TableRowHeader>
<TableRowCell>Jacob</TableRowCell> <TableRowCell>Jacob</TableRowCell>

View File

@ -57,7 +57,7 @@ namespace UserService.Pages
var securityGroup = arg.Item; var securityGroup = arg.Item;
securityGroup.MapFields(arg.Values); securityGroup.MapFields(arg.Values);
securityGroup.Parent = securityGroup.Parent =
OrganizationUnits?.FirstOrDefault(x => x.Id == (int?) arg.Values[nameof(Node.ParentId)]); OrganizationUnits?.FirstOrDefault(x => x.Id == (Guid?)arg.Values[nameof(Node.ParentId)]);
var result = await SecurityGroupsRepository.UpdateAsync(securityGroup).ConfigureAwait(false); var result = await SecurityGroupsRepository.UpdateAsync(securityGroup).ConfigureAwait(false);
arg.Cancel = !result; arg.Cancel = !result;
} }

View File

@ -90,10 +90,10 @@ else
} }
</DisplayTemplate> </DisplayTemplate>
<EditTemplate> <EditTemplate>
<Select TValue="int?" SelectedValue="@((int?)(context.CellValue))" SelectedValueChanged="@(v => context.CellValue = v)" > <Select TValue="Guid?" SelectedValue="@((Guid?)(context.CellValue))" SelectedValueChanged="@(v => context.CellValue = v)" >
@foreach (var item in OrganizationUnits ?? Enumerable.Empty<OrganizationUnit>()) @foreach (var item in OrganizationUnits ?? Enumerable.Empty<OrganizationUnit>())
{ {
<SelectItem TValue="int" Value="@(item.Id)">@item.CommonName</SelectItem> <SelectItem TValue="Guid" Value="@(item.Id)">@item.CommonName</SelectItem>
} }
</Select> </Select>
</EditTemplate> </EditTemplate>

View File

@ -71,7 +71,7 @@ namespace UserService.Pages
if (arg == null) throw new ArgumentNullException(nameof(arg)); if (arg == null) throw new ArgumentNullException(nameof(arg));
var user = arg.Item; var user = arg.Item;
user.MapFields(arg.Values); user.MapFields(arg.Values);
user.Parent = OrganizationUnits?.FirstOrDefault(x => x.Id == (int?)arg.Values[nameof(Node.ParentId)]); user.Parent = OrganizationUnits?.FirstOrDefault(x => x.Id == (Guid?)arg.Values[nameof(Node.ParentId)]);
var result = await UsersRepository.UpdateAsync(user).ConfigureAwait(false); var result = await UsersRepository.UpdateAsync(user).ConfigureAwait(false);
arg.Cancel = !result; arg.Cancel = !result;
} }