78 lines
3.4 KiB
C#
78 lines
3.4 KiB
C#
using System;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using System.Collections.Generic;
|
|
using UserService.Infrastructure.DataModels;
|
|
|
|
namespace UserService.DatabaseLayer.DataModels
|
|
{
|
|
public static class ModelBuilderExtensions
|
|
{
|
|
public static void Seed(this ModelBuilder modelBuilder)
|
|
{
|
|
if (modelBuilder == null) throw new ArgumentNullException(nameof(modelBuilder));
|
|
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 = Guid.NewGuid(), ParentId = users.Id };
|
|
modelBuilder.Entity<User>().HasData(user);
|
|
var secGroup = new SecurityGroup { CommonName = "Global Admin", Id = Guid.NewGuid(), ParentId = groups.Id };
|
|
modelBuilder.Entity<SecurityGroup>().HasData(secGroup);
|
|
|
|
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<MembersMember>()
|
|
.HasKey(bc => new { bc.MemberId, bc.AttachedMemberId });
|
|
modelBuilder.Entity<MembersMember>()
|
|
.HasOne(bc => bc.AttachedMember)
|
|
.WithMany(b => b!.MemberOf)
|
|
.HasForeignKey(bc => bc.AttachedMemberId);
|
|
modelBuilder.Entity<MembersMember>()
|
|
.HasOne(bc => bc.Member)
|
|
.WithMany(c => c!.Members)
|
|
.HasForeignKey(bc => bc.MemberId);
|
|
modelBuilder.Entity<Node>()
|
|
.HasMany(c => c.Children)
|
|
.WithOne(e => e.Parent!)
|
|
.HasForeignKey(bc => bc.ParentId);
|
|
}
|
|
}
|
|
|
|
public static class UserExtensions
|
|
{
|
|
public static IEnumerable<SecurityGroup> GetSecurityGroups(this User user)
|
|
{
|
|
if (user == null) throw new ArgumentNullException(nameof(user));
|
|
foreach (var userMember in user.MemberOf)
|
|
{
|
|
if (userMember.Member is SecurityGroup securityGroup)
|
|
{
|
|
yield return securityGroup;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
public static class SecurityGroupExtensions
|
|
{
|
|
public static IEnumerable<Member> GetAttachedMembers(this SecurityGroup securityGroup)
|
|
{
|
|
if (securityGroup == null) throw new ArgumentNullException(nameof(securityGroup));
|
|
foreach (var userMember in securityGroup.Members)
|
|
{
|
|
if (userMember.AttachedMember is null) continue;
|
|
yield return userMember.AttachedMember;
|
|
}
|
|
}
|
|
|
|
}
|
|
} |