109 lines
2.9 KiB
C#
109 lines
2.9 KiB
C#
using Microsoft.AspNetCore.Authorization;
|
|
using YLErp.Configuration;
|
|
|
|
namespace YLErp.Web
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public class ErpAuthorizeHandler
|
|
{
|
|
public bool Handle(AuthorizationHandlerContext context)
|
|
{
|
|
UserInfo userInfo = null;
|
|
|
|
var userId = context.User.GetUserId();
|
|
|
|
if (userId < 1)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
var userToken = "0";
|
|
var UseSingleLogin = PS.Config.UseSingleLogin;
|
|
if (UseSingleLogin)
|
|
{
|
|
userToken = context.User.GetUserToken() ?? "0";
|
|
}
|
|
|
|
userInfo = Server.CacheProvider.Get("loginUser^" + userId) as UserInfo;
|
|
|
|
if (userInfo != null)
|
|
{
|
|
if (UseSingleLogin && userInfo.UserToken != userToken)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
if (context.Resource is HttpContext httpContext && httpContext.Request.Headers["X-Requested-With"] == "XMLHttpRequest")
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
|
|
if (PS.Config.Company == CompanyEnum.国泰君安 && CheckLoginTimeout(context.User.GetUserLoginTime()))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
if (userInfo != null)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
var predicate = PredicateBuilder.Create<SystemUser>(n => n.Id == userId);
|
|
if (UseSingleLogin && userToken != AuthHelper.JwtUserToken)
|
|
{
|
|
predicate = predicate.And(n => n.UserToken == userToken);
|
|
}
|
|
|
|
using (var db = new ErpBaseContext())
|
|
{
|
|
var dbUser = db.SystemUsers.FirstOrDefault(predicate);
|
|
if (dbUser == null)
|
|
{
|
|
return false;
|
|
}
|
|
userInfo = UserInfo.FromDbUser(dbUser);
|
|
Server.CacheProvider.SetWithSlidingExpiration("loginUser^" + dbUser.Id, userInfo, TimeSpan.FromMinutes(30));
|
|
return true;
|
|
}
|
|
}
|
|
|
|
static readonly TimeSpan NightOpenTime = new TimeSpan(20, 32, 0);
|
|
|
|
private static bool CheckLoginTimeout(DateTime createTime)
|
|
{
|
|
var now = DateTime.Now;
|
|
|
|
if (now.Hour < 8)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
if (createTime.Hour < 8 || createTime.Day != now.Day)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
if (now.TimeOfDay < NightOpenTime)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
if (createTime.TimeOfDay < NightOpenTime)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public static readonly ErpAuthorizeHandler Default;
|
|
|
|
static ErpAuthorizeHandler()
|
|
{
|
|
Default = new ErpAuthorizeHandler();
|
|
}
|
|
}
|
|
} |