People: fix search by filter

This commit is contained in:
pavelbannov 2019-08-08 17:42:29 +03:00
parent 6f8a94dca4
commit f0d2854071
5 changed files with 33 additions and 18 deletions

View File

@ -91,7 +91,7 @@ namespace ASC.Core.Caching
}
}
public IDictionary<Guid, UserInfo> GetUsers(int tenant, bool isAdmin, EmployeeStatus? employeeStatus, List<Guid> includeGroups, List<Guid> excludeGroups, EmployeeActivationStatus? activationStatus, string text, string sortBy, bool sortOrderAsc, long limit, long offset, out int total)
public IDictionary<Guid, 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)
{
return service.GetUsers(tenant, isAdmin, employeeStatus, includeGroups, excludeGroups, activationStatus, text, sortBy, sortOrderAsc, limit, offset, out total);
}

View File

@ -87,7 +87,7 @@ namespace ASC.Core
return users.ToArray();
}
public IEnumerable<UserInfo> GetUsers(int tenantId, bool isAdmin, EmployeeStatus? employeeStatus, List<Guid> includeGroups, List<Guid> excludeGroups, EmployeeActivationStatus? activationStatus, string text, string sortBy, bool sortOrderAsc, long limit, long offset, out int total)
public IEnumerable<UserInfo> GetUsers(int tenantId, 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)
{
return userService.GetUsers(tenantId, isAdmin, employeeStatus, includeGroups, excludeGroups, activationStatus, text, sortBy, sortOrderAsc, limit, offset, out total).Values;
}

View File

@ -36,7 +36,7 @@ namespace ASC.Core
IDictionary<Guid, UserInfo> GetUsers(int tenant, bool isAdmin,
EmployeeStatus? employeeStatus,
List<Guid> includeGroups,
List<List<Guid>> includeGroups,
List<Guid> excludeGroups,
EmployeeActivationStatus? activationStatus,
string text,

View File

@ -52,7 +52,7 @@ namespace ASC.Core.Data
public IDictionary<Guid, UserInfo> GetUsers(int tenant, bool isAdmin,
EmployeeStatus? employeeStatus,
List<Guid> includeGroups,
List<List<Guid>> includeGroups,
List<Guid> excludeGroups,
EmployeeActivationStatus? activationStatus,
string text,
@ -90,7 +90,7 @@ namespace ASC.Core.Data
private SqlQuery GetUserQueryForFilter(SqlQuery q,bool isAdmin,
EmployeeStatus? employeeStatus,
List<Guid> includeGroups,
List<List<Guid>> includeGroups,
List<Guid> excludeGroups,
EmployeeActivationStatus? activationStatus,
string text)
@ -99,14 +99,24 @@ namespace ASC.Core.Data
if (includeGroups != null && includeGroups.Any())
{
foreach (var g in includeGroups)
var groupQuery = new SqlQuery("core_usergroup cug")
.Select("cug.userid")
.Where(Exp.EqColumns("cug.tenant", "u.tenant"))
.Where(Exp.EqColumns("u.id", "cug.userid"));
foreach (var groups in includeGroups)
{
var groupQuery = new SqlQuery("core_usergroup cug")
.Where(Exp.EqColumns("cug.tenant", "cu.tenant"))
.Where(Exp.EqColumns("cu.id", "cug.userid"))
.Where(Exp.Eq("cug.groupid", g));
q.Where(Exp.Exists(groupQuery));
var subQuery = Exp.Empty;
foreach(var g in groups)
{
subQuery |= Exp.Eq("cug.groupid", g);
}
groupQuery.Where(subQuery);
}
q.Where(Exp.Exists(groupQuery));
}
if (excludeGroups != null && excludeGroups.Any())
@ -114,8 +124,9 @@ namespace ASC.Core.Data
foreach (var g in excludeGroups)
{
var groupQuery = new SqlQuery("core_usergroup cug")
.Where(Exp.EqColumns("cug.tenant", "cu.tenant"))
.Where(Exp.EqColumns("cu.id", "cug.userid"))
.Select("cug.userid")
.Where(Exp.EqColumns("cug.tenant", "u.tenant"))
.Where(Exp.EqColumns("u.id", "cug.userid"))
.Where(Exp.Eq("cug.groupid", g));
q.Where(!Exp.Exists(groupQuery));
}

View File

@ -272,10 +272,10 @@ namespace ASC.Employee.Core.Controllers
var isAdmin = CoreContext.UserManager.GetUsers(SecurityContext.CurrentAccount.ID).IsAdmin(ApiContext.Tenant) ||
WebItemSecurity.IsProductAdministrator(ApiContext.Tenant, WebItemManager.PeopleProductID, SecurityContext.CurrentAccount.ID);
var includeGroups = new List<Guid>();
var includeGroups = new List<List<Guid>>();
if (groupId.HasValue)
{
includeGroups.Add(groupId.Value);
includeGroups.Add(new List<Guid> { groupId.Value });
}
var excludeGroups = new List<Guid>();
@ -288,18 +288,22 @@ namespace ASC.Employee.Core.Controllers
excludeGroups.Add(Constants.GroupVisitor.ID);
break;
case EmployeeType.Visitor:
includeGroups.Add(Constants.GroupVisitor.ID);
includeGroups.Add(new List<Guid> { Constants.GroupVisitor.ID });
break;
}
}
if (isAdministrator.HasValue && isAdministrator.Value)
{
includeGroups.Add(Constants.GroupAdmin.ID);
var adminGroups = new List<Guid>
{
Constants.GroupAdmin.ID
};
var products = WebItemManager.Instance.GetItemsAll().Where(i => i is IProduct || i.ID == WebItemManager.MailProductID);
adminGroups.AddRange(products.Select(r=> r.ID));
includeGroups.AddRange(products.Select(r=> r.ID));
includeGroups.Add(adminGroups);
}
var users = CoreContext.UserManager.GetUsers(ApiContext.Tenant.TenantId, isAdmin, employeeStatus, includeGroups, excludeGroups, activationStatus, ApiContext.FilterValue, ApiContext.SortBy, !ApiContext.SortDescending, ApiContext.Count - 1, ApiContext.StartIndex, out int total);