diff --git a/apps/vben5/packages/@abp/permissions/src/api/usePermissionsApi.ts b/apps/vben5/packages/@abp/permissions/src/api/usePermissionsApi.ts index 326bd29c6..494f8bef0 100644 --- a/apps/vben5/packages/@abp/permissions/src/api/usePermissionsApi.ts +++ b/apps/vben5/packages/@abp/permissions/src/api/usePermissionsApi.ts @@ -1,4 +1,5 @@ import type { + GetPermissionGrantedWithProviderListResultDto, PermissionProvider, PermissionResultDto, PermissionsUpdateDto, @@ -40,9 +41,32 @@ export function usePermissionsApi() { }); } + /** + * 获取已授权对象 + * @param permissionName 权限名称 + * @param providerName 授权提供者 + * @returns + */ + function getGrantedByProviderApi( + permissionName: string, + providerName: string, + ): Promise { + return request( + `/api/permission-management/permissions/granted/by-provider`, + { + method: 'GET', + params: { + permissionName, + providerName, + }, + }, + ); + } + return { cancel, getApi, updateApi, + getGrantedByProviderApi, }; } diff --git a/apps/vben5/packages/@abp/permissions/src/components/index.ts b/apps/vben5/packages/@abp/permissions/src/components/index.ts index 1eeefe6b7..80a538fd3 100644 --- a/apps/vben5/packages/@abp/permissions/src/components/index.ts +++ b/apps/vben5/packages/@abp/permissions/src/components/index.ts @@ -1,4 +1,5 @@ export { default as PermissionGroupDefinitionTable } from './definitions/groups/PermissionGroupDefinitionTable.vue'; export { default as PermissionDefinitionTable } from './definitions/permissions/PermissionDefinitionTable.vue'; +export { default as PermissionGrantedModal } from './permissions/PermissionGrantedModal.vue'; export { default as PermissionModal } from './permissions/PermissionModal.vue'; export { default as PermissionStateCheck } from './state-check/PermissionStateCheck.vue'; diff --git a/apps/vben5/packages/@abp/permissions/src/components/permissions/PermissionGrantedModal.vue b/apps/vben5/packages/@abp/permissions/src/components/permissions/PermissionGrantedModal.vue new file mode 100644 index 000000000..f5defeb2a --- /dev/null +++ b/apps/vben5/packages/@abp/permissions/src/components/permissions/PermissionGrantedModal.vue @@ -0,0 +1,406 @@ + + + + + diff --git a/apps/vben5/packages/@abp/permissions/src/components/permissions/PermissionModal.vue b/apps/vben5/packages/@abp/permissions/src/components/permissions/PermissionModal.vue index f9e5d11cd..30f95862e 100644 --- a/apps/vben5/packages/@abp/permissions/src/components/permissions/PermissionModal.vue +++ b/apps/vben5/packages/@abp/permissions/src/components/permissions/PermissionModal.vue @@ -8,12 +8,20 @@ import type { CheckInfo } from 'ant-design-vue/es/vc-tree/props'; import type { PermissionTree } from '../../types/permissions'; -import { computed, ref } from 'vue'; +import { computed, defineAsyncComponent, ref } from 'vue'; import { useVbenModal } from '@vben/common-ui'; import { $t } from '@vben/locales'; -import { Card, Checkbox, Divider, message, Tabs, Tree } from 'ant-design-vue'; +import { + Button, + Card, + Checkbox, + Divider, + message, + Tabs, + Tree, +} from 'ant-design-vue'; import { usePermissionsApi } from '../../api/usePermissionsApi'; import { @@ -149,6 +157,12 @@ const [Modal, modalApi] = useVbenModal({ title: $t('AbpPermissionManagement.Permissions'), }); +const [PermissionGrantedModal, grantedModalApi] = useVbenModal({ + connectedComponent: defineAsyncComponent( + () => import('./PermissionGrantedModal.vue'), + ), +}); + /** 全选所有节点权限 */ function onCheckAll(e: CheckboxChangeEvent) { checkedNodeKeys.value = []; @@ -262,12 +276,20 @@ function getChildren(permissions: PermissionTree[]): PermissionTree[] { }); return children; } + +function onSearchPermissionGrant() { + grantedModalApi.setData({ + providerName: modelState.value?.providerName, + readonly: modelState.value?.readonly, + }); + grantedModalApi.open(); +} + diff --git a/apps/vben5/packages/@abp/permissions/src/types/permissions.ts b/apps/vben5/packages/@abp/permissions/src/types/permissions.ts index d90634a90..1ad926383 100644 --- a/apps/vben5/packages/@abp/permissions/src/types/permissions.ts +++ b/apps/vben5/packages/@abp/permissions/src/types/permissions.ts @@ -45,12 +45,19 @@ interface PermissionTree { isGranted?: boolean; isRoot: boolean; /** 权限标识 */ + key: string; + /** 权限标识 */ name: string; /** 父节点 */ parentName?: string; } +interface GetPermissionGrantedWithProviderListResultDto { + grantedProviders: PermissionProvider[]; +} + export type { + GetPermissionGrantedWithProviderListResultDto, PermissionDto, PermissionGroupDto, PermissionProvider, diff --git a/apps/vben5/packages/@abp/permissions/src/utils/index.ts b/apps/vben5/packages/@abp/permissions/src/utils/index.ts index 7e30e0aab..f2e393485 100644 --- a/apps/vben5/packages/@abp/permissions/src/utils/index.ts +++ b/apps/vben5/packages/@abp/permissions/src/utils/index.ts @@ -11,18 +11,27 @@ export function generatePermissionTree( ): PermissionTree[] { const trees: PermissionTree[] = []; permissionGroups.forEach((g) => { + const children: PermissionTree[] = g.permissions.map((permission) => { + return { + ...permission, + children: [], + isRoot: false, + disabled: false, + key: permission.name, + }; + }); const tree: PermissionTree = { disabled: false, displayName: g.displayName, isRoot: true, + key: g.name, name: g.name, parentName: g.name, - children: [], + children: listToTree(children, { + id: 'name', + pid: 'parentName', + }), }; - tree.children = listToTree(g.permissions, { - id: 'name', - pid: 'parentName', - }); trees.push(tree); }); return trees; diff --git a/aspnet-core/LINGYUN.MicroService.All.slnx b/aspnet-core/LINGYUN.MicroService.All.slnx index 018ed8791..d70ae4710 100644 --- a/aspnet-core/LINGYUN.MicroService.All.slnx +++ b/aspnet-core/LINGYUN.MicroService.All.slnx @@ -406,6 +406,8 @@ + + diff --git a/aspnet-core/migrations/LY.MicroService.BackendAdmin.DbMigrator/BackendAdminDbMigratorModule.cs b/aspnet-core/migrations/LY.MicroService.BackendAdmin.DbMigrator/BackendAdminDbMigratorModule.cs index 33394b8e8..023015c96 100644 --- a/aspnet-core/migrations/LY.MicroService.BackendAdmin.DbMigrator/BackendAdminDbMigratorModule.cs +++ b/aspnet-core/migrations/LY.MicroService.BackendAdmin.DbMigrator/BackendAdminDbMigratorModule.cs @@ -1,41 +1,11 @@ -using LINGYUN.Abp.Auditing; -using LINGYUN.Abp.BlobManagement; -using LINGYUN.Abp.CachingManagement; -using LINGYUN.Abp.Identity; -using LINGYUN.Abp.LocalizationManagement; -using LINGYUN.Abp.MessageService; -using LINGYUN.Abp.Notifications; -using LINGYUN.Abp.OpenIddict; -using LINGYUN.Abp.SettingManagement; -using LINGYUN.Abp.TaskManagement; -using LINGYUN.Abp.TextTemplating; -using LINGYUN.Abp.WebhooksManagement; -using LINGYUN.Platform; -using LY.MicroService.BackendAdmin.EntityFrameworkCore; +using LY.MicroService.BackendAdmin.EntityFrameworkCore; using Volo.Abp.Autofac; -using Volo.Abp.FeatureManagement; using Volo.Abp.Modularity; -using Volo.Abp.PermissionManagement; namespace LY.MicroService.BackendAdmin.DbMigrator; [DependsOn( typeof(BackendAdminMigrationsEntityFrameworkCoreModule), - typeof(AbpFeatureManagementApplicationContractsModule), - typeof(AbpSettingManagementApplicationContractsModule), - typeof(AbpPermissionManagementApplicationContractsModule), - typeof(AbpLocalizationManagementApplicationContractsModule), - typeof(AbpCachingManagementApplicationContractsModule), - typeof(AbpAuditingApplicationContractsModule), - typeof(AbpTextTemplatingApplicationContractsModule), - typeof(AbpIdentityApplicationContractsModule), - typeof(AbpOpenIddictApplicationContractsModule), - typeof(PlatformApplicationContractModule), - typeof(AbpBlobManagementApplicationContractsModule), - typeof(AbpNotificationsApplicationContractsModule), - typeof(AbpMessageServiceApplicationContractsModule), - typeof(TaskManagementApplicationContractsModule), - typeof(WebhooksManagementApplicationContractsModule), typeof(AbpAutofacModule) )] public partial class BackendAdminDbMigratorModule : AbpModule diff --git a/aspnet-core/migrations/LY.MicroService.BackendAdmin.DbMigrator/LY.MicroService.BackendAdmin.DbMigrator.csproj b/aspnet-core/migrations/LY.MicroService.BackendAdmin.DbMigrator/LY.MicroService.BackendAdmin.DbMigrator.csproj index 20e58b06c..dda44babf 100644 --- a/aspnet-core/migrations/LY.MicroService.BackendAdmin.DbMigrator/LY.MicroService.BackendAdmin.DbMigrator.csproj +++ b/aspnet-core/migrations/LY.MicroService.BackendAdmin.DbMigrator/LY.MicroService.BackendAdmin.DbMigrator.csproj @@ -33,20 +33,6 @@ - - - - - - - - - - - - - - diff --git a/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/BackendAdminMigrationsEntityFrameworkCoreModule.cs b/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/BackendAdminMigrationsEntityFrameworkCoreModule.cs index 531a967fa..f4073951f 100644 --- a/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/BackendAdminMigrationsEntityFrameworkCoreModule.cs +++ b/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/BackendAdminMigrationsEntityFrameworkCoreModule.cs @@ -1,18 +1,62 @@ -using LINGYUN.Abp.Data.DbMigrator; +using LINGYUN.Abp.Account; +using LINGYUN.Abp.Auditing; +using LINGYUN.Abp.BlobManagement; +using LINGYUN.Abp.CachingManagement; +using LINGYUN.Abp.Data.DbMigrator; +using LINGYUN.Abp.DataProtectionManagement; using LINGYUN.Abp.DataProtectionManagement.EntityFrameworkCore; using LINGYUN.Abp.EntityFrameworkCore.MySQL; +using LINGYUN.Abp.FeatureManagement; +using LINGYUN.Abp.Gdpr; +using LINGYUN.Abp.Identity; +using LINGYUN.Abp.LocalizationManagement; +using LINGYUN.Abp.MessageService; +using LINGYUN.Abp.Notifications; +using LINGYUN.Abp.OpenIddict; +using LINGYUN.Abp.PermissionManagement; +using LINGYUN.Abp.PermissionManagement.EntityFrameworkCore; +using LINGYUN.Abp.ProjectManagement; +using LINGYUN.Abp.RulesEngineManagement; +using LINGYUN.Abp.Saas; using LINGYUN.Abp.Saas.EntityFrameworkCore; +using LINGYUN.Abp.SettingManagement; +using LINGYUN.Abp.TaskManagement; +using LINGYUN.Abp.TextTemplating; using LINGYUN.Abp.TextTemplating.EntityFrameworkCore; +using LINGYUN.Abp.WebhooksManagement; +using LINGYUN.Platform; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.FeatureManagement.EntityFrameworkCore; using Volo.Abp.Modularity; -using Volo.Abp.PermissionManagement.EntityFrameworkCore; using Volo.Abp.SettingManagement.EntityFrameworkCore; namespace LY.MicroService.BackendAdmin.EntityFrameworkCore; +[DependsOn( + typeof(AbpSettingManagementApplicationContractsModule), + typeof(AbpAccountApplicationContractsModule), + typeof(AbpAuditingApplicationContractsModule), + typeof(AbpCachingManagementApplicationContractsModule), + typeof(AbpDataProtectionManagementApplicationContractsModule), + typeof(AbpFeatureManagementApplicationContractsModule), + typeof(AbpGdprApplicationContractsModule), + typeof(AbpIdentityApplicationContractsModule), + typeof(AbpLocalizationManagementApplicationContractsModule), + typeof(AbpOpenIddictApplicationContractsModule), + typeof(AbpBlobManagementApplicationContractsModule), + typeof(AbpPermissionManagementApplicationContractsModule), + typeof(PlatformApplicationContractModule), + typeof(AbpProjectManagementApplicationContractsModule), + typeof(AbpMessageServiceApplicationContractsModule), + typeof(AbpNotificationsApplicationContractsModule), + typeof(RulesEngineManagementApplicationContractsModule), + typeof(AbpSaasApplicationContractsModule), + typeof(TaskManagementApplicationContractsModule), + typeof(AbpTextTemplatingApplicationContractsModule), + typeof(WebhooksManagementApplicationContractsModule))] + [DependsOn( typeof(AbpSaasEntityFrameworkCoreModule), typeof(AbpSettingManagementEntityFrameworkCoreModule), diff --git a/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/LY.MicroService.BackendAdmin.EntityFrameworkCore.csproj b/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/LY.MicroService.BackendAdmin.EntityFrameworkCore.csproj index 26ccd53c5..a32353243 100644 --- a/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/LY.MicroService.BackendAdmin.EntityFrameworkCore.csproj +++ b/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/LY.MicroService.BackendAdmin.EntityFrameworkCore.csproj @@ -16,13 +16,40 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application.Contracts/LINGYUN/Abp/PermissionManagement/GetPermissionGrantedWithProviderListResultDto.cs b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application.Contracts/LINGYUN/Abp/PermissionManagement/GetPermissionGrantedWithProviderListResultDto.cs new file mode 100644 index 000000000..8968103be --- /dev/null +++ b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application.Contracts/LINGYUN/Abp/PermissionManagement/GetPermissionGrantedWithProviderListResultDto.cs @@ -0,0 +1,9 @@ +using System.Collections.Generic; +using Volo.Abp.PermissionManagement; + +namespace LINGYUN.Abp.PermissionManagement; + +public class GetPermissionGrantedWithProviderListResultDto +{ + public List GrantedProviders { get; set; } = new List(); +} diff --git a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application.Contracts/LINGYUN/Abp/PermissionManagement/IPermissionAppService.cs b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application.Contracts/LINGYUN/Abp/PermissionManagement/IPermissionAppService.cs new file mode 100644 index 000000000..2aa3426de --- /dev/null +++ b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application.Contracts/LINGYUN/Abp/PermissionManagement/IPermissionAppService.cs @@ -0,0 +1,11 @@ +using JetBrains.Annotations; +using System.Threading.Tasks; + +namespace LINGYUN.Abp.PermissionManagement; + +public interface IPermissionAppService : Volo.Abp.PermissionManagement.IPermissionAppService +{ + Task GetGrantedByProviderAsync( + [NotNull] string permissionName, + [NotNull] string providerName); +} diff --git a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application.Contracts/LINGYUN/Abp/PermissionManagement/Localization/Application/Contracts/en.json b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application.Contracts/LINGYUN/Abp/PermissionManagement/Localization/Application/Contracts/en.json index a7725f2b9..6ae0da1a9 100644 --- a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application.Contracts/LINGYUN/Abp/PermissionManagement/Localization/Application/Contracts/en.json +++ b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application.Contracts/LINGYUN/Abp/PermissionManagement/Localization/Application/Contracts/en.json @@ -25,6 +25,8 @@ "DisplayName:Providers": "Providers", "Description:Providers": "A list of allowed providers to get/set value of this permission,An empty list indicates that all providers are allowed.", "DisplayName:StateCheckers": "State Checkers", + "DisplayName:PermissionGranted": "Authorized entities", + "DisplayName:PermissionProvider": "Permission provider", "MultiTenancySides:Tenant": "Tenant", "MultiTenancySides:Host": "Host", "MultiTenancySides:Both": "Both", @@ -42,6 +44,11 @@ "PermissionProviders:C": "Client", "PermissionProviders:R": "Role", "PermissionProviders:U": "User", - "PermissionProviders:O": "Organization Unit" + "PermissionProviders:O": "Organization Unit", + "AllPermissions": "Permissions", + "SearchPermission": "Search Permission", + "PermissionGranted": "Authorized entities", + "RejectPermission": "Reject Permission", + "RejectPermissionWarningMessage": "Reject the '{1}' permission authorization for '{0}'!" } } \ No newline at end of file diff --git a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application.Contracts/LINGYUN/Abp/PermissionManagement/Localization/Application/Contracts/zh-Hans.json b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application.Contracts/LINGYUN/Abp/PermissionManagement/Localization/Application/Contracts/zh-Hans.json index 44b06d389..7995b26c9 100644 --- a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application.Contracts/LINGYUN/Abp/PermissionManagement/Localization/Application/Contracts/zh-Hans.json +++ b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application.Contracts/LINGYUN/Abp/PermissionManagement/Localization/Application/Contracts/zh-Hans.json @@ -26,6 +26,8 @@ "DisplayName:Providers": "权限提供者", "Description:Providers": "允许提供程序获取/设置此权限值的列表。空列表表示允许所有提供程序.", "DisplayName:StateCheckers": "状态检查", + "DisplayName:PermissionGranted": "已授权对象", + "DisplayName:PermissionProvider": "权限提供者", "MultiTenancySides:Tenant": "租户", "MultiTenancySides:Host": "主机", "MultiTenancySides:Both": "两者", @@ -43,6 +45,11 @@ "PermissionProviders:C": "客户端", "PermissionProviders:R": "角色", "PermissionProviders:U": "用户", - "PermissionProviders:O": "组织机构" + "PermissionProviders:O": "组织机构", + "AllPermissions": "所有权限", + "SearchPermission": "搜索权限", + "PermissionGranted": "已授权对象", + "RejectPermission": "取消授权", + "RejectPermissionWarningMessage": "将取消'{0}'的'{1}'权限授权!" } } \ No newline at end of file diff --git a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application/LINGYUN.Abp.PermissionManagement.Application.csproj b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application/LINGYUN.Abp.PermissionManagement.Application.csproj index a9f5cbd78..0eedb75ad 100644 --- a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application/LINGYUN.Abp.PermissionManagement.Application.csproj +++ b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application/LINGYUN.Abp.PermissionManagement.Application.csproj @@ -19,6 +19,7 @@ + diff --git a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application/LINGYUN/Abp/PermissionManagement/AbpPermissionManagementApplicationModule.cs b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application/LINGYUN/Abp/PermissionManagement/AbpPermissionManagementApplicationModule.cs index 6ed24af73..1362632dd 100644 --- a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application/LINGYUN/Abp/PermissionManagement/AbpPermissionManagementApplicationModule.cs +++ b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application/LINGYUN/Abp/PermissionManagement/AbpPermissionManagementApplicationModule.cs @@ -5,6 +5,7 @@ namespace LINGYUN.Abp.PermissionManagement; [DependsOn( typeof(AbpPermissionManagementApplicationContractsModule), + typeof(AbpPermissionManagementDomainModule), typeof(VoloAbpPermissionManagementApplicationModule))] public class AbpPermissionManagementApplicationModule : AbpModule { diff --git a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application/LINGYUN/Abp/PermissionManagement/MultiplePermissionManager.cs b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application/LINGYUN/Abp/PermissionManagement/MultiplePermissionManager.cs index f635d83fa..0fd3abdd5 100644 --- a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application/LINGYUN/Abp/PermissionManagement/MultiplePermissionManager.cs +++ b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application/LINGYUN/Abp/PermissionManagement/MultiplePermissionManager.cs @@ -90,13 +90,18 @@ public class MultiplePermissionManager : PermissionManager, IMultiplePermissionM var provider = ManagementProviders.FirstOrDefault(m => m.Name == providerName) ?? throw new AbpException("Unknown permission management provider: " + providerName); - // 移除现有全部授权 - var delPermissionGrants = await PermissionGrantRepository.GetListAsync(providerName, providerKey); + // 获取现有全部授权 + var permissionGrants = await PermissionGrantRepository.GetListAsync(providerName, providerKey); + var permissionGrantNames = permissionGrants.Select(x => x.Name); + + // 删除取消授权 + var delPermissionGrantNames = existsPermissions.Where(x => !x.State.IsGranted).Select(x => x.State.Name); + var delPermissionGrants = permissionGrants.Where(x => delPermissionGrantNames.Contains(x.Name)); await PermissionGrantRepository.DeleteManyAsync(delPermissionGrants); - // 重新添加授权 + // 新增授权 var newPermissionGrants = existsPermissions - .Where(p => p.State.IsGranted) + .Where(x => x.State.IsGranted && !permissionGrantNames.Contains(x.State.Name)) .Select(p => new PermissionGrant( GuidGenerator.Create(), p.Definition.Name, diff --git a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application/LINGYUN/Abp/PermissionManagement/PermissionAppService.cs b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application/LINGYUN/Abp/PermissionManagement/PermissionAppService.cs index 806cd0de7..d7a4bcbcd 100644 --- a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application/LINGYUN/Abp/PermissionManagement/PermissionAppService.cs +++ b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application/LINGYUN/Abp/PermissionManagement/PermissionAppService.cs @@ -1,4 +1,5 @@ -using Microsoft.Extensions.Options; +using JetBrains.Annotations; +using Microsoft.Extensions.Options; using System.Linq; using System.Threading.Tasks; using Volo.Abp.Authorization.Permissions; @@ -10,16 +11,14 @@ using VoloPermissionAppService = Volo.Abp.PermissionManagement.PermissionAppServ namespace LINGYUN.Abp.PermissionManagement; [Dependency(ReplaceServices = true)] -[ExposeServices( - typeof(IPermissionAppService), - typeof(VoloPermissionAppService), - typeof(PermissionAppService))] -public class PermissionAppService : VoloPermissionAppService +public class PermissionAppService : VoloPermissionAppService, IPermissionAppService { + protected IPermissionGrantRepository PermissionGrantRepository { get; } public PermissionAppService( IMultiplePermissionManager permissionManager, IPermissionChecker permissionChecker, IPermissionDefinitionManager permissionDefinitionManager, + IPermissionGrantRepository permissionGrantRepository, IResourcePermissionManager resourcePermissionManager, IResourcePermissionGrantRepository resourcePermissionGrantRepository, IOptions options, @@ -33,6 +32,24 @@ public class PermissionAppService : VoloPermissionAppService options, simpleStateCheckerManager) { + PermissionGrantRepository = permissionGrantRepository; + } + + public async virtual Task GetGrantedByProviderAsync( + [NotNull] string permissionName, + [NotNull] string providerName) + { + await CheckProviderPolicy(providerName); + + var permissionGrants = await PermissionGrantRepository.GetListAsync([permissionName], providerName); + return new GetPermissionGrantedWithProviderListResultDto + { + GrantedProviders = permissionGrants.Select(x => new ProviderInfoDto + { + ProviderName = x.ProviderName, + ProviderKey = x.ProviderKey, + }).ToList(), + }; } public async override Task UpdateAsync(string providerName, string providerKey, UpdatePermissionsDto input) @@ -40,6 +57,7 @@ public class PermissionAppService : VoloPermissionAppService if (PermissionManager is IMultiplePermissionManager permissionManager) { await CheckProviderPolicy(providerName); + await FilterInputPermissionsByCurrentUserAsync(input); await permissionManager.SetManyAsync( providerName, diff --git a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Domain/FodyWeavers.xml b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Domain/FodyWeavers.xml new file mode 100644 index 000000000..00e1d9a1c --- /dev/null +++ b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Domain/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Domain/FodyWeavers.xsd b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Domain/FodyWeavers.xsd new file mode 100644 index 000000000..3f3946e28 --- /dev/null +++ b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Domain/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Domain/LINGYUN.Abp.PermissionManagement.Domain.csproj b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Domain/LINGYUN.Abp.PermissionManagement.Domain.csproj new file mode 100644 index 000000000..a13647323 --- /dev/null +++ b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Domain/LINGYUN.Abp.PermissionManagement.Domain.csproj @@ -0,0 +1,20 @@ + + + + + + + net10.0 + LINGYUN.Abp.PermissionManagement.Domain + LINGYUN.Abp.PermissionManagement.Domain + false + false + false + + + + + + + + diff --git a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Domain/LINGYUN/Abp/PermissionManagement/AbpPermissionManagementDomainModule.cs b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Domain/LINGYUN/Abp/PermissionManagement/AbpPermissionManagementDomainModule.cs new file mode 100644 index 000000000..ef3ef43ea --- /dev/null +++ b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Domain/LINGYUN/Abp/PermissionManagement/AbpPermissionManagementDomainModule.cs @@ -0,0 +1,9 @@ +using Volo.Abp.Modularity; +using VoloAbpPermissionManagementDomainModule = Volo.Abp.PermissionManagement.AbpPermissionManagementDomainModule; + +namespace LINGYUN.Abp.PermissionManagement; + +[DependsOn(typeof(VoloAbpPermissionManagementDomainModule))] +public class AbpPermissionManagementDomainModule : AbpModule +{ +} diff --git a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Domain/LINGYUN/Abp/PermissionManagement/IPermissionGrantRepository.cs b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Domain/LINGYUN/Abp/PermissionManagement/IPermissionGrantRepository.cs new file mode 100644 index 000000000..2284dceba --- /dev/null +++ b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Domain/LINGYUN/Abp/PermissionManagement/IPermissionGrantRepository.cs @@ -0,0 +1,15 @@ +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using Volo.Abp.PermissionManagement; + +namespace LINGYUN.Abp.PermissionManagement; + +public interface IPermissionGrantRepository : Volo.Abp.PermissionManagement.IPermissionGrantRepository +{ + Task> GetListAsync( + string[] names, + string providerName, + CancellationToken cancellationToken = default + ); +} diff --git a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.EntityFrameworkCore/FodyWeavers.xml b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.EntityFrameworkCore/FodyWeavers.xml new file mode 100644 index 000000000..00e1d9a1c --- /dev/null +++ b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.EntityFrameworkCore/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.EntityFrameworkCore/FodyWeavers.xsd b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.EntityFrameworkCore/FodyWeavers.xsd new file mode 100644 index 000000000..3f3946e28 --- /dev/null +++ b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.EntityFrameworkCore/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.EntityFrameworkCore/LINGYUN.Abp.PermissionManagement.EntityFrameworkCore.csproj b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.EntityFrameworkCore/LINGYUN.Abp.PermissionManagement.EntityFrameworkCore.csproj new file mode 100644 index 000000000..4bd229261 --- /dev/null +++ b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.EntityFrameworkCore/LINGYUN.Abp.PermissionManagement.EntityFrameworkCore.csproj @@ -0,0 +1,24 @@ + + + + + + + net10.0 + LINGYUN.Abp.PermissionManagement.EntityFrameworkCore + LINGYUN.Abp.PermissionManagement.EntityFrameworkCore + false + false + false + + + + + + + + + + + + diff --git a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.EntityFrameworkCore/LINGYUN/Abp/PermissionManagement/EntityFrameworkCore/AbpPermissionManagementEntityFrameworkCoreModule.cs b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.EntityFrameworkCore/LINGYUN/Abp/PermissionManagement/EntityFrameworkCore/AbpPermissionManagementEntityFrameworkCoreModule.cs new file mode 100644 index 000000000..a6b8f4ea6 --- /dev/null +++ b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.EntityFrameworkCore/LINGYUN/Abp/PermissionManagement/EntityFrameworkCore/AbpPermissionManagementEntityFrameworkCoreModule.cs @@ -0,0 +1,22 @@ +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.Modularity; +using Volo.Abp.PermissionManagement.EntityFrameworkCore; +using VoloAbpPermissionManagementEntityFrameworkCoreModule = Volo.Abp.PermissionManagement.EntityFrameworkCore.AbpPermissionManagementEntityFrameworkCoreModule; + +namespace LINGYUN.Abp.PermissionManagement.EntityFrameworkCore; + +[DependsOn( + typeof(AbpPermissionManagementDomainModule), + typeof(VoloAbpPermissionManagementEntityFrameworkCoreModule))] +public class AbpPermissionManagementEntityFrameworkCoreModule : AbpModule +{ + public override void ConfigureServices(ServiceConfigurationContext context) + { + context.Services.AddAbpDbContext(options => + { + options.AddDefaultRepositories(); + + options.AddRepository(); + }); + } +} diff --git a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.EntityFrameworkCore/LINGYUN/Abp/PermissionManagement/EntityFrameworkCore/EfCorePermissionGrantRepository.cs b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.EntityFrameworkCore/LINGYUN/Abp/PermissionManagement/EntityFrameworkCore/EfCorePermissionGrantRepository.cs new file mode 100644 index 000000000..90558c231 --- /dev/null +++ b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.EntityFrameworkCore/LINGYUN/Abp/PermissionManagement/EntityFrameworkCore/EfCorePermissionGrantRepository.cs @@ -0,0 +1,31 @@ +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.PermissionManagement.EntityFrameworkCore; + +namespace LINGYUN.Abp.PermissionManagement.EntityFrameworkCore; + +public class EfCorePermissionGrantRepository : Volo.Abp.PermissionManagement.EntityFrameworkCore.EfCorePermissionGrantRepository, IPermissionGrantRepository +{ + public EfCorePermissionGrantRepository( + IDbContextProvider dbContextProvider) + : base(dbContextProvider) + { + } + + public async virtual Task> GetListAsync( + string[] names, + string providerName, + CancellationToken cancellationToken = default) + { + return await (await GetDbSetAsync()) + .Where(s => + names.Contains(s.Name) && + s.ProviderName == providerName + ).ToListAsync(GetCancellationToken(cancellationToken)); + } +} diff --git a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.HttpApi/LINGYUN/Abp/PermissionManagement/HttpApi/PermissionsController.cs b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.HttpApi/LINGYUN/Abp/PermissionManagement/HttpApi/PermissionsController.cs new file mode 100644 index 000000000..3e3bae1d6 --- /dev/null +++ b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.HttpApi/LINGYUN/Abp/PermissionManagement/HttpApi/PermissionsController.cs @@ -0,0 +1,33 @@ +using JetBrains.Annotations; +using Microsoft.AspNetCore.Mvc; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.DependencyInjection; +using Volo.Abp.PermissionManagement; +using VoloPermissionsController = Volo.Abp.PermissionManagement.PermissionsController; + +namespace LINGYUN.Abp.PermissionManagement.HttpApi; + +[Dependency(ReplaceServices = true)] +[ExposeServices( + typeof(VoloPermissionsController), + IncludeSelf = true)] + +[RemoteService(Name = PermissionManagementRemoteServiceConsts.RemoteServiceName)] +[Area(PermissionManagementRemoteServiceConsts.ModuleName)] +[Route("api/permission-management/permissions")] +public class PermissionsController : VoloPermissionsController, IPermissionAppService +{ + private readonly IPermissionAppService _permissionAppService; + public PermissionsController(IPermissionAppService permissionAppService) : base(permissionAppService) + { + _permissionAppService = permissionAppService; + } + + [HttpGet] + [Route("granted/by-provider")] + public virtual Task GetGrantedByProviderAsync([NotNull] string permissionName, [NotNull] string providerName) + { + return _permissionAppService.GetGrantedByProviderAsync(permissionName, providerName); + } +} diff --git a/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/AuthServerHttpApiHostModule.Configure.cs b/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/AuthServerHttpApiHostModule.Configure.cs index 40e470b75..2824018fa 100644 --- a/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/AuthServerHttpApiHostModule.Configure.cs +++ b/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/AuthServerHttpApiHostModule.Configure.cs @@ -170,6 +170,8 @@ public partial class AuthServerHttpApiHostModule // Rename IdentityServer.Client.ManagePermissions // See https://github.com/abpframework/abp/blob/dev/modules/identityserver/src/Volo.Abp.PermissionManagement.Domain.IdentityServer/Volo/Abp/PermissionManagement/IdentityServer/AbpPermissionManagementDomainIdentityServerModule.cs options.ProviderPolicies[ClientPermissionValueProvider.ProviderName] = AbpOpenIddictPermissions.Applications.ManagePermissions; + + options.IsDynamicPermissionStoreEnabled = true; }); }