People: fix search by filter
This commit is contained in:
parent
6f8a94dca4
commit
f0d2854071
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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,
|
||||
|
@ -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));
|
||||
}
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user