Closed zhangzw218 closed 2 months ago
OrganizationUnitPermissionManagementProvider.cs if (providerName == "R") { IdentityRole role = await IdentityRoleRepository.FindByNormalizedNameAsync(UserManager.NormalizeName(providerKey)).ConfigureAwait(continueOnCapturedContext: false); foreach (OrganizationUnit organizationUnit2 in await IdentityRoleRepository.GetOrganizationUnitsAsync(role.Id).ConfigureAwait(continueOnCapturedContext: false)) { List<PermissionGrant> list2 = permissionGrants2; list2.AddRange(await base.PermissionGrantRepository.GetListAsync(names, Name, organizationUnit2.Id.ToString()).ConfigureAwait(continueOnCapturedContext: false)); } }
这里有些角色,会查到很多OrgUnits,比如上百个。 然后就会有上百次的SQL查询。 我觉得,这里应该将Key改成In查询? var list2 = await PermissionGrantRepository.GetListAsync(names, Name, units.Select(s => s.Id.ToString())); Abp没有提供这个方法,需要自定义扩展一个。。
Ver:7.2.1.1
可以考虑实现,不需要扩展仓储接口,权限模块默认实现了IRepository<PermissionGrant, Guid>接口
已在 #939 中优化查询性能。
这里有些角色,会查到很多OrgUnits,比如上百个。 然后就会有上百次的SQL查询。 我觉得,这里应该将Key改成In查询? var list2 = await PermissionGrantRepository.GetListAsync(names, Name, units.Select(s => s.Id.ToString())); Abp没有提供这个方法,需要自定义扩展一个。。
Ver:7.2.1.1