using Infrastructure.Application.Entites.Settings; using Infrastructure.Domain; using Infrastructure.Extensions; using IoT.Shared.Application.Domain.Entities; using Microsoft.EntityFrameworkCore; using System.Linq; namespace IoT.Shared { public class IoTSharedDbConfig { public static void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity(); // modelBuilder.Entity().Property(o => o.UserName).IsRequired(); modelBuilder.Entity().HasIndex(o => o.UserName).IsUnique(); modelBuilder.Entity().HasIndex(o => o.Email).IsUnique(); modelBuilder.Entity().HasIndex(o => o.PhoneNumber).IsUnique(); modelBuilder.Entity().Property(o => o.Name).IsRequired(); modelBuilder.Entity().HasIndex(o => o.Name).IsUnique(); modelBuilder.Entity().HasOne(o => o.Organ).WithMany(o => o.Roles).HasForeignKey(o => o.OrganId).OnDelete(DeleteBehavior.Cascade); modelBuilder.Entity().HasOne(o => o.Organ).WithMany(o => o.Categories).HasForeignKey(o => o.OrganId).OnDelete(DeleteBehavior.Cascade); modelBuilder.Entity().HasIndex(o => o.Number).IsUnique(); modelBuilder.Entity().HasIndex(o => o.Number).IsUnique(); modelBuilder.Entity().HasOne(o => o.Category).WithMany(o => o.Permissions).HasForeignKey(o => o.CategoryId).OnDelete(DeleteBehavior.SetNull); modelBuilder.Entity().HasOne(o => o.User).WithMany(o => o.UserRoles).HasForeignKey(o => o.UserId); modelBuilder.Entity().HasOne(o => o.Role).WithMany(o => o.UserRoles).HasForeignKey(o => o.RoleId); modelBuilder.Entity().HasIndex(o => new { o.UserId, o.RoleId }).IsUnique(); modelBuilder.Entity().HasOne(o => o.Role).WithMany(o => o.RolePermissions).HasForeignKey(o => o.RoleId); modelBuilder.Entity().HasOne(o => o.Permission).WithMany(o => o.RolePermissions).HasForeignKey(o => o.PermissionId); modelBuilder.Entity().HasIndex(o => new { o.RoleId, o.PermissionId }).IsUnique(); // modelBuilder.Entity().HasIndex(o => o.Number).IsUnique(); // modelBuilder.Entity().HasIndex(o => o.Number).IsUnique(); modelBuilder.Entity().HasOne(o => o.Category).WithMany(o => o.Products).HasForeignKey(o => o.CategoryId); modelBuilder.Entity().HasIndex(o => o.Number).IsUnique(); modelBuilder.Entity().HasOne(o => o.Product).WithMany(o => o.Apis).HasForeignKey(o => o.ProductId); modelBuilder.Entity().HasIndex(o => new { o.ProductId, o.Name }).IsUnique(); modelBuilder.Entity().HasOne(o => o.Api).WithMany(o => o.Parameters).HasForeignKey(o => o.ApiId); // modelBuilder.Entity().HasOne(o => o.Product).WithMany(o => o.Devices).HasForeignKey(o => o.ProductId); modelBuilder.Entity().HasOne(o => o.Node).WithMany(o => o.Devices).HasForeignKey(o => o.NodeId); modelBuilder.Entity().HasIndex(o => o.Number).IsUnique(); modelBuilder.Entity().HasOne(o => o.Device).WithMany(o => o.Data).HasForeignKey(o => o.DeviceId); // modelBuilder.Entity().HasOne(o => o.Api).WithMany(o => o.Commands).HasForeignKey(o => o.ApiId); modelBuilder.Entity().HasOne(o => o.Node).WithMany(o => o.Scenes).HasForeignKey(o => o.NodeId).OnDelete(DeleteBehavior.Cascade); modelBuilder.Entity().HasOne(o => o.Scene).WithMany(o => o.SceneCommands).HasForeignKey(o => o.SceneId); modelBuilder.Entity().HasOne(o => o.Command).WithMany(o => o.SceneCommands).HasForeignKey(o => o.CommandId); modelBuilder.Entity().HasOne(o => o.Scene).WithMany(o => o.SceneTimers).HasForeignKey(o => o.SceneId); modelBuilder.Entity().HasOne(o => o.Scene).WithMany(o => o.SceneTiggers).HasForeignKey(o => o.SceneId); modelBuilder.Entity().HasOne(o => o.Data).WithMany(o => o.Tiggers).HasForeignKey(o => o.DataId); } public static void Seed(DbContext db) { foreach (var item in db.Model.GetEntityTypes()) { var type = item.ClrType; var name = type.GetDisplayName(); var number = type.Name; var category = new PermissionCategory { Name = name, Number = type.Name }; var scopeAttribute = (type.GetCustomAttributes(false).FirstOrDefault(o => o.GetType() == typeof(ScopeAttribute)) as ScopeAttribute); if (scopeAttribute != null) { var scope = scopeAttribute.Scope; if (name == "用户") { } //平台权限 if (scope.HasFlag(ScopeType.PlatformRead)) { category.Permissions.Add(new Permission { IsReadOnly = true, Name = $"查看平台{name}", Number = $"Read-Platform-{number}" }); } if (scope.HasFlag(ScopeType.PlatformAdd)) { category.Permissions.Add(new Permission { IsReadOnly = true, Name = $"添加平台{name}", Number = $"Add-Platform-{number}" }); } if (scope.HasFlag(ScopeType.PlatformEdit)) { category.Permissions.Add(new Permission { IsReadOnly = true, Name = $"修改平台{name}", Number = $"Edit-Platform-{number}" }); } if (scope.HasFlag(ScopeType.PlatformDelete)) { category.Permissions.Add(new Permission { IsReadOnly = true, Name = $"删除平台{name}", Number = $"Delete-Platform-{number}" }); } //机构权限 if (scope.HasFlag(ScopeType.OrganRead)) { category.Permissions.Add(new Permission { IsReadOnly = true, Name = $"查看机构{name}", Number = $"Read-Organ-{number}" }); } if (scope.HasFlag(ScopeType.OrganAdd)) { category.Permissions.Add(new Permission { IsReadOnly = true, Name = $"添加机构{name}", Number = $"Add-Organ-{number}" }); } if (scope.HasFlag(ScopeType.OrganEdit)) { category.Permissions.Add(new Permission { IsReadOnly = true, Name = $"修改机构{name}", Number = $"Edit-Organ-{number}" }); } if (scope.HasFlag(ScopeType.OrganDelete)) { category.Permissions.Add(new Permission { IsReadOnly = true, Name = $"删除机构{name}", Number = $"Delete-Organ-{number}" }); } //个人权限 if (scope.HasFlag(ScopeType.UserRead)) { category.Permissions.Add(new Permission { IsReadOnly = true, Name = $"查看个人{name}", Number = $"Read-User-{number}" }); } if (scope.HasFlag(ScopeType.UserAdd)) { category.Permissions.Add(new Permission { IsReadOnly = true, Name = $"添加个人{name}", Number = $"Add-User-{number}" }); } if (scope.HasFlag(ScopeType.UserEdit)) { category.Permissions.Add(new Permission { IsReadOnly = true, Name = $"修改个人{name}", Number = $"Edit-User-{number}" }); } if (scope.HasFlag(ScopeType.UserDelete)) { category.Permissions.Add(new Permission { IsReadOnly = true, Name = $"删除个人{name}", Number = $"Delete-User-{number}" }); } } db.Set().Add(category); db.SaveChanges(); } db.Set().Add(new IoTProductCategory { Id = "productcatgoryid-00".ToGuid(), Number = "00", Name = "网关", Image = "/images/gateway.svg" }); db.Set().Add(new IoTProductCategory { Id = "productcatgoryid-10".ToGuid(), Number = "10", Name = "安防", Image = "/images/safe.svg" }); db.Set().Add(new IoTProductCategory { Id = "productcatgoryid-20".ToGuid(), Number = "20", Name = "电器", Image = "/images/socket.svg" }); db.Set().Add(new IoTProductCategory { Id = "productcatgoryid-30".ToGuid(), Number = "30", Name = "照明", Image = "/images/light.svg" }); db.Set().Add(new IoTProductCategory { Id = "productcatgoryid-40".ToGuid(), Number = "40", Name = "监测", Image = "/images/monitor.svg" }); db.SaveChanges(); } } }