Users: fixed queries
This commit is contained in:
parent
7803696e01
commit
d4b736103a
@ -202,7 +202,7 @@ namespace ASC.Core.Data
|
||||
|
||||
public Group GetGroup(int tenant, Guid id)
|
||||
{
|
||||
return GetGroupQuery(UserDbContext, tenant, default)
|
||||
return GetGroupQuery(tenant)
|
||||
.Where(r => r.Id == id)
|
||||
.Select(FromDbGroupToGroup)
|
||||
.FirstOrDefault();
|
||||
@ -210,14 +210,14 @@ namespace ASC.Core.Data
|
||||
|
||||
public IDictionary<Guid, Group> GetGroups(int tenant, DateTime from)
|
||||
{
|
||||
return GetGroupQuery(UserDbContext, tenant, from)
|
||||
return GetGroupQuery(tenant, from)
|
||||
.Select(FromDbGroupToGroup)
|
||||
.ToDictionary(r => r.Id, r => r);
|
||||
}
|
||||
|
||||
public UserInfo GetUser(int tenant, Guid id)
|
||||
{
|
||||
return GetUserQuery(UserDbContext, tenant, default)
|
||||
return GetUserQuery(tenant)
|
||||
.Where(r => r.Id == id)
|
||||
.Select(FromUserToUserInfo)
|
||||
.FirstOrDefault();
|
||||
@ -234,7 +234,7 @@ namespace ASC.Core.Data
|
||||
var pwdHash = GetPasswordHash(userId, passwordHash);
|
||||
var oldHash = Hasher.Base64Hash(passwordHash, HashAlg.SHA256);
|
||||
|
||||
var q = UserDbContext.Users
|
||||
var q = GetUserQuery(tenant)
|
||||
.Where(r => !r.Removed)
|
||||
.Where(r => r.Id == userId)
|
||||
.Join(UserDbContext.UserSecurity, r => r.Id, r => r.UserId, (user, security) => new DbUserSecurity
|
||||
@ -247,22 +247,19 @@ namespace ASC.Core.Data
|
||||
|
||||
if (tenant != Tenant.DEFAULT_TENANT)
|
||||
{
|
||||
q = q.Where(r => r.User.Tenant == tenant);
|
||||
q = q.Where(r => r.UserSecurity.Tenant == tenant);
|
||||
}
|
||||
|
||||
return q.Select(r => r.User).Select(FromUserToUserInfo).FirstOrDefault();
|
||||
}
|
||||
else
|
||||
{
|
||||
var q = UserDbContext.Users
|
||||
var q = GetUserQuery(tenant)
|
||||
.Where(r => !r.Removed)
|
||||
.Where(r => r.Email == login)
|
||||
;
|
||||
if (tenant != Tenant.DEFAULT_TENANT)
|
||||
{
|
||||
q = q.Where(r => r.Tenant == tenant);
|
||||
}
|
||||
var user = q.Select(FromUserToUserInfo).FirstOrDefault();
|
||||
|
||||
var user = q.Select(FromUserToUserInfo).Take(1).FirstOrDefault();
|
||||
if (user != null)
|
||||
{
|
||||
RegeneratePassword(tenant, user.ID);
|
||||
@ -270,12 +267,10 @@ namespace ASC.Core.Data
|
||||
var pwdHash = GetPasswordHash(user.ID, passwordHash);
|
||||
var oldHash = Hasher.Base64Hash(passwordHash, HashAlg.SHA256);
|
||||
|
||||
var count = UserDbContext.UserSecurity
|
||||
.Where(r => r.UserId == user.ID)
|
||||
.Where(r => r.PwdHash == pwdHash || r.PwdHash == oldHash)
|
||||
.Count();//todo: remove old scheme
|
||||
var any = UserDbContext.UserSecurity
|
||||
.Any(r => r.UserId == user.ID && (r.PwdHash == pwdHash || r.PwdHash == oldHash));//todo: remove old scheme
|
||||
|
||||
if (count > 0) return user;
|
||||
if (any) return user;
|
||||
}
|
||||
|
||||
return null;
|
||||
@ -289,6 +284,7 @@ namespace ASC.Core.Data
|
||||
.Where(r => r.Tenant == tenant)
|
||||
.Where(r => r.UserId == userId)
|
||||
.Select(r => r.PwdHashSha512)
|
||||
.Take(1)
|
||||
.FirstOrDefault();
|
||||
if (string.IsNullOrEmpty(h2)) return;
|
||||
|
||||
@ -338,7 +334,7 @@ namespace ASC.Core.Data
|
||||
|
||||
public IDictionary<Guid, UserInfo> GetUsers(int tenant, DateTime from)
|
||||
{
|
||||
return GetUserQuery(UserDbContext, tenant, from)
|
||||
return GetUserQuery(tenant, from)
|
||||
.Select(FromUserToUserInfo)
|
||||
.ToDictionary(r => r.ID, r => r);
|
||||
}
|
||||
@ -346,11 +342,11 @@ namespace ASC.Core.Data
|
||||
public IQueryable<UserInfo> GetUsers(int tenant, bool isAdmin, EmployeeStatus? employeeStatus, List<List<Guid>> includeGroups, List<Guid> excludeGroups, EmployeeActivationStatus? activationStatus, string text, string sortBy, bool sortOrderAsc, long limit, long offset, out int total, out int count)
|
||||
{
|
||||
var userDbContext = UserDbContextManager.GetNew(DbId);
|
||||
var totalQuery = userDbContext.Users.Where(r => r.Tenant == tenant);
|
||||
var totalQuery = GetUserQuery(userDbContext, tenant);
|
||||
totalQuery = GetUserQueryForFilter(totalQuery, isAdmin, employeeStatus, includeGroups, excludeGroups, activationStatus, text);
|
||||
total = totalQuery.Count();
|
||||
|
||||
var q = GetUserQuery(userDbContext, tenant, default);
|
||||
var q = GetUserQuery(userDbContext, tenant);
|
||||
|
||||
q = GetUserQueryForFilter(q, isAdmin, employeeStatus, includeGroups, excludeGroups, activationStatus, text);
|
||||
|
||||
@ -377,8 +373,8 @@ namespace ASC.Core.Data
|
||||
public IQueryable<UserInfo> GetUsers(int tenant, out int total)
|
||||
{
|
||||
var userDbContext = UserDbContextManager.GetNew(DbId);
|
||||
total = userDbContext.Users.Where(r => r.Tenant == tenant).Count();
|
||||
return userDbContext.Users.Where(r => r.Tenant == tenant).Select(FromUserToUserInfo);
|
||||
total = userDbContext.Users.Count(r => r.Tenant == tenant);
|
||||
return GetUserQuery(userDbContext, tenant).Select(FromUserToUserInfo);
|
||||
}
|
||||
|
||||
|
||||
@ -527,16 +523,18 @@ namespace ASC.Core.Data
|
||||
user.Email = user.Email.Trim();
|
||||
|
||||
using var tx = UserDbContext.Database.BeginTransaction();
|
||||
var count = UserDbContext.Users.Where(r => r.UserName == user.UserName && r.Id != user.ID && !r.Removed).Count();
|
||||
var any = GetUserQuery(tenant)
|
||||
.Any(r => r.UserName == user.UserName && r.Id != user.ID && !r.Removed);
|
||||
|
||||
if (count != 0)
|
||||
if (any)
|
||||
{
|
||||
throw new ArgumentOutOfRangeException("Duplicate username.");
|
||||
}
|
||||
|
||||
count = UserDbContext.Users.Where(r => r.Email == user.Email && r.Id != user.ID && !r.Removed).Count();
|
||||
any = GetUserQuery(tenant)
|
||||
.Any(r => r.Email == user.Email && r.Id != user.ID && !r.Removed);
|
||||
|
||||
if (count != 0)
|
||||
if (any)
|
||||
{
|
||||
throw new ArgumentOutOfRangeException("Duplicate email.");
|
||||
}
|
||||
@ -559,7 +557,7 @@ namespace ASC.Core.Data
|
||||
|
||||
UserDbContext.AddOrUpdate(r => r.UserGroups, FromUserGroupRefToUserGroup(r));
|
||||
|
||||
var user = UserDbContext.Users.FirstOrDefault(a => a.Tenant == tenant && a.Id == r.UserId);
|
||||
var user = GetUserQuery(tenant).FirstOrDefault(a => a.Tenant == tenant && a.Id == r.UserId);
|
||||
if (user != null)
|
||||
{
|
||||
user.LastModified = r.LastModified;
|
||||
@ -620,9 +618,14 @@ namespace ASC.Core.Data
|
||||
tr.Commit();
|
||||
}
|
||||
|
||||
private IQueryable<User> GetUserQuery(UserDbContext UserDbContext, int tenant, DateTime from)
|
||||
private IQueryable<User> GetUserQuery(int tenant, DateTime from = default)
|
||||
{
|
||||
var q = UserDbContext.Users.Where(r => true);
|
||||
return GetUserQuery(UserDbContext, tenant, from);
|
||||
}
|
||||
|
||||
private IQueryable<User> GetUserQuery(UserDbContext userDbContext, int tenant, DateTime from = default)
|
||||
{
|
||||
var q = userDbContext.Users.AsQueryable();
|
||||
|
||||
if (tenant != Tenant.DEFAULT_TENANT)
|
||||
{
|
||||
@ -637,7 +640,7 @@ namespace ASC.Core.Data
|
||||
return q;
|
||||
}
|
||||
|
||||
private IQueryable<DbGroup> GetGroupQuery(UserDbContext UserDbContext, int tenant, DateTime from)
|
||||
private IQueryable<DbGroup> GetGroupQuery(int tenant, DateTime from = default)
|
||||
{
|
||||
var q = UserDbContext.Groups.Where(r => true);
|
||||
|
||||
@ -752,7 +755,7 @@ namespace ASC.Core.Data
|
||||
|
||||
public UserInfo GetUser(int tenant, Guid id, Expression<Func<User, UserInfo>> exp)
|
||||
{
|
||||
return GetUserQuery(UserDbContext, tenant, default)
|
||||
return GetUserQuery(tenant)
|
||||
.Where(r => r.Id == id)
|
||||
.Select(exp ?? FromUserToUserInfo)
|
||||
.FirstOrDefault();
|
||||
|
Loading…
Reference in New Issue
Block a user