Former-commit-id: 99b215846161e5e36d9311483a678768133ec5a0
Former-commit-id: a1c6142ade37be073536051ac20a4ea15794e236
1.0
wanggang 5 years ago
parent f59e303e87
commit 905fdf5679

@ -14,6 +14,7 @@ using System.Linq;
namespace Infrastructure.Areas.Admin.Controllers
{
[ApiExplorerSettings(IgnoreApi = true)]
[Authorize]
[ApiController]
[Route("Admin/[controller]/[action]")]

@ -46,7 +46,6 @@ namespace Infrastructure.Web
var claims2 = userService.GetRoles(userName,organId);
claims.AddRange(claims2);
return new ClaimsPrincipal(new ClaimsIdentity(claims, JwtBearerDefaults.AuthenticationScheme));
}
catch (Exception ex)

@ -2,7 +2,13 @@
using Infrastructure.Extensions;
using Infrastructure.Security;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.ModelBinding;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using TeacherExt.Entities;
using TeacherExt.Models;
@ -29,14 +35,25 @@ namespace TeacherExt.Controllers
public IActionResult Login(LoginModel model)
{
if (ModelState.IsValid)
{
{
var user = this._userRepo.ReadOnlyTable().FirstOrDefault(o => o.UserName == model.UserName);
if (user!=null)
{
if (user.PasswordHash == this._encryptionService.CreatePasswordHash(user.PasswordSalt, model.Password))
{
Request.HttpContext.JwtSignIn(model.UserName, model.RememberMe);
return RedirectToAction("Index","Home");
if(!Request.IsAjax())
{
return RedirectToAction("Index", "Home");
}
else
{
return Json(new
{
AccessToken = Request.HttpContext.CreateJwtToken(new List<Claim> { new Claim(ClaimTypes.Name, model.UserName) }, DateTime.Now.AddYears(100)),
RefreshToken = Request.HttpContext.CreateJwtToken(new List<Claim> { new Claim(ClaimTypes.Name, model.UserName) }, DateTime.Now.AddYears(100)),
});
}
}
else
{
@ -48,7 +65,7 @@ namespace TeacherExt.Controllers
ModelState.AddModelError(nameof(model.UserName), "用户不存在");
}
}
return View();
return Result<LoginModel>(model);
}
public IActionResult Logout()
@ -56,5 +73,19 @@ namespace TeacherExt.Controllers
Request.HttpContext.JwtSignOut();
return RedirectToAction("Index", "Home");
}
protected IActionResult Result<TEditModel>(object model)
{
if (this.IsJsonRequest())
{
return Json(new
{
schema = this.GetJsonSchema<TEditModel>(),
model,
errors = ModelState.Where(o => o.Value.ValidationState == ModelValidationState.Invalid),
data = ViewData
}, new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver(), ReferenceLoopHandling = ReferenceLoopHandling.Ignore });
}
return View(model);
}
}
}

@ -2,10 +2,13 @@
using Infrastructure.Extensions;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.ModelBinding;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System;
@ -13,20 +16,26 @@ using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
using TeacherExt.Entities;
using TeacherExt.Models;
namespace TeacherExt.Controllers
{
[Authorize]
[ApiController]
[Route("[controller]/[action]")]
public class HomeController : Controller
{
private readonly IHostEnvironment _env;
private readonly ILogger<HomeController> _logger;
private readonly IRepository<Organ> _organRepo;
private readonly IRepository<User> _userRepo;
private readonly IRepository<Teacher> _teacherRepo;
private readonly IRepository<CheckLog> _checkLogRepo;
public HomeController(IHostEnvironment env,
@ -44,6 +53,8 @@ namespace TeacherExt.Controllers
this._checkLogRepo = checkLogRepo;
}
[HttpGet]
[Route("/")]
public IActionResult Index(QueryTeacherModel model)
{
var query = Query(model);
@ -68,9 +79,10 @@ namespace TeacherExt.Controllers
model.List.AddRange(list);
ViewData.SelectList(o => model.RequestEditStatus, () => this.GetRequestEditStatus(model.RequestEditStatus));
ViewData.SelectList(o => model.CheckStatus, () => this.GetCheckStatus(model.CheckStatus));
return View(model);
return Result<EditTeacherModel>(model);
}
[HttpGet]
public IActionResult Details(Guid userId)
{
var entity = this._userRepo.ReadOnlyTable()
@ -88,24 +100,25 @@ namespace TeacherExt.Controllers
model.RealName = entity.RealName;
this.EntityToModel(entity.Teacher, model);
this.ToEditModel(entity.Teacher, model);
return View(model);
return Result<EditTeacherModel>(model);
}
[HttpPost]
public IActionResult Details(EditTeacherModel model)
public IActionResult Details([FromForm] EditTeacherModel model)
{
ValidEditModel(model);
var entity = this._userRepo.Table().Include(o => o.Organ).Include(o => o.Teacher).FirstOrDefault(o => o.Id == model.UserId);
if (ModelState.IsValid)
{
if(entity.Teacher.CheckStatus!=model.CheckStatus)
if (entity.Teacher.CheckStatus != model.CheckStatus)
{
this._checkLogRepo.Add( new CheckLog {
this._checkLogRepo.Add(new CheckLog
{
UpdateBy = User.Identity.Name,
UpdateAt = DateTime.Now,
UserName = entity.UserName,
FromStatus = entity.Teacher.CheckStatus,
ToStatus=model.CheckStatus
ToStatus = model.CheckStatus
});
}
entity.Teacher.From(model);
@ -114,9 +127,10 @@ namespace TeacherExt.Controllers
}
this.EntityToModel(entity?.Teacher, model);
this.ToEditModel(entity?.Teacher, model);
return View(model);
return Result<EditTeacherModel>(model);
}
[HttpGet]
public IActionResult Add()
{
var model = new EditTeacherModel();
@ -124,6 +138,7 @@ namespace TeacherExt.Controllers
return View(model);
}
[HttpGet]
public IActionResult Edit(Guid userId)
{
var entity = this._userRepo.ReadOnlyTable()
@ -141,11 +156,11 @@ namespace TeacherExt.Controllers
model.RealName = entity.RealName;
this.EntityToModel(entity.Teacher, model);
this.ToEditModel(entity.Teacher, model);
return View(model);
return Result<EditTeacherModel>(model);
}
[HttpPost]
public IActionResult Add(EditTeacherModel model)
public IActionResult Add([FromForm] EditTeacherModel model)
{
if (ModelState.IsValid)
{
@ -160,7 +175,7 @@ namespace TeacherExt.Controllers
}
[HttpPost]
public IActionResult Edit(EditTeacherModel model)
public IActionResult Edit([FromForm] EditTeacherModel model)
{
ValidEditModel(model);
var entity = this._userRepo.Table().Include(o => o.Organ).Include(o => o.Teacher).FirstOrDefault(o => o.Id == model.UserId);
@ -179,14 +194,15 @@ namespace TeacherExt.Controllers
return View(model);
}
public IActionResult History(QueryHistoryModel model)
[HttpGet]
public IActionResult History([FromQuery] QueryHistoryModel model)
{
var query = this._checkLogRepo.ReadOnlyTable()
.Where(o => o.UserName == model.UserName)
.OrderByDescending(o => o.UpdateAt);
model.TotalCount = query.Count();
var list = query.Skip(model.PageSize * (model.PageIndex - 1))
.OrderByDescending(o=>o.UpdateAt)
.OrderByDescending(o => o.UpdateAt)
.Take(model.PageSize)
.ToList()
.Select(o =>
@ -196,7 +212,60 @@ namespace TeacherExt.Controllers
})
.ToList();
model.List.AddRange(list);
return View(model);
return Result<EditTeacherModel>(model);
}
/// <summary>
/// https://github.com/nissl-lab/npoi/wiki/How-to-use-NPOI-on-Linux
/// apt-get install libgdiplus libc6-dev
/// cd /usr/lib
/// ln -s libgdiplus.so gdiplus.dll
/// </summary>
/// <returns></returns>
[HttpGet]
public FileResult Export([FromQuery] QueryTeacherModel model)
{
var template = Path.Combine(this._env.ContentRootPath, "wwwroot", "teacher.xlsx");
using var fs = System.IO.File.OpenRead(template);
var wk = new XSSFWorkbook(fs);
var sheet = wk.GetSheetAt(0);
this.ExportInternal(sheet, model);
using var ms = new MemoryStream();
wk.Write(ms);
return File(ms.ToArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", $"教师列表_{DateTime.Now.ToString("yyyy_MM-dd_HH_mm_ss")}.xlsx");
}
private IQueryable<User> Query(QueryTeacherModel model)
{
var userName = User.Identity.Name;
var organId = this._userRepo.ReadOnlyTable().Where(o => o.UserName == userName).Select(o => o.OrganId).FirstOrDefault();
model.OrganId = model.OrganId.HasValue ? model.OrganId : organId;
if (User.IsInRole("局管理员"))
{
model.Organs = this._organRepo.Table().ToList().Where(o => o.ParentId == null).ToList();
}
else
{
model.Organs = this._organRepo.ReadOnlyTable().ToList().Where(o => o.Id == organId).ToList();
}
var query = this._userRepo.ReadOnlyTable().Include(o => o.Organ).Include(o => o.Teacher).AsQueryable();
if (User.IsInRole("局管理员"))
{
//全部数据
}
else if (User.IsInRole("校管理员"))
{
query = query.Where(o => o.OrganId == organId);
}
else
{
query = query.Where(o => o.UserName == userName);
}
query = query
.WhereIf(!string.IsNullOrEmpty(model.RequestEditStatus), o => o.Teacher.RequestEditStatus == model.RequestEditStatus)
.WhereIf(!string.IsNullOrEmpty(model.CheckStatus), o => o.Teacher.CheckStatus == model.CheckStatus)
.WhereIf(!string.IsNullOrEmpty(model.RealName), o => o.RealName.Contains(model.RealName));
return query;
}
private void ValidEditModel(EditTeacherModel model)
@ -290,58 +359,6 @@ namespace TeacherExt.Controllers
}
}
/// <summary>
/// https://github.com/nissl-lab/npoi/wiki/How-to-use-NPOI-on-Linux
/// apt-get install libgdiplus libc6-dev
/// cd /usr/lib
/// ln -s libgdiplus.so gdiplus.dll
/// </summary>
/// <returns></returns>
public FileResult Export(QueryTeacherModel model)
{
var template = Path.Combine(this._env.ContentRootPath, "wwwroot", "teacher.xlsx");
using var fs = System.IO.File.OpenRead(template);
var wk = new XSSFWorkbook(fs);
var sheet = wk.GetSheetAt(0);
this.ExportInternal(sheet, model);
using var ms = new MemoryStream();
wk.Write(ms);
return File(ms.ToArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", $"教师列表_{DateTime.Now.ToString("yyyy_MM-dd_HH_mm_ss")}.xlsx");
}
private IQueryable<User> Query(QueryTeacherModel model)
{
var userName = User.Identity.Name;
var organId = this._userRepo.ReadOnlyTable().Where(o => o.UserName == userName).Select(o => o.OrganId).FirstOrDefault();
model.OrganId = model.OrganId.HasValue ? model.OrganId : organId;
if (User.IsInRole("局管理员"))
{
model.Organs = this._organRepo.Table().ToList().Where(o => o.ParentId == null).ToList();
}
else
{
model.Organs = this._organRepo.ReadOnlyTable().ToList().Where(o => o.Id == organId).ToList();
}
var query = this._userRepo.ReadOnlyTable().Include(o => o.Organ).Include(o => o.Teacher).AsQueryable();
if (User.IsInRole("局管理员"))
{
//全部数据
}
else if (User.IsInRole("校管理员"))
{
query = query.Where(o => o.OrganId == organId);
}
else
{
query = query.Where(o => o.UserName == userName);
}
query = query
.WhereIf(!string.IsNullOrEmpty(model.RequestEditStatus), o => o.Teacher.RequestEditStatus == model.RequestEditStatus)
.WhereIf(!string.IsNullOrEmpty(model.CheckStatus), o => o.Teacher.CheckStatus == model.CheckStatus)
.WhereIf(!string.IsNullOrEmpty(model.RealName), o => o.RealName.Contains(model.RealName));
return query;
}
private void ExportInternal(ISheet sheet, QueryTeacherModel model)
{
var style = sheet.Workbook.CreateCellStyle();
@ -353,7 +370,7 @@ namespace TeacherExt.Controllers
.ToList()
.Select(o =>
{
var m = o.Teacher != null ? o.Teacher.To<EditTeacherModel>() : new EditTeacherModel { Id=Guid.Empty};
var m = o.Teacher != null ? o.Teacher.To<EditTeacherModel>() : new EditTeacherModel { Id = Guid.Empty };
if (o.Teacher != null)
{
this.EntityToModel(o.Teacher, m);
@ -378,21 +395,21 @@ namespace TeacherExt.Controllers
row.Order(02).CreateCell(++colIndex).SetStyle(style).SetType(CellType.String).SetCellValue(teacher.UserType);
row.Order(03).CreateCell(++colIndex).SetStyle(style).SetType(CellType.String).SetCellValue(teacher.RealName);
row.Order(04).CreateCell(++colIndex).SetStyle(style).SetType(CellType.String).SetCellValue(teacher.Sex);
row.Order(05).CreateCell(++colIndex).SetStyle(style).SetType(CellType.String).SetCellValue(teacher.Birthday.HasValue? teacher.Birthday.Value.ToString("yyyy-MM"):"");
row.Order(06).CreateCell(++colIndex).SetStyle(style).SetType(CellType.Numeric).SetCellValue(teacher.Age.HasValue? teacher.Age.Value:0);
row.Order(05).CreateCell(++colIndex).SetStyle(style).SetType(CellType.String).SetCellValue(teacher.Birthday.HasValue ? teacher.Birthday.Value.ToString("yyyy-MM") : "");
row.Order(06).CreateCell(++colIndex).SetStyle(style).SetType(CellType.Numeric).SetCellValue(teacher.Age.HasValue ? teacher.Age.Value : 0);
row.Order(07).CreateCell(++colIndex).SetStyle(style).SetType(CellType.String).SetCellValue(teacher.Nation);
row.Order(08).CreateCell(++colIndex).SetStyle(style).SetType(CellType.String).SetCellValue(teacher.NativePlace);
row.Order(09).CreateCell(++colIndex).SetStyle(style).SetType(CellType.String).SetCellValue(teacher.PhoneNumber);
row.Order(10).CreateCell(++colIndex).SetStyle(style).SetType(CellType.String).SetCellValue(teacher.IdNumber);
row.Order(11).CreateCell(++colIndex).SetStyle(style).SetType(CellType.String).SetCellValue(teacher.JobStart.HasValue? teacher.JobStart.Value.ToString("yyyy-MM"):"");
row.Order(12).CreateCell(++colIndex).SetStyle(style).SetType(CellType.Numeric).SetCellValue(teacher.JobAge.HasValue?teacher.JobAge.Value:0);
row.Order(11).CreateCell(++colIndex).SetStyle(style).SetType(CellType.String).SetCellValue(teacher.JobStart.HasValue ? teacher.JobStart.Value.ToString("yyyy-MM") : "");
row.Order(12).CreateCell(++colIndex).SetStyle(style).SetType(CellType.Numeric).SetCellValue(teacher.JobAge.HasValue ? teacher.JobAge.Value : 0);
row.Order(13).CreateCell(++colIndex).SetStyle(style).SetType(CellType.String).SetCellValue(teacher.TeachDate.HasValue ? teacher.TeachDate.Value.ToString("yyyy-MM") : "");
row.Order(14).CreateCell(++colIndex).SetStyle(style).SetType(CellType.String).SetCellValue(teacher.CurrentJobStart.HasValue ? teacher.CurrentJobStart.Value.ToString("yyyy-MM") : "");
row.Order(15).CreateCell(++colIndex).SetStyle(style).SetType(CellType.String).SetCellValue(teacher.Politics);
row.Order(16).CreateCell(++colIndex).SetStyle(style).SetType(CellType.String).SetCellValue(teacher.JoinPartyDate.HasValue ? teacher.JoinPartyDate.Value.ToString("yyyy-MM") : "");
row.Order(17).CreateCell(++colIndex).SetStyle(style).SetType(CellType.String).SetCellValue(teacher.MaxTitle);
row.Order(18).CreateCell(++colIndex).SetStyle(style).SetType(CellType.String).SetCellValue(teacher.MaxTitleStart.HasValue? teacher.MaxTitleStart.Value.ToString("yyyy-MM"):"");
if(teacher.IsJobAsMaxTitle.HasValue)
row.Order(18).CreateCell(++colIndex).SetStyle(style).SetType(CellType.String).SetCellValue(teacher.MaxTitleStart.HasValue ? teacher.MaxTitleStart.Value.ToString("yyyy-MM") : "");
if (teacher.IsJobAsMaxTitle.HasValue)
{
if (teacher.IsJobAsMaxTitle.Value)
{
@ -442,7 +459,7 @@ namespace TeacherExt.Controllers
row.Order(44).CreateCell(++colIndex).SetStyle(style).SetType(CellType.String).SetCellValue(teacher.MainTeachGrade);
row.Order(45).CreateCell(++colIndex).SetStyle(style).SetType(CellType.String).SetCellValue(teacher.OtherTeachPeriod);
row.Order(46).CreateCell(++colIndex).SetStyle(style).SetType(CellType.String).SetCellValue(teacher.OtherTeachSubject);
if(teacher.HasPosition.HasValue)
if (teacher.HasPosition.HasValue)
{
if (teacher.HasPosition.Value)
{
@ -531,7 +548,7 @@ namespace TeacherExt.Controllers
}
}
public void EntityToModel(Teacher entity, EditTeacherModel model)
private void EntityToModel(Teacher entity, EditTeacherModel model)
{
if (entity != null)
{
@ -548,8 +565,7 @@ namespace TeacherExt.Controllers
}
}
public void ToEditModel(Teacher entity, EditTeacherModel model)
private void ToEditModel(Teacher entity, EditTeacherModel model)
{
ViewData.SelectList(o => model.RequestEditStatus, () => this.GetRequestEditStatus(model.RequestEditStatus));
ViewData.SelectList(o => model.CheckStatus, () => this.GetCheckStatus(model.CheckStatus));
@ -615,6 +631,7 @@ namespace TeacherExt.Controllers
"女",
}.ToSelectList(selected);
}
private SelectList GetNation(string selected)
{
return new string[] {
@ -695,6 +712,7 @@ namespace TeacherExt.Controllers
"其他民主党派",
}.ToSelectList(selected);
}
private SelectList GetTitle(string selected)
{
return new string[] {
@ -730,6 +748,7 @@ namespace TeacherExt.Controllers
"十二级",
}.ToSelectList(selected);
}
private SelectList GetEducationGrade(string selected)
{
return new string[] {
@ -737,6 +756,7 @@ namespace TeacherExt.Controllers
"专技十二级",
}.ToSelectList(selected);
}
private SelectList GetFullTimeSchoolType(string selected)
{
return new string[] {
@ -746,6 +766,7 @@ namespace TeacherExt.Controllers
"非师范院校非师范专业",
}.ToSelectList(selected);
}
private SelectList GetEducation(string selected)
{
return new string[] {
@ -760,6 +781,7 @@ namespace TeacherExt.Controllers
"其他",
}.ToSelectList(selected);
}
private SelectList GetDegree(string selected)
{
return new string[] {
@ -768,6 +790,7 @@ namespace TeacherExt.Controllers
"博士学位",
}.ToSelectList(selected);
}
private SelectList GetTeachPeriod(string selected)
{
return new string[] {
@ -776,6 +799,7 @@ namespace TeacherExt.Controllers
"普通初中",
}.ToSelectList(selected);
}
private SelectList GetTeachSubject(string selected)
{
return new string[] {
@ -800,6 +824,7 @@ namespace TeacherExt.Controllers
"无",
}.ToSelectList(selected);
}
private SelectList GetTeachGrade(string selected)
{
return new string[] {
@ -817,6 +842,7 @@ namespace TeacherExt.Controllers
"幼儿园小班",
}.ToSelectList(selected);
}
private SelectList GetPosition(string selected)
{
return new string[] {
@ -835,6 +861,7 @@ namespace TeacherExt.Controllers
"总务副主任",
}.ToSelectList(selected);
}
private SelectList GetTeacherCardType(string selected)
{
return new string[] {
@ -847,6 +874,7 @@ namespace TeacherExt.Controllers
"高等学校教师资格",
}.ToSelectList(selected);
}
private SelectList GetLangLevel(string selected)
{
return new string[] {
@ -857,6 +885,7 @@ namespace TeacherExt.Controllers
"三级甲等",
}.ToSelectList(selected);
}
private SelectList GetAddressArea(string selected)
{
return new string[] {
@ -867,5 +896,19 @@ namespace TeacherExt.Controllers
}.ToSelectList(selected);
}
private IActionResult Result<TEditModel>(object model)
{
if (this.IsJsonRequest())
{
return Json(new
{
schema = this.GetJsonSchema<TEditModel>(),
model,
errors = ModelState.Where(o => o.Value.ValidationState == ModelValidationState.Invalid),
data = ViewData
}, new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver(), ReferenceLoopHandling = ReferenceLoopHandling.Ignore });
}
return View(model);
}
}
}

@ -1,4 +1,5 @@
using Infrastructure.Data;
using Infrastructure.Application.Services.Settings;
using Infrastructure.Data;
using Infrastructure.Extensions;
using Infrastructure.Security;
using Infrastructure.Web;
@ -11,6 +12,7 @@ using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.IdentityModel.Tokens;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
@ -34,19 +36,21 @@ namespace TeacherExt
}
public IConfiguration Configuration { get; }
public IHostEnvironment HostEnvironment { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddSwaggerGen();
services.AddSingleton(HtmlEncoder.Create(UnicodeRanges.All));
services.AddHttpContextAccessor();
services.AddCors(options => options.AddPolicy(_origins,builder =>
{
builder.SetIsOriginAllowed(o => true)
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials();
}));
services.AddCors(options => options.AddPolicy(_origins, builder =>
{
builder.SetIsOriginAllowed(o => true)
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials();
}));
var connstr = HostEnvironment.IsDevelopment() ? Configuration.GetConnectionString("sqlite") : Configuration.GetConnectionString("mysql");
if (HostEnvironment.IsDevelopment())
{
@ -56,11 +60,29 @@ namespace TeacherExt
{
services.AddDbContext<TeacherDbContext>(o => o.UseMySql(connstr, ServerVersion.AutoDetect(connstr)));
}
services.AddDistributedMemoryCache();
services.AddScoped<DbContext, TeacherDbContext>();
services.AddTransient(typeof(IRepository<>), typeof(EfRepository<>));
services.AddTransient<IEncryptionService, EncryptionService>();
services.AddTransient<SettingService>();
services.AddTransient<ISettingService, CachedSettingService>();
services.AddTransient<IUserService, UserService>();
services.AddControllersWithViews();
services.AddMvc()
.AddNewtonsoftJson()
.AddControllersAsServices();
services.AddControllers()
.ConfigureApiBehaviorOptions(options =>
{
options.SuppressConsumesConstraintForFormFileParameters = true;
options.SuppressInferBindingSourcesForParameters = true;
options.SuppressModelStateInvalidFilter = true;
options.SuppressMapClientErrors = true;
//options.ClientErrorMapping[404].Link = "https://httpstatuses.com/404";
})
.AddNewtonsoftJson(o =>
{
o.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
});
services.AddAuthentication(x =>
{
x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
@ -81,14 +103,14 @@ namespace TeacherExt
{
OnTokenValidated = context =>
{
if (context.SecurityToken == null)
if (context.SecurityToken == null)
{
context.Fail("token error");
}
else if (DateTime.UtcNow > context.SecurityToken.ValidTo)
{
context.Fail("token time out");
}
}
return Task.CompletedTask;
},
OnForbidden = context =>
@ -116,10 +138,13 @@ namespace TeacherExt
{
context.Token = context.Request.Query["access_token"];
}
var jwtCookieName = context.HttpContext.GetJwtCookieName();
if (!context.Request.Headers.ContainsKey("Authorization") && context.Request.Cookies.Keys.Contains(jwtCookieName))
else
{
context.Token = context.Request.Cookies[jwtCookieName];
var jwtCookieName = context.HttpContext.GetJwtCookieName();
if (!context.Request.Headers.ContainsKey("Authorization") && context.Request.Cookies.Keys.Contains(jwtCookieName))
{
context.Token = context.Request.Cookies[jwtCookieName];
}
}
}
return Task.CompletedTask;
@ -136,10 +161,11 @@ namespace TeacherExt
{
app.UseDeveloperExceptionPage();
}
else
app.UseSwagger();
app.UseSwaggerUI(c =>
{
app.UseExceptionHandler("/Home/Error");
}
c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
});
app.UseStaticFiles();
app.UseRouting();
app.UseCors(_origins);
@ -163,10 +189,11 @@ namespace TeacherExt
db.Set<Role>().Add(new Role { Name = "教职工" });
db.SaveChanges();
db.Set<Organ>().Add(new Organ {
Name="教育局",
Number="jiaoyuju",
Children=new List<Organ> {
db.Set<Organ>().Add(new Organ
{
Name = "教育局",
Number = "jiaoyuju",
Children = new List<Organ> {
new Organ
{
Name="学校1",
@ -177,17 +204,18 @@ namespace TeacherExt
Name="学校2",
Number="xuexiao2"
}
}
}
});
db.SaveChanges();
db.Set<User>().Add(new User {
UserName="admin",
PasswordSalt=salt,
PasswordHash=password,
RealName="教育局管理员",
OrganId = db.Set<Organ>().FirstOrDefault(o=>o.Number=="jiaoyuju").Id,
UserRoles=new List<UserRole> { new UserRole { RoleId=db.Set<Role>().FirstOrDefault(o=>o.Name== "局管理员").Id} }
db.Set<User>().Add(new User
{
UserName = "admin",
PasswordSalt = salt,
PasswordHash = password,
RealName = "教育局管理员",
OrganId = db.Set<Organ>().FirstOrDefault(o => o.Number == "jiaoyuju").Id,
UserRoles = new List<UserRole> { new UserRole { RoleId = db.Set<Role>().FirstOrDefault(o => o.Name == "局管理员").Id } }
});
db.Set<User>().Add(new User
{

@ -9,18 +9,9 @@
</PropertyGroup>
<ItemGroup>
<Content Remove="D:\Users\WG\.nuget\packages\dotnetcore.npoi\1.2.3\contentFiles\any\netstandard2.0\NOTICE.TXT" />
</ItemGroup>
<ItemGroup>
<None Include="wwwroot\lib\kindeditor\kindeditor-all-min.js" />
<None Include="wwwroot\lib\kindeditor\lang\zh-CN.js" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="NJsonSchema" Version="10.3.2" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="5.0.1" />
<PackageReference Include="NPOI" Version="2.5.2" />
<PackageReference Include="UoN.ExpressiveAnnotations.NetCore" Version="1.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="5.6.3" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Infrastructure\Infrastructure.csproj" />

Loading…
Cancel
Save