// WTM默认页面 Wtm buidin page using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text.Json; using System.Threading.Tasks; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authentication.Cookies; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using WalkingTec.Mvvm.Core; using WalkingTec.Mvvm.Core.Extensions; using WalkingTec.Mvvm.Core.Support.Json; using WalkingTec.Mvvm.Mvc; using WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkUserVms; namespace WalkingTec.Mvvm.Admin.Api { [AuthorizeJwtWithCookie] [ApiController] [Route("api/_[controller]")] [ActionDescription("_Admin.LoginApi")] [AllRights] public class AccountController : BaseApiController { [AllowAnonymous] [HttpPost("[action]")] public async Task Login([FromForm] string account, [FromForm] string password, [FromForm] string tenant = null, [FromForm] bool rememberLogin = false) { var user = Wtm.DoLogin(account, password, tenant); if (user == null) { return BadRequest(Localizer["Sys.LoginFailed"].Value); } //其他属性可以通过user.Attributes["aaa"] = "bbb"方式赋值 Wtm.LoginUserInfo = user; AuthenticationProperties properties = null; if (rememberLogin) { properties = new AuthenticationProperties { IsPersistent = true, ExpiresUtc = DateTimeOffset.UtcNow.Add(TimeSpan.FromDays(30)) }; } var principal = Wtm.LoginUserInfo.CreatePrincipal(); await Wtm.HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, principal, properties); return CheckUserInfo(); } [AllowAnonymous] [HttpPost("[action]")] public async Task LoginJwt(SimpleLogin loginInfo) { var user = Wtm.DoLogin(loginInfo.Account, loginInfo.Password, loginInfo.Tenant); if (user == null) { ModelState.AddModelError(" ", Localizer["Sys.LoginFailed"]); return BadRequest(ModelState.GetErrorJson()); } //其他属性可以通过user.Attributes["aaa"] = "bbb"方式赋值 Wtm.LoginUserInfo = user; var authService = HttpContext.RequestServices.GetService(typeof(ITokenService)) as ITokenService; var token = await authService.IssueTokenAsync(Wtm.LoginUserInfo); return Content(JsonSerializer.Serialize(token), "application/json"); } [Public] [HttpGet("[action]")] public async Task LoginRemote([FromQuery] string _remotetoken) { if (Wtm?.LoginUserInfo != null) { var principal = Wtm.LoginUserInfo.CreatePrincipal(); await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, principal, null); } return CheckUserInfo(); } [AllRights] [HttpGet("[action]")] public IActionResult SetTenant([FromQuery] string tenant) { bool rv = Wtm.SetCurrentTenant(tenant == "" ? null : tenant); return Ok(rv); } [AllowAnonymous] [HttpPost("[action]")] public IActionResult Reg(SimpleReg regInfo) { var exist = DC.Set().Any(x => x.ITCode.ToLower() == regInfo.ITCode.ToLower()); if (exist == true) { ModelState.AddModelError("ITCode", Localizer["Login.ItcodeDuplicate"]); return BadRequest(ModelState.GetErrorJson()); } var hasuserrole = DC.Set().Where(x => x.RoleCode == "002").FirstOrDefault(); FrameworkUser user = new FrameworkUser { ITCode = regInfo.ITCode, Name = regInfo.Name, Password = Utils.GetMD5String(regInfo.Password), IsValid = true, PhotoId = regInfo.PhotoId, }; if (hasuserrole != null) { var userrole = new FrameworkUserRole { UserCode = user.ITCode, RoleCode = "002" }; DC.Set().Add(userrole); } DC.Set().Add(user); DC.SaveChanges(); return Ok(); } [HttpPost("[action]")] [AllRights] [ProducesResponseType(typeof(Token), StatusCodes.Status200OK)] public IActionResult RefreshToken(string refreshToken) { var rv = Wtm.RefreshToken(); if (rv == null) { return BadRequest(); } else { return Ok(rv); } } [AllRights] [HttpGet("[action]")] public IActionResult CheckUserInfo(bool IsApi = true) { if (Wtm.LoginUserInfo == null) { return BadRequest(); } else { var forapi = Wtm.LoginUserInfo; if (IsApi) { forapi.SetAttributesForApi(Wtm); } forapi.DataPrivileges = null; forapi.FunctionPrivileges = null; if (forapi.Attributes == null) { forapi.Attributes = new Dictionary(); } if (forapi.Attributes.ContainsKey("IsMainHost")) { forapi.Attributes.Remove("IsMainHost"); } if (ConfigInfo.HasMainHost && string.IsNullOrEmpty(Wtm.LoginUserInfo.TenantCode) == true) { forapi.Attributes.Add("IsMainHost", true); } else { forapi.Attributes.Add("IsMainHost", false); } return Ok(forapi); } } [AllRights] [HttpPost("[action]")] public IActionResult ChangePassword(ChangePasswordVM vm) { if (ConfigInfo.HasMainHost && Wtm.LoginUserInfo?.CurrentTenant == null) { return Request.RedirectCall(Wtm).Result; } if (!ModelState.IsValid) { return BadRequest(ModelState.GetErrorJson()); } else { vm.DoChange(); if (!ModelState.IsValid) { return BadRequest(ModelState.GetErrorJson()); } else { return Ok(); } } } [Public] [HttpGet("[action]")] public async Task Logout() { if (ConfigInfo.HasMainHost && Wtm.LoginUserInfo?.CurrentTenant == null) { await Wtm.CallAPI("mainhost", "/api/_account/logout", HttpMethodEnum.GET, new { }, 10); return Ok(ConfigInfo.MainHost); } else { HttpContext.Session.Clear(); await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme); return Ok("/"); } } [HttpGet("GetFrameworkRoles")] [ActionDescription("GetRoles")] [AllRights] public IActionResult GetFrameworkRoles() { if (ConfigInfo.HasMainHost && Wtm.LoginUserInfo?.CurrentTenant == null) { return Request.RedirectCall(Wtm, "/api/_account/GetFrameworkRoles").Result; } return Ok(DC.Set().GetSelectListItems(Wtm, x => x.RoleName, x => x.RoleCode)); } [HttpGet("GetFrameworkGroups")] [ActionDescription("GetGroups")] [AllRights] public IActionResult GetFrameworkGroups() { if (ConfigInfo.HasMainHost && Wtm.LoginUserInfo?.CurrentTenant == null) { return Request.RedirectCall(Wtm, "/api/_account/GetFrameworkGroups").Result; } return Ok(DC.Set().GetSelectListItems(Wtm, x => x.GroupName, x => x.GroupCode)); } [HttpGet("GetFrameworkGroupsTree")] [ActionDescription("GetGroupsTree")] [AllRights] public IActionResult GetFrameworkGroupsTree() { if (ConfigInfo.HasMainHost && Wtm.LoginUserInfo?.CurrentTenant == null) { return Request.RedirectCall(Wtm, "/api/_account/GetFrameworkGroupsTree").Result; } return Ok(DC.Set().GetTreeSelectListItems(Wtm, x => x.GroupName, x => x.GroupCode)); } [HttpGet("GetUserById")] [AllRights] public IActionResult GetUserById(string keywords) { if (ConfigInfo.HasMainHost && Wtm.LoginUserInfo?.CurrentTenant == null) { return Request.RedirectCall(Wtm, "/api/_account/GetUserById").Result; } var users = DC.Set().Where(x => x.ITCode.ToLower().StartsWith(keywords.ToLower())).GetSelectListItems(Wtm, x => x.Name + "(" + x.ITCode + ")", x => x.ITCode); return Ok(users); } [HttpGet("GetUserByGroup")] [AllRights] public IActionResult GetUserByGroup(string keywords) { if (ConfigInfo.HasMainHost && Wtm.LoginUserInfo?.CurrentTenant == null) { return Request.RedirectCall(Wtm, "/api/_account/GetUserByGroup").Result; } var users = DC.Set().Where(x => x.GroupCode == keywords).Select(x => x.UserCode).ToList(); return Ok(users); } [HttpGet("GetUserByRole")] [AllRights] public IActionResult GetUserByRole(string keywords) { if (ConfigInfo.HasMainHost && Wtm.LoginUserInfo?.CurrentTenant == null) { return Request.RedirectCall(Wtm, "/api/_account/GetUserByRole").Result; } var users = DC.Set().Where(x => x.RoleCode == keywords).Select(x => x.UserCode).ToList(); return Ok(users); } } public class SimpleLogin { public string Account { get; set; } public string Password { get; set; } public string Tenant { get; set; } public string RemoteToken { get; set; } } public class SimpleReg { [Display(Name = "_Admin.Account")] [Required(ErrorMessage = "Validate.{0}required")] [StringLength(50, ErrorMessage = "Validate.{0}stringmax{1}")] public string ITCode { get; set; } [Display(Name = "_Admin.Name")] [Required(ErrorMessage = "Validate.{0}required")] [StringLength(50, ErrorMessage = "Validate.{0}stringmax{1}")] public string Name { get; set; } [Display(Name = "Login.Password")] [Required(AllowEmptyStrings = false)] [StringLength(50, ErrorMessage = "Validate.{0}stringmax{1}")] public string Password { get; set; } [Display(Name = "_Admin.Photo")] public Guid? PhotoId { get; set; } } }