diff --git a/common/ASC.Core.Common/Caching/CachedUserService.cs b/common/ASC.Core.Common/Caching/CachedUserService.cs index c84ceaad36..c2f5bfe365 100644 --- a/common/ASC.Core.Common/Caching/CachedUserService.cs +++ b/common/ASC.Core.Common/Caching/CachedUserService.cs @@ -188,6 +188,7 @@ public class CachedUserService : IUserService, ICachedService List> includeGroups, List excludeGroups, EmployeeActivationStatus? activationStatus, + AccountLoginType? accountLoginType, string text, string sortBy, bool sortOrderAsc, @@ -196,7 +197,7 @@ public class CachedUserService : IUserService, ICachedService out int total, out int count) { - return Service.GetUsers(tenant, isDocSpaceAdmin, employeeStatus, includeGroups, excludeGroups, activationStatus, text, sortBy, sortOrderAsc, limit, offset, out total, out count); + return Service.GetUsers(tenant, isDocSpaceAdmin, employeeStatus, includeGroups, excludeGroups, activationStatus, accountLoginType, text, sortBy, sortOrderAsc, limit, offset, out total, out count); } public UserInfo GetUser(int tenant, Guid id) diff --git a/common/ASC.Core.Common/Context/Impl/UserManager.cs b/common/ASC.Core.Common/Context/Impl/UserManager.cs index e98962cd31..817b1c8023 100644 --- a/common/ASC.Core.Common/Context/Impl/UserManager.cs +++ b/common/ASC.Core.Common/Context/Impl/UserManager.cs @@ -187,6 +187,7 @@ public class UserManager List> includeGroups, List excludeGroups, EmployeeActivationStatus? activationStatus, + AccountLoginType? accountLoginType, string text, string sortBy, bool sortOrderAsc, @@ -195,7 +196,7 @@ public class UserManager out int total, out int count) { - return _userService.GetUsers(Tenant.Id, isDocSpaceAdmin, employeeStatus, includeGroups, excludeGroups, activationStatus, text, sortBy, sortOrderAsc, limit, offset, out total, out count); + return _userService.GetUsers(Tenant.Id, isDocSpaceAdmin, employeeStatus, includeGroups, excludeGroups, activationStatus, accountLoginType, text, sortBy, sortOrderAsc, limit, offset, out total, out count); } public string[] GetUserNames(EmployeeStatus status) diff --git a/common/ASC.Core.Common/Core/AccountLoginType.cs b/common/ASC.Core.Common/Core/AccountLoginType.cs new file mode 100644 index 0000000000..6672036b78 --- /dev/null +++ b/common/ASC.Core.Common/Core/AccountLoginType.cs @@ -0,0 +1,34 @@ +// (c) Copyright Ascensio System SIA 2010-2022 +// +// This program is a free software product. +// You can redistribute it and/or modify it under the terms +// of the GNU Affero General Public License (AGPL) version 3 as published by the Free Software +// Foundation. In accordance with Section 7(a) of the GNU AGPL its Section 15 shall be amended +// to the effect that Ascensio System SIA expressly excludes the warranty of non-infringement of +// any third-party rights. +// +// This program is distributed WITHOUT ANY WARRANTY, without even the implied warranty +// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For details, see +// the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html +// +// You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, EU, LV-1021. +// +// The interactive user interfaces in modified source and object code versions of the Program must +// display Appropriate Legal Notices, as required under Section 5 of the GNU AGPL version 3. +// +// Pursuant to Section 7(b) of the License you must retain the original Product logo when +// distributing the program. Pursuant to Section 7(e) we decline to grant you any rights under +// trademark law for use of our trademarks. +// +// All the Product's GUI elements, including illustrations and icon sets, as well as technical writing +// content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0 +// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode + +namespace ASC.Core; + +public enum AccountLoginType +{ + SSO, + LDAP, + Standart +} diff --git a/common/ASC.Core.Common/Core/IUserService.cs b/common/ASC.Core.Common/Core/IUserService.cs index 75b21d455a..cde59c3ac5 100644 --- a/common/ASC.Core.Common/Core/IUserService.cs +++ b/common/ASC.Core.Common/Core/IUserService.cs @@ -35,6 +35,7 @@ public interface IUserService List> includeGroups, List excludeGroups, EmployeeActivationStatus? activationStatus, + AccountLoginType? accountLoginType, string text, string sortBy, bool sortOrderAsc, diff --git a/common/ASC.Core.Common/Data/DbUserService.cs b/common/ASC.Core.Common/Data/DbUserService.cs index d9fb28dd4d..942864dbfd 100644 --- a/common/ASC.Core.Common/Data/DbUserService.cs +++ b/common/ASC.Core.Common/Data/DbUserService.cs @@ -24,10 +24,6 @@ // content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0 // International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode -using ASC.Core.Common.EF; - -using Microsoft.EntityFrameworkCore; - namespace ASC.Core.Data; [Scope] @@ -212,16 +208,16 @@ public class EFUserService : IUserService .ToList(); } - public IQueryable GetUsers(int tenant, bool isDocSpaceAdmin, EmployeeStatus? employeeStatus, List> includeGroups, List excludeGroups, EmployeeActivationStatus? activationStatus, string text, string sortBy, bool sortOrderAsc, long limit, long offset, out int total, out int count) + public IQueryable GetUsers(int tenant, bool isDocSpaceAdmin, EmployeeStatus? employeeStatus, List> includeGroups, List excludeGroups, EmployeeActivationStatus? activationStatus, AccountLoginType? accountLoginType, string text, string sortBy, bool sortOrderAsc, long limit, long offset, out int total, out int count) { var userDbContext = _dbContextFactory.CreateDbContext(); var totalQuery = GetUserQuery(userDbContext, tenant); - totalQuery = GetUserQueryForFilter(userDbContext, totalQuery, isDocSpaceAdmin, employeeStatus, includeGroups, excludeGroups, activationStatus, text); + totalQuery = GetUserQueryForFilter(userDbContext, totalQuery, isDocSpaceAdmin, employeeStatus, includeGroups, excludeGroups, activationStatus, accountLoginType, text); total = totalQuery.Count(); var q = GetUserQuery(userDbContext, tenant); - q = GetUserQueryForFilter(userDbContext, q, isDocSpaceAdmin, employeeStatus, includeGroups, excludeGroups, activationStatus, text); + q = GetUserQueryForFilter(userDbContext, q, isDocSpaceAdmin, employeeStatus, includeGroups, excludeGroups, activationStatus, accountLoginType, text); var orderedQuery = q.OrderBy(r => r.ActivationStatus == EmployeeActivationStatus.Pending); q = orderedQuery; @@ -632,6 +628,7 @@ public class EFUserService : IUserService List> includeGroups, List excludeGroups, EmployeeActivationStatus? activationStatus, + AccountLoginType? accountLoginType, string text) { q = q.Where(r => !r.Removed); @@ -701,6 +698,19 @@ public class EFUserService : IUserService u.Email.Contains(text)); } + switch (accountLoginType) + { + case AccountLoginType.LDAP: + q = q.Where(r => r.Sid != null); + break; + case AccountLoginType.SSO: + q = q.Where(r => r.SsoNameId != null); + break; + case AccountLoginType.Standart: + q = q.Where(r => r.SsoNameId == null && r.Sid == null); + break; + } + return q; } diff --git a/products/ASC.People/Server/Api/UserController.cs b/products/ASC.People/Server/Api/UserController.cs index 4c40f6be24..e342b49a19 100644 --- a/products/ASC.People/Server/Api/UserController.cs +++ b/products/ASC.People/Server/Api/UserController.cs @@ -581,13 +581,13 @@ public class UserController : PeopleControllerBase _apiContext.SetDataFiltered(); } - return GetFullByFilter(status, groupId, null, null, null, null); + return GetFullByFilter(status, groupId, null, null, null, null, null); } [HttpGet("filter")] - public async IAsyncEnumerable GetFullByFilter(EmployeeStatus? employeeStatus, Guid? groupId, EmployeeActivationStatus? activationStatus, EmployeeType? employeeType, bool? isAdministrator, Payments? payments) + public async IAsyncEnumerable GetFullByFilter(EmployeeStatus? employeeStatus, Guid? groupId, EmployeeActivationStatus? activationStatus, EmployeeType? employeeType, bool? isAdministrator, Payments? payments, AccountLoginType? accountLoginType) { - var users = GetByFilter(employeeStatus, groupId, activationStatus, employeeType, isAdministrator, payments); + var users = GetByFilter(employeeStatus, groupId, activationStatus, employeeType, isAdministrator, payments, accountLoginType); foreach (var user in users) { @@ -633,9 +633,9 @@ public class UserController : PeopleControllerBase } [HttpGet("simple/filter")] - public async IAsyncEnumerable GetSimpleByFilter(EmployeeStatus? employeeStatus, Guid? groupId, EmployeeActivationStatus? activationStatus, EmployeeType? employeeType, bool? isAdministrator, Payments? payments) + public async IAsyncEnumerable GetSimpleByFilter(EmployeeStatus? employeeStatus, Guid? groupId, EmployeeActivationStatus? activationStatus, EmployeeType? employeeType, bool? isAdministrator, Payments? payments, AccountLoginType? accountLoginType) { - var users = GetByFilter(employeeStatus, groupId, activationStatus, employeeType, isAdministrator, payments); + var users = GetByFilter(employeeStatus, groupId, activationStatus, employeeType, isAdministrator, payments, accountLoginType); foreach (var user in users) { @@ -1321,7 +1321,7 @@ public class UserController : PeopleControllerBase return string.Empty; } - private IQueryable GetByFilter(EmployeeStatus? employeeStatus, Guid? groupId, EmployeeActivationStatus? activationStatus, EmployeeType? employeeType, bool? isDocSpaceAdministrator, Payments? payments) + private IQueryable GetByFilter(EmployeeStatus? employeeStatus, Guid? groupId, EmployeeActivationStatus? activationStatus, EmployeeType? employeeType, bool? isDocSpaceAdministrator, Payments? payments, AccountLoginType? accountLoginType) { if (_coreBaseSettings.Personal) { @@ -1385,7 +1385,7 @@ public class UserController : PeopleControllerBase includeGroups.Add(adminGroups); } - var users = _userManager.GetUsers(isDocSpaceAdmin, employeeStatus, includeGroups, excludeGroups, activationStatus, _apiContext.FilterValue, _apiContext.SortBy, !_apiContext.SortDescending, _apiContext.Count, _apiContext.StartIndex, out var total, out var count); + var users = _userManager.GetUsers(isDocSpaceAdmin, employeeStatus, includeGroups, excludeGroups, activationStatus, accountLoginType, _apiContext.FilterValue, _apiContext.SortBy, !_apiContext.SortDescending, _apiContext.Count, _apiContext.StartIndex, out var total, out var count); _apiContext.SetTotalCount(total).SetCount(count);