You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
iot/projects/IoT.Shared/IoTServiceStartup.cs

170 lines
10 KiB

using Application.Domain.Entities;
using Infrastructure.Data;
using Infrastructure.Extensions;
using Infrastructure.Security;
using Infrastructure.UI;
using Infrastructure.Web;
using IoT.Shared.Services;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Hosting;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace IoT.UI.Shard
{
public class IoTServiceStartup : BaseStartup
{
private readonly IWebHostEnvironment _env;
public IoTServiceStartup(IConfiguration configuration, IWebHostEnvironment env) : base(configuration, env)
{
this._env = env;
}
public override void ConfigureOptions(IServiceCollection services)
{
services.ConfigureOptions(new FileConfigureOptions(_env, new List<string> { "IoT.Shared" }));
}
public override void ConfigureServices(IServiceCollection services)
{
services.AddTransient<DataService>();
base.ConfigureServices(services);
}
public override void OnModelCreating(ModelBuilder modelBuilder)
{
if (modelBuilder == null)
{
throw new ArgumentNullException(nameof(modelBuilder));
}
modelBuilder.Entity<PermissionCategory>().HasOne(o => o.Parent).WithMany(o => o.Children).HasForeignKey(o => o.ParentId).OnDelete(DeleteBehavior.SetNull);
modelBuilder.Entity<Permission>().HasOne(o => o.Category).WithMany(o => o.Permissions).HasForeignKey(o => o.CategoryId).OnDelete(DeleteBehavior.SetNull);
modelBuilder.Entity<UserRole>().HasOne(o => o.User).WithMany(o => o.UserRoles).HasForeignKey(o => o.UserId);
modelBuilder.Entity<UserRole>().HasOne(o => o.Role).WithMany(o => o.UserRoles).HasForeignKey(o => o.RoleId);
modelBuilder.Entity<RolePermission>().HasOne(o => o.Role).WithMany(o => o.RolePermissions).HasForeignKey(o => o.RoleId);
modelBuilder.Entity<RolePermission>().HasOne(o => o.Permission).WithMany(o => o.RolePermissions).HasForeignKey(o => o.PermissionId);
modelBuilder.Entity<User>().HasIndex(o => o.UserName).IsUnique();
modelBuilder.Entity<User>().HasIndex(o => o.Email).IsUnique();
modelBuilder.Entity<Role>().HasIndex(o => o.Name).IsUnique();
modelBuilder.Entity<PermissionCategory>().HasIndex(o => o.Number).IsUnique();
modelBuilder.Entity<Permission>().HasIndex(o => o.Number).IsUnique();
modelBuilder.Entity<UserRole>().HasIndex(o => new { o.UserId, o.RoleId }).IsUnique();
modelBuilder.Entity<RolePermission>().HasIndex(o => new { o.RoleId, o.PermissionId }).IsUnique();
//
modelBuilder.Entity<Category>().HasIndex(o => o.Number).IsUnique();
modelBuilder.Entity<Product>().HasOne(o => o.Category).WithMany(o => o.Products).HasForeignKey(o => o.CategoryId);
modelBuilder.Entity<Product>().HasIndex(o => o.Number).IsUnique();
modelBuilder.Entity<Api>().HasOne(o => o.Product).WithMany(o => o.Apis).HasForeignKey(o => o.ProductId);
modelBuilder.Entity<Api>().HasIndex(o => new { o.ProductId, o.Name }).IsUnique();
modelBuilder.Entity<Node>().HasIndex(o => o.Number).IsUnique();
modelBuilder.Entity<Device>().HasOne(o => o.Product).WithMany(o => o.Devices).HasForeignKey(o => o.ProductId);
modelBuilder.Entity<Device>().HasOne(o => o.Node).WithMany(o => o.Devices).HasForeignKey(o => o.NodeId);
modelBuilder.Entity<Device>().HasIndex(o => o.Number).IsUnique();
modelBuilder.Entity<Data>().HasOne(o => o.Device).WithMany(o => o.Data).HasForeignKey(o => o.DeviceId);
modelBuilder.Entity<Parameter>().HasOne(o => o.Api).WithMany(o => o.Parameters).HasForeignKey(o => o.ApiId);
modelBuilder.Entity<LiveRecord>().Property(o => o.DeviceNumber).IsRequired();
modelBuilder.Entity<Command>().HasOne(o => o.Api).WithMany(o => o.Commands).HasForeignKey(o => o.ApiId);
modelBuilder.Entity<Scene>().HasOne(o => o.Node).WithMany(o => o.Scenes).HasForeignKey(o => o.NodeId);
modelBuilder.Entity<IoTTimer>().HasOne(o => o.Node).WithMany(o => o.Timers).HasForeignKey(o => o.NodeId);
modelBuilder.Entity<IoTTigger>().HasOne(o => o.Node).WithMany(o => o.Tiggers).HasForeignKey(o => o.NodeId);
modelBuilder.Entity<IoTTigger>().HasOne(o => o.Data).WithMany(o => o.Tiggers).HasForeignKey(o => o.DataId);
modelBuilder.Entity<SceneCommand>().HasOne(o => o.Scene).WithMany(o => o.SceneCommands).HasForeignKey(o => o.SceneId);
modelBuilder.Entity<SceneCommand>().HasOne(o => o.Command).WithMany(o => o.SceneCommands).HasForeignKey(o => o.CommandId);
modelBuilder.Entity<IoTTimerCommand>().HasOne(o => o.IoTTimer).WithMany(o => o.TimerCommands).HasForeignKey(o => o.IoTTimerId);
modelBuilder.Entity<IoTTimerCommand>().HasOne(o => o.Command).WithMany(o => o.TimerCommands).HasForeignKey(o => o.CommandId);
modelBuilder.Entity<IoTTiggerCommand>().HasOne(o => o.IoTTigger).WithMany(o => o.TiggerCommands).HasForeignKey(o => o.IoTTiggerId);
modelBuilder.Entity<IoTTiggerCommand>().HasOne(o => o.Command).WithMany(o => o.TiggerCommands).HasForeignKey(o => o.CommandId);
modelBuilder.Entity<NodeCategory>().HasIndex(o => o.Name).IsUnique();
modelBuilder.Entity<NodeCategoryNode>().HasOne(o => o.Node).WithMany(o => o.CategoryNodes).HasForeignKey(o => o.NodeId);
modelBuilder.Entity<NodeCategoryNode>().HasOne(o => o.Category).WithMany(o => o.CategoryNodes).HasForeignKey(o => o.CategoryId);
modelBuilder.Entity<NodeCategoryNode>().HasIndex(o => new { o.CategoryId, o.NodeId }).IsUnique();
}
public override void Seed(DbContext dbContext, IServiceProvider serviceProvider, IConfiguration configuration)
{
if (dbContext == null)
{
throw new ArgumentNullException(nameof(dbContext));
}
dbContext.Set<PermissionCategory>().Add(new PermissionCategory
{
Name = "配置",
Number = "EFConfigurationValue",
Permissions = new List<Permission> {
new Permission { Name = "查看配置", Number = "Read-EFConfigurationValue" },
new Permission { Name = "添加配置", Number = "Add-EFConfigurationValue" },
new Permission { Name = "修改配置", Number = "Edit-EFConfigurationValue" },
new Permission { Name = "删除配置", Number = "Delete-EFConfigurationValue" }
}
});
foreach (var item in dbContext.Model.GetEntityTypes())
{
var type = item.ClrType;
var name = type.GetDisplayName();
var number = type.Name;
var category = new PermissionCategory
{
Name = name,
Number = type.Name
};
category.Permissions.Add(new Permission { Name = $"查看{name}", Number = $"Read-{number}" });
category.Permissions.Add(new Permission { Name = $"添加{name}", Number = $"Add-{number}" });
category.Permissions.Add(new Permission { Name = $"修改{name}", Number = $"Edit-{number}" });
category.Permissions.Add(new Permission { Name = $"删除{name}", Number = $"Delete-{number}" });
dbContext.Set<PermissionCategory>().Add(category);
}
dbContext.SaveChanges();
var saRole = new Role { Name = "超级管理员", IsReadOnly = true };
var adminRole = new Role { Name = "管理员", IsReadOnly = true };
//var skips = new string[] { "添加节点", "删除节点", "添加设备", "删除设备" };
foreach (var item in dbContext.Set<Permission>())
{
saRole.RolePermissions.Add(new RolePermission { Permission = item, IsReadOnly = true });
if (!item.Name.Contains("删除"))// && !skips.Contains(item.Name))
{
adminRole.RolePermissions.Add(new RolePermission { Permission = item, IsReadOnly = true });
}
}
var encryptionService = serviceProvider.GetService<IEncryptionService>();
var securityStam = "123456";
dbContext.Set<User>().Add(new User
{
UserName = "super",
SecurityStamp = securityStam,
PasswordHash = encryptionService.CreatePasswordHash("123456", securityStam),
Email = "super@test.com",
UserRoles = new List<UserRole> { new UserRole { Role = saRole } }
});
dbContext.Set<User>().Add(new User
{
UserName = "admin",
SecurityStamp = securityStam,
PasswordHash = encryptionService.CreatePasswordHash("123456", securityStam),
Email = "admin@test.com",
UserRoles = new List<UserRole> { new UserRole { Role = adminRole } }
});
dbContext.SaveChanges();
dbContext.Set<Category>().Add(new Category { Id = "productcatgoryid-00".ToGuid(), Number = "00", Name = "网关", Image = "/images/gateway.png" });
dbContext.Set<Category>().Add(new Category { Id = "productcatgoryid-10".ToGuid(), Number = "10", Name = "安防", Image = "/images/safe.png" });
dbContext.Set<Category>().Add(new Category { Id = "productcatgoryid-20".ToGuid(), Number = "20", Name = "电器", Image = "/images/socket.png" });
dbContext.Set<Category>().Add(new Category { Id = "productcatgoryid-30".ToGuid(), Number = "30", Name = "照明", Image = "/images/light.png" });
dbContext.Set<Category>().Add(new Category { Id = "productcatgoryid-40".ToGuid(), Number = "40", Name = "监测", Image = "/images/monitor.png" });
dbContext.SaveChanges();
dbContext.Set<NodeCategory>().Add(new NodeCategory { Name = "智慧教室", Template = "node" });
dbContext.SaveChanges();
}
}
}