colinin / abp-next-admin

这是基于vue-vben-admin 模板适用于abp Vnext的前端管理项目
MIT License
806 stars 248 forks source link

OrganizationUnitPermissionManagementProvider 某个角色在多个组织中存在,遍历查询建议改成In查询 #925

Closed zhangzw218 closed 2 months ago

zhangzw218 commented 5 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

colinin commented 5 months ago

可以考虑实现,不需要扩展仓储接口,权限模块默认实现了IRepository<PermissionGrant, Guid>接口

colinin commented 2 months ago

已在 #939 中优化查询性能。