diff --git a/apps/vue/src/views/feature-management/definitions/features/components/FeatureDefinitionModal.vue b/apps/vue/src/views/feature-management/definitions/features/components/FeatureDefinitionModal.vue index fd470edb1..bdbe3168e 100644 --- a/apps/vue/src/views/feature-management/definitions/features/components/FeatureDefinitionModal.vue +++ b/apps/vue/src/views/feature-management/definitions/features/components/FeatureDefinitionModal.vue @@ -236,12 +236,14 @@ }, }); const getGroupOptions = computed(() => { - return state.availableGroups.map((group) => { - const info = deserialize(group.displayName); - return { - label: Lr(info.resourceName, info.name), - value: group.name, - }; + return state.availableGroups + .filter((group) => !group.isStatic) + .map((group) => { + const info = deserialize(group.displayName); + return { + label: Lr(info.resourceName, info.name), + value: group.name, + }; }); }); watch( @@ -295,7 +297,7 @@ GetListAsyncByInput({ groupName: groupName, }).then((res) => { - const featureGroup = groupBy(res.items, 'groupName'); + const featureGroup = groupBy(res.items.filter((def) => !def.isStatic), 'groupName'); const featureTreeData: FeatureTreeData[] = []; Object.keys(featureGroup).forEach((gk) => { const featureTree = listToTree(featureGroup[gk], { diff --git a/apps/vue/src/views/feature-management/definitions/groups/components/GroupDefinitionTable.vue b/apps/vue/src/views/feature-management/definitions/groups/components/GroupDefinitionTable.vue index a21a69f72..59a2b044d 100644 --- a/apps/vue/src/views/feature-management/definitions/groups/components/GroupDefinitionTable.vue +++ b/apps/vue/src/views/feature-management/definitions/groups/components/GroupDefinitionTable.vue @@ -35,6 +35,7 @@ ]" :dropDownActions="[ { + ifShow: !record.isStatic, auth: 'FeatureManagement.Definitions.Create', label: L('FeatureDefinitions:AddNew'), icon: 'ant-design:edit-outlined', diff --git a/apps/vue/src/views/permission-management/definitions/groups/components/GroupDefinitionTable.vue b/apps/vue/src/views/permission-management/definitions/groups/components/GroupDefinitionTable.vue index 3565c03f5..e277d6fb8 100644 --- a/apps/vue/src/views/permission-management/definitions/groups/components/GroupDefinitionTable.vue +++ b/apps/vue/src/views/permission-management/definitions/groups/components/GroupDefinitionTable.vue @@ -35,6 +35,7 @@ ]" :dropDownActions="[ { + ifShow: !record.isStatic, auth: 'PermissionManagement.Definitions.Create', label: L('PermissionDefinitions:AddNew'), icon: 'ant-design:edit-outlined', diff --git a/apps/vue/src/views/permission-management/definitions/permissions/components/PermissionDefinitionModal.vue b/apps/vue/src/views/permission-management/definitions/permissions/components/PermissionDefinitionModal.vue index 553ba8c8b..511f32821 100644 --- a/apps/vue/src/views/permission-management/definitions/permissions/components/PermissionDefinitionModal.vue +++ b/apps/vue/src/views/permission-management/definitions/permissions/components/PermissionDefinitionModal.vue @@ -188,12 +188,14 @@ }, }); const getGroupOptions = computed(() => { - return state.availableGroups.map((group) => { - const info = deserialize(group.displayName); - return { - label: Lr(info.resourceName, info.name), - value: group.name, - }; + return state.availableGroups + .filter((group) => !group.isStatic) + .map((group) => { + const info = deserialize(group.displayName); + return { + label: Lr(info.resourceName, info.name), + value: group.name, + }; }); }); watch( @@ -249,7 +251,7 @@ GetListAsyncByInput({ groupName: groupName, }).then((res) => { - const permissionGroup = groupBy(res.items, 'groupName'); + const permissionGroup = groupBy(res.items.filter((def) => !def.isStatic), 'groupName'); const permissionTreeData: PermissionTreeData[] = []; Object.keys(permissionGroup).forEach((gk) => { const permissionTree = listToTree(permissionGroup[gk], { diff --git a/apps/vue/src/views/webhooks/definitions/groups/components/GroupDefinitionTable.vue b/apps/vue/src/views/webhooks/definitions/groups/components/GroupDefinitionTable.vue index 629b38c53..0e8194a18 100644 --- a/apps/vue/src/views/webhooks/definitions/groups/components/GroupDefinitionTable.vue +++ b/apps/vue/src/views/webhooks/definitions/groups/components/GroupDefinitionTable.vue @@ -35,6 +35,7 @@ ]" :dropDownActions="[ { + ifShow: !record.isStatic, auth: 'AbpWebhooks.Definitions.Create', label: L('Webhooks:AddNew'), icon: 'ant-design:edit-outlined', diff --git a/apps/vue/src/views/webhooks/definitions/webhooks/components/WebhookDefinitionModal.vue b/apps/vue/src/views/webhooks/definitions/webhooks/components/WebhookDefinitionModal.vue index 11bf077e7..9d625e6ce 100644 --- a/apps/vue/src/views/webhooks/definitions/webhooks/components/WebhookDefinitionModal.vue +++ b/apps/vue/src/views/webhooks/definitions/webhooks/components/WebhookDefinitionModal.vue @@ -182,12 +182,14 @@ }); }); const getGroupOptions = computed(() => { - return state.availableGroups.map((group) => { - const info = deserialize(group.displayName); - return { - label: Lr(info.resourceName, info.name), - value: group.name, - }; + return state.availableGroups + .filter((group) => !group.isStatic) + .map((group) => { + const info = deserialize(group.displayName); + return { + label: Lr(info.resourceName, info.name), + value: group.name, + }; }); }); watch( @@ -220,7 +222,7 @@ state.entityEditFlag = false; if (!name) { state.entity = { - isInherited: true, + isEnabled: true, groupName: state.defaultGroup, requiredFeatures: [], }; diff --git a/aspnet-core/modules/feature-management/LINGYUN.Abp.FeatureManagement.Application/LINGYUN/Abp/FeatureManagement/Definitions/FeatureDefinitionAppService.cs b/aspnet-core/modules/feature-management/LINGYUN.Abp.FeatureManagement.Application/LINGYUN/Abp/FeatureManagement/Definitions/FeatureDefinitionAppService.cs index f2951c68a..852db209e 100644 --- a/aspnet-core/modules/feature-management/LINGYUN.Abp.FeatureManagement.Application/LINGYUN/Abp/FeatureManagement/Definitions/FeatureDefinitionAppService.cs +++ b/aspnet-core/modules/feature-management/LINGYUN.Abp.FeatureManagement.Application/LINGYUN/Abp/FeatureManagement/Definitions/FeatureDefinitionAppService.cs @@ -50,6 +50,13 @@ public class FeatureDefinitionAppService : FeatureManagementAppServiceBase, IFea [Authorize(FeatureManagementPermissionNames.Definition.Create)] public async virtual Task CreateAsync(FeatureDefinitionCreateDto input) { + var staticGroups = await _staticFeatureDefinitionStore.GetGroupsAsync(); + if (staticGroups.Any(g => g.Name == input.GroupName)) + { + throw new BusinessException(FeatureManagementErrorCodes.GroupDefinition.StaticGroupNotAllowedChanged) + .WithData(nameof(FeatureDefinitionRecord.Name), input.GroupName); + } + if (await _staticFeatureDefinitionStore.GetOrNullAsync(input.Name) != null) { throw new BusinessException(FeatureManagementErrorCodes.Definition.AlreayNameExists) diff --git a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application/LINGYUN/Abp/PermissionManagement/Definitions/PermissionDefinitionAppService.cs b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application/LINGYUN/Abp/PermissionManagement/Definitions/PermissionDefinitionAppService.cs index 107403310..a368cc673 100644 --- a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application/LINGYUN/Abp/PermissionManagement/Definitions/PermissionDefinitionAppService.cs +++ b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application/LINGYUN/Abp/PermissionManagement/Definitions/PermissionDefinitionAppService.cs @@ -57,6 +57,12 @@ public class PermissionDefinitionAppService : PermissionManagementAppServiceBase throw new BusinessException(PermissionManagementErrorCodes.Definition.AlreayNameExists) .WithData(nameof(PermissionDefinitionRecord.Name), input.Name); } + var staticGroups = await _staticPermissionDefinitionStore.GetGroupsAsync(); + if (staticGroups.Any(g => g.Name == input.GroupName)) + { + throw new BusinessException(PermissionManagementErrorCodes.GroupDefinition.StaticGroupNotAllowedChanged) + .WithData(nameof(PermissionDefinitionRecord.Name), input.GroupName); + } var groupDefinition = await _permissionDefinitionManager.GetGroupOrNullAsync(input.GroupName); if (groupDefinition == null) diff --git a/aspnet-core/modules/webhooks/LINGYUN.Abp.WebhooksManagement.Application/LINGYUN/Abp/WebhooksManagement/Definitions/WebhookDefinitionAppService.cs b/aspnet-core/modules/webhooks/LINGYUN.Abp.WebhooksManagement.Application/LINGYUN/Abp/WebhooksManagement/Definitions/WebhookDefinitionAppService.cs index 53cbeb2be..dfd2f5078 100644 --- a/aspnet-core/modules/webhooks/LINGYUN.Abp.WebhooksManagement.Application/LINGYUN/Abp/WebhooksManagement/Definitions/WebhookDefinitionAppService.cs +++ b/aspnet-core/modules/webhooks/LINGYUN.Abp.WebhooksManagement.Application/LINGYUN/Abp/WebhooksManagement/Definitions/WebhookDefinitionAppService.cs @@ -38,6 +38,12 @@ public class WebhookDefinitionAppService : WebhooksManagementAppServiceBase, IWe [Authorize(WebhooksManagementPermissions.WebhookDefinition.Create)] public async virtual Task CreateAsync(WebhookDefinitionCreateDto input) { + if (await _staticWebhookDefinitionStore.GetGroupOrNullAsync(input.GroupName) != null) + { + throw new BusinessException(WebhooksManagementErrorCodes.WebhookGroupDefinition.StaticGroupNotAllowedChanged) + .WithData(nameof(WebhookDefinitionRecord.Name), input.GroupName); + } + if (await _webhookDefinitionManager.GetOrNullAsync(input.Name) != null) { throw new BusinessException(WebhooksManagementErrorCodes.WebhookDefinition.AlreayNameExists)