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

View File

@ -7,7 +7,7 @@ namespace UserService.DatabaseLayer.DataModels
{
public DbSet<User> Users { 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!;
protected override void OnConfiguring(DbContextOptionsBuilder options)

View File

@ -9,7 +9,7 @@ using UserService.DatabaseLayer.DataModels;
namespace UserService.DatabaseLayer.Migrations
{
[DbContext(typeof(UserServiceDbContext))]
[Migration("20200821193933_InitialCreate")]
[Migration("20200906191545_InitialCreate")]
partial class InitialCreate
{
protected override void BuildTargetModel(ModelBuilder modelBuilder)
@ -18,11 +18,33 @@ namespace UserService.DatabaseLayer.Migrations
modelBuilder
.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 =>
{
b.Property<int>("Id")
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
.HasColumnType("TEXT");
b.Property<string>("CommonName")
.IsRequired()
@ -35,8 +57,8 @@ namespace UserService.DatabaseLayer.Migrations
.IsRequired()
.HasColumnType("TEXT");
b.Property<int?>("ParentId")
.HasColumnType("INTEGER");
b.Property<Guid?>("ParentId")
.HasColumnType("TEXT");
b.HasKey("Id");
@ -47,35 +69,10 @@ namespace UserService.DatabaseLayer.Migrations
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 =>
{
b.HasBaseType("UserService.Infrastructure.DataModels.Node");
b.Property<string>("EMail")
.HasColumnType("TEXT");
b.HasDiscriminator().HasValue("Member");
});
@ -83,8 +80,8 @@ namespace UserService.DatabaseLayer.Migrations
{
b.HasBaseType("UserService.Infrastructure.DataModels.Node");
b.Property<int?>("ManagerId")
.HasColumnType("INTEGER");
b.Property<Guid?>("ManagerId")
.HasColumnType("TEXT");
b.HasIndex("ManagerId");
@ -93,37 +90,37 @@ namespace UserService.DatabaseLayer.Migrations
b.HasData(
new
{
Id = -2,
Id = new Guid("c2366c9c-e79a-45c8-933c-40d0301b2551"),
CommonName = "Users"
},
new
{
Id = -1,
Id = new Guid("c94f4749-b7c7-418d-8c10-bc4253c4b913"),
CommonName = "Groups"
},
new
{
Id = -6,
Id = new Guid("c743fff4-9bdf-45a4-b4c9-391f6fc46433"),
CommonName = "Germany",
ParentId = -2
ParentId = new Guid("c2366c9c-e79a-45c8-933c-40d0301b2551")
},
new
{
Id = -5,
Id = new Guid("cecbf557-59cc-475c-b136-02da39aa4911"),
CommonName = "USA",
ParentId = -2
ParentId = new Guid("c2366c9c-e79a-45c8-933c-40d0301b2551")
},
new
{
Id = -4,
Id = new Guid("89e1d70e-da3d-4cc9-81f1-a2fa76a6d33b"),
CommonName = "Arizona",
ParentId = -5
ParentId = new Guid("cecbf557-59cc-475c-b136-02da39aa4911")
},
new
{
Id = -3,
Id = new Guid("97ad8c82-c5ea-4de1-a474-bf25418a9533"),
CommonName = "France",
ParentId = -2
ParentId = new Guid("c2366c9c-e79a-45c8-933c-40d0301b2551")
});
});
@ -136,9 +133,9 @@ namespace UserService.DatabaseLayer.Migrations
b.HasData(
new
{
Id = -8,
Id = new Guid("a830a548-8b92-4a95-aa8e-c71ae814c6a3"),
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.Property<string>("EMail")
.HasColumnType("TEXT");
b.Property<string>("FirstName")
.HasColumnType("TEXT");
@ -160,13 +160,28 @@ namespace UserService.DatabaseLayer.Migrations
b.HasData(
new
{
Id = -7,
Id = new Guid("fd9f5d95-0898-47d4-8d25-6956077ba269"),
CommonName = "holger",
ParentId = -2,
ParentId = new Guid("c2366c9c-e79a-45c8-933c-40d0301b2551"),
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 =>
{
b.HasOne("UserService.Infrastructure.DataModels.Node", "Parent")
@ -174,21 +189,6 @@ namespace UserService.DatabaseLayer.Migrations
.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 =>
{
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
{
@ -10,17 +11,16 @@ namespace UserService.DatabaseLayer.Migrations
name: "Node",
columns: table => new
{
Id = table.Column<int>(nullable: false)
.Annotation("Sqlite:Autoincrement", true),
Id = table.Column<Guid>(nullable: false),
CommonName = table.Column<string>(nullable: false),
Description = table.Column<string>(nullable: true),
ParentId = table.Column<int>(nullable: true),
ParentId = table.Column<Guid>(nullable: true),
Discriminator = table.Column<string>(nullable: false),
EMail = table.Column<string>(nullable: true),
FirstName = table.Column<string>(nullable: true),
LastName = table.Column<string>(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 =>
{
@ -43,21 +43,21 @@ namespace UserService.DatabaseLayer.Migrations
name: "UserMembers",
columns: table => new
{
MemberId = table.Column<int>(nullable: false),
UserId = table.Column<int>(nullable: false)
MemberId = table.Column<Guid>(nullable: false),
AttachedMemberId = table.Column<Guid>(nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_UserMembers", x => new { x.MemberId, x.UserId });
table.PrimaryKey("PK_UserMembers", x => new { x.MemberId, x.AttachedMemberId });
table.ForeignKey(
name: "FK_UserMembers_Node_MemberId",
column: x => x.MemberId,
name: "FK_UserMembers_Node_AttachedMemberId",
column: x => x.AttachedMemberId,
principalTable: "Node",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_UserMembers_Node_UserId",
column: x => x.UserId,
name: "FK_UserMembers_Node_MemberId",
column: x => x.MemberId,
principalTable: "Node",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
@ -66,47 +66,47 @@ namespace UserService.DatabaseLayer.Migrations
migrationBuilder.InsertData(
table: "Node",
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(
table: "Node",
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(
table: "Node",
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(
table: "Node",
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(
table: "Node",
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(
table: "Node",
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(
table: "Node",
columns: new[] { "Id", "CommonName", "Description", "Discriminator", "ParentId", "EMail" },
values: new object[] { -8, "Global Admin", null, "SecurityGroup", -1, null });
columns: new[] { "Id", "CommonName", "Description", "Discriminator", "ParentId" },
values: new object[] { new Guid("a830a548-8b92-4a95-aa8e-c71ae814c6a3"), "Global Admin", null, "SecurityGroup", new Guid("c94f4749-b7c7-418d-8c10-bc4253c4b913") });
migrationBuilder.InsertData(
table: "Node",
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(
table: "UserMembers",
columns: new[] { "MemberId", "UserId" },
values: new object[] { -8, -7 });
columns: new[] { "MemberId", "AttachedMemberId" },
values: new object[] { new Guid("a830a548-8b92-4a95-aa8e-c71ae814c6a3"), new Guid("fd9f5d95-0898-47d4-8d25-6956077ba269") });
migrationBuilder.CreateIndex(
name: "IX_Node_ParentId",
@ -119,9 +119,9 @@ namespace UserService.DatabaseLayer.Migrations
column: "ManagerId");
migrationBuilder.CreateIndex(
name: "IX_UserMembers_UserId",
name: "IX_UserMembers_AttachedMemberId",
table: "UserMembers",
column: "UserId");
column: "AttachedMemberId");
}
protected override void Down(MigrationBuilder migrationBuilder)

View File

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

View File

@ -4,6 +4,8 @@ namespace UserService.Infrastructure.DataModels
{
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 int Id { get; set; }
public Guid Id { get; set; }
[Required] public string CommonName { get; set; } = null!;
public string? Description { get; set; }
public ICollection<Node> Children { get; set; } = new List<Node>();
public Node? Parent { get; set; } //Parent
public int? ParentId { get; set; }
public Guid? ParentId { get; set; }
public override string ToString() => CommonName;

View File

@ -14,7 +14,5 @@ namespace UserService.Infrastructure.DataModels
public string? EMail { get; set; }
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 securityGroupsOfUser = user.GetSecurityGroups();
var usersOfSecurityGroup = secGroup.GetUsers();
var usersOfSecurityGroup = secGroup.GetAttachedMembers();
//var testGroup = new SecurityGroup {CommonName = "Test", Parent = ous.Last()};
//await db.SecurityGroups.AddAsync(testGroup);
//var testgroup = await db.SecurityGroups.FindAsync(1);

Binary file not shown.

View File

@ -74,10 +74,10 @@ else
}
</DisplayTemplate>
<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>())
{
<SelectItem TValue="int" Value="@(item.Id)">@item.CommonName</SelectItem>
<SelectItem TValue="Guid" Value="@(item.Id)">@item.CommonName</SelectItem>
}
</Select>
</EditTemplate>
@ -128,25 +128,29 @@ else
<TableHeaderCell></TableHeaderCell>
</TableRow>
</TableHeader>
<TableBody>
<TableRow>
<TableRowHeader>1</TableRowHeader>
<TableRowCell>Mark</TableRowCell>
<TableRowCell>
<Button Color="Color.Danger">Delete</Button>
</TableRowCell>
</TableRow>
<TableRow>
<TableRowHeader>2</TableRowHeader>
<TableRowCell>Jacob</TableRowCell>
<TableRowCell><Button>Delete</Button></TableRowCell>
</TableRow>
<TableRow>
<TableRowHeader>3</TableRowHeader>
<TableRowCell>Larry</TableRowCell>
<TableRowCell><Button>Delete</Button></TableRowCell>
</TableRow>
</TableBody>
<TableBody>
@foreach (var member in SelectedSecurityGroup?.Members ?? Enumerable.Empty<MembersMember>())
{
<TableRow>
<TableRowHeader>@member.MemberId</TableRowHeader>
<TableRowCell>Mark</TableRowCell>
<TableRowCell>
<Button Color="Color.Danger">Delete</Button>
</TableRowCell>
</TableRow>
}
<TableRow>
<TableRowHeader>2</TableRowHeader>
<TableRowCell>Jacob</TableRowCell>
<TableRowCell><Button>Delete</Button></TableRowCell>
</TableRow>
<TableRow>
<TableRowHeader>3</TableRowHeader>
<TableRowCell>Larry</TableRowCell>
<TableRowCell><Button>Delete</Button></TableRowCell>
</TableRow>
</TableBody>
</Table>
</Column>
</Row>

View File

@ -15,7 +15,7 @@ namespace UserService.Pages
[Inject] private ISecurityGroupsRepository SecurityGroupsRepository { get; set; } = null!;
[Inject] private IUsersRepository UsersRepository { get; set; } = null!;
[Inject] private IOrganizationUnitsRepository OrganizationUnitsRepository { get; set; } = null!;
// reference to the modal component
@ -57,7 +57,7 @@ namespace UserService.Pages
var securityGroup = arg.Item;
securityGroup.MapFields(arg.Values);
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);
arg.Cancel = !result;
}
@ -89,14 +89,14 @@ namespace UserService.Pages
}
protected async Task AddToListAsync()
{
//SelectedSecurityGroup.Members.Add(new UserMember());
}
protected async Task AddToListAsync()
{
//SelectedSecurityGroup.Members.Add(new UserMember());
}
protected void OnButtonClicked(SecurityGroup securityGroup)
protected void OnButtonClicked(SecurityGroup securityGroup)
{
SelectedSecurityGroup = securityGroup;
ModalRef.Show();

View File

@ -90,10 +90,10 @@ else
}
</DisplayTemplate>
<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>())
{
<SelectItem TValue="int" Value="@(item.Id)">@item.CommonName</SelectItem>
<SelectItem TValue="Guid" Value="@(item.Id)">@item.CommonName</SelectItem>
}
</Select>
</EditTemplate>

View File

@ -71,7 +71,7 @@ namespace UserService.Pages
if (arg == null) throw new ArgumentNullException(nameof(arg));
var user = arg.Item;
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);
arg.Cancel = !result;
}