Browse Source

feat: Add query for authorized objects

pull/1513/head
colin 3 months ago
parent
commit
df36e5fd9f
  1. 24
      apps/vben5/packages/@abp/permissions/src/api/usePermissionsApi.ts
  2. 1
      apps/vben5/packages/@abp/permissions/src/components/index.ts
  3. 406
      apps/vben5/packages/@abp/permissions/src/components/permissions/PermissionGrantedModal.vue
  4. 32
      apps/vben5/packages/@abp/permissions/src/components/permissions/PermissionModal.vue
  5. 7
      apps/vben5/packages/@abp/permissions/src/types/permissions.ts
  6. 19
      apps/vben5/packages/@abp/permissions/src/utils/index.ts
  7. 2
      aspnet-core/LINGYUN.MicroService.All.slnx
  8. 32
      aspnet-core/migrations/LY.MicroService.BackendAdmin.DbMigrator/BackendAdminDbMigratorModule.cs
  9. 14
      aspnet-core/migrations/LY.MicroService.BackendAdmin.DbMigrator/LY.MicroService.BackendAdmin.DbMigrator.csproj
  10. 48
      aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/BackendAdminMigrationsEntityFrameworkCoreModule.cs
  11. 29
      aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/LY.MicroService.BackendAdmin.EntityFrameworkCore.csproj
  12. 9
      aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application.Contracts/LINGYUN/Abp/PermissionManagement/GetPermissionGrantedWithProviderListResultDto.cs
  13. 11
      aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application.Contracts/LINGYUN/Abp/PermissionManagement/IPermissionAppService.cs
  14. 9
      aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application.Contracts/LINGYUN/Abp/PermissionManagement/Localization/Application/Contracts/en.json
  15. 9
      aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application.Contracts/LINGYUN/Abp/PermissionManagement/Localization/Application/Contracts/zh-Hans.json
  16. 1
      aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application/LINGYUN.Abp.PermissionManagement.Application.csproj
  17. 1
      aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application/LINGYUN/Abp/PermissionManagement/AbpPermissionManagementApplicationModule.cs
  18. 13
      aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application/LINGYUN/Abp/PermissionManagement/MultiplePermissionManager.cs
  19. 30
      aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application/LINGYUN/Abp/PermissionManagement/PermissionAppService.cs
  20. 3
      aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Domain/FodyWeavers.xml
  21. 30
      aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Domain/FodyWeavers.xsd
  22. 20
      aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Domain/LINGYUN.Abp.PermissionManagement.Domain.csproj
  23. 9
      aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Domain/LINGYUN/Abp/PermissionManagement/AbpPermissionManagementDomainModule.cs
  24. 15
      aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Domain/LINGYUN/Abp/PermissionManagement/IPermissionGrantRepository.cs
  25. 3
      aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.EntityFrameworkCore/FodyWeavers.xml
  26. 30
      aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.EntityFrameworkCore/FodyWeavers.xsd
  27. 24
      aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.EntityFrameworkCore/LINGYUN.Abp.PermissionManagement.EntityFrameworkCore.csproj
  28. 22
      aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.EntityFrameworkCore/LINGYUN/Abp/PermissionManagement/EntityFrameworkCore/AbpPermissionManagementEntityFrameworkCoreModule.cs
  29. 31
      aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.EntityFrameworkCore/LINGYUN/Abp/PermissionManagement/EntityFrameworkCore/EfCorePermissionGrantRepository.cs
  30. 33
      aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.HttpApi/LINGYUN/Abp/PermissionManagement/HttpApi/PermissionsController.cs
  31. 2
      aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/AuthServerHttpApiHostModule.Configure.cs

24
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<GetPermissionGrantedWithProviderListResultDto> {
return request<GetPermissionGrantedWithProviderListResultDto>(
`/api/permission-management/permissions/granted/by-provider`,
{
method: 'GET',
params: {
permissionName,
providerName,
},
},
);
}
return {
cancel,
getApi,
updateApi,
getGrantedByProviderApi,
};
}

1
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';

406
apps/vben5/packages/@abp/permissions/src/components/permissions/PermissionGrantedModal.vue

@ -0,0 +1,406 @@
<script setup lang="ts">
import type { NameValue } from '@abp/core';
import type { VxeGridProps } from '@abp/ui';
import type {
DataNode,
EventDataNode,
} from 'ant-design-vue/es/vc-tree/interface';
import type { CheckInfo } from 'ant-design-vue/es/vc-tree/props';
import type { PermissionProvider } from '../../types/permissions';
import { h, reactive, ref, watch } from 'vue';
import { ColPage, useVbenModal } from '@vben/common-ui';
import { $t } from '@vben/locales';
import {
listToTree,
useLocalization,
useLocalizationSerializer,
} from '@abp/core';
import { useVbenVxeGrid } from '@abp/ui';
import { DeleteOutlined } from '@ant-design/icons-vue';
import {
Button,
Card,
InputSearch,
Popconfirm,
Select,
Tree,
} from 'ant-design-vue';
import { usePermissionDefinitionsApi } from '../../api/usePermissionDefinitionsApi';
import { usePermissionGroupDefinitionsApi } from '../../api/usePermissionGroupDefinitionsApi';
import { usePermissionsApi } from '../../api/usePermissionsApi';
interface ModalState {
providerName: string;
readonly?: boolean;
}
interface PermissionVo {
children: PermissionVo[];
displayName: string;
groupName: string;
isEnabled: boolean;
isStatic: boolean;
key: string;
name: string;
parentName?: string;
providers: string[];
stateCheckers: string[];
}
interface PermissionGroupVo {
checkable?: boolean;
displayName: string;
key: string;
name: string;
permissions: PermissionVo[];
}
interface PermissionInfo {
displayName?: string;
name: string;
}
const props = reactive({
leftCollapsible: false,
leftMaxWidth: 30,
leftMinWidth: 20,
leftWidth: 30,
resizable: true,
rightWidth: 70,
splitHandle: true,
splitLine: true,
});
const providerName = ref<string>('');
const searchPermission = ref<string>('');
const permissionInfo = ref<PermissionInfo>();
const expandNodeKeys = ref<string[]>([]);
const checkedNodeKeys = ref<string[]>([]);
const autoExpandParent = ref<boolean>(false);
const permissionGroups = ref<PermissionGroupVo[]>([]);
const permissionProviders = ref<NameValue<string>[]>([]);
const { Lr } = useLocalization();
const { deserialize } = useLocalizationSerializer();
const { getListApi: getPermissionDefintionsApi, getAssignableProvidersApi } =
usePermissionDefinitionsApi();
const { getListApi: getPermissionGroupDefinitionsApi } =
usePermissionGroupDefinitionsApi();
const { getGrantedByProviderApi, updateApi } = usePermissionsApi();
const searchPermissionKeys = (
key: string,
permissions: PermissionVo[],
): string[] => {
const parentKeys: string[] = [];
if (!permissions) return parentKeys;
for (const permission of permissions) {
if (permission.children) {
if (permission.children.some((item) => item.key === key)) {
parentKeys.push(permission.key);
} else if (permission.children.some((item) => item.displayName === key)) {
parentKeys.push(permission.key);
} else if (searchPermissionKeys(key, permission.children)) {
parentKeys.push(...searchPermissionKeys(key, permission.children));
}
} else if (permission.key.includes(key)) {
parentKeys.push(permission.key);
} else if (permission.displayName.includes(key)) {
parentKeys.push(permission.key);
}
}
return parentKeys;
};
watch(searchPermission, (value) => {
if (!value) {
expandNodeKeys.value = [];
autoExpandParent.value = false;
return;
}
const expanded: string[] = [];
permissionGroups.value.forEach((group) => {
const parentKeys = searchPermissionKeys(value, group.permissions);
expanded.push(...parentKeys);
});
expandNodeKeys.value = expanded.filter(
(item, i, self) => item && self.indexOf(item) === i,
);
searchPermission.value = value;
autoExpandParent.value = true;
});
const [Modal, modalApi] = useVbenModal({
fullscreen: true,
fullscreenButton: false,
async onOpenChange(isOpen) {
if (isOpen) {
await onInit();
}
},
title: $t('AbpPermissionManagement.PermissionGranted'),
});
const gridOptions: VxeGridProps<PermissionProvider> = {
columns: [
{
align: 'center',
type: 'seq',
width: 50,
},
{
align: 'left',
field: 'providerKey',
minWidth: 150,
sortable: true,
title: $t('AbpPermissionManagement.DisplayName:PermissionGranted'),
},
{
field: 'action',
fixed: 'right',
slots: { default: 'action' },
title: $t('AbpUi.Actions'),
width: 150,
},
],
expandConfig: {
accordion: true,
padding: true,
trigger: 'row',
height: 300,
},
exportConfig: {},
keepSource: true,
proxyConfig: {
ajax: {
query: async () => {
if (!permissionInfo.value) {
return { items: [], totalCount: 0 };
}
const { grantedProviders } = await getGrantedByProviderApi(
permissionInfo.value.name,
providerName.value,
);
return {
items: grantedProviders,
totalCount: grantedProviders.length,
};
},
},
response: {
total: 'totalCount',
list: 'items',
},
},
toolbarConfig: {
custom: true,
export: true,
refresh: false,
zoom: true,
},
};
const [Grid, gridApi] = useVbenVxeGrid({
gridOptions,
});
function onExpandNode(_keys: any, info: { node: EventDataNode }) {
const nodeKey = String(info.node.key);
const index = expandNodeKeys.value.indexOf(nodeKey);
expandNodeKeys.value =
index === -1
? [...expandNodeKeys.value, nodeKey]
: expandNodeKeys.value.filter((key) => key !== nodeKey);
autoExpandParent.value = false;
}
function onSelectNode(
_: any,
info: {
node: EventDataNode;
selectedNodes: DataNode[];
},
) {
const nodeKey = String(info.node.key);
const index = expandNodeKeys.value.indexOf(nodeKey);
expandNodeKeys.value =
index === -1
? [...expandNodeKeys.value, nodeKey]
: expandNodeKeys.value.filter((key) => key !== nodeKey);
}
async function onCheckNode(_keys: any, info: CheckInfo) {
try {
modalApi.lock();
const nodeKey = String(info.node.key);
checkedNodeKeys.value = [nodeKey];
permissionInfo.value = {
displayName: info.node.dataRef?.displayName,
name: nodeKey,
};
await gridApi.query();
} finally {
modalApi.unlock();
}
}
async function onProviderChange() {
gridApi.setState((state) => {
state.gridOptions!.data = [];
return state;
});
await gridApi.query();
}
async function onInit() {
permissionInfo.value = undefined;
expandNodeKeys.value = [];
checkedNodeKeys.value = [];
permissionGroups.value = [];
const state = modalApi.getData<ModalState>();
providerName.value = state.providerName;
const [providerRes, permissionRes, permissionGroupRes] = await Promise.all([
getAssignableProvidersApi(),
getPermissionDefintionsApi(),
getPermissionGroupDefinitionsApi(),
]);
permissionProviders.value = providerRes.items;
permissionGroups.value = permissionGroupRes.items.map((group) => {
const localizableGroup = deserialize(group.displayName);
const permissions = permissionRes.items
.filter((permission) => permission.groupName === group.name)
.map((permission) => {
const localizablePermission = deserialize(permission.displayName);
return {
...permission,
key: permission.name,
displayName: Lr(
localizablePermission.resourceName,
localizablePermission.name,
),
};
});
return {
...group,
checkable: false,
key: group.name,
displayName: Lr(localizableGroup.resourceName, localizableGroup.name),
permissions: listToTree(permissions, {
id: 'name',
pid: 'parentName',
children: 'permissions',
}),
};
});
}
async function onDeleteGrand(grantedInfo: PermissionProvider) {
await updateApi(grantedInfo, {
permissions: [
{
isGranted: false,
name: permissionInfo.value!.name,
},
],
});
await gridApi.query();
}
</script>
<template>
<Modal>
<ColPage auto-content-height v-bind="props">
<template #left>
<Card
:body-style="{ height: '80vh' }"
:title="$t('AbpPermissionManagement.AllPermissions')"
>
<template #extra>
<InputSearch
v-model:value="searchPermission"
enter-button
placeholder="搜索权限"
/>
</template>
<div class="h-full overflow-y-auto">
<Tree
:auto-expand-parent="autoExpandParent"
:check-strictly="true"
:checkable="true"
:checked-keys="checkedNodeKeys"
:expanded-keys="expandNodeKeys"
:tree-data="permissionGroups"
:field-names="{
key: 'name',
title: 'displayName',
children: 'permissions',
}"
@check="onCheckNode"
@expand="onExpandNode"
@select="onSelectNode"
>
<template #title="{ displayName }">
<span v-if="displayName.includes(searchPermission)">
{{
displayName.substring(
0,
displayName.indexOf(searchPermission),
)
}}
<span style="color: #f50">{{ searchPermission }}</span>
{{
displayName.substring(
displayName.indexOf(searchPermission) +
searchPermission.length,
)
}}
</span>
<span v-else>{{ displayName }}</span>
</template>
</Tree>
</div>
</Card>
</template>
<Card>
<template #title>
<div class="flex items-center gap-4">
<span>{{
$t('AbpPermissionManagement.DisplayName:PermissionProvider')
}}</span>
<Select
class="min-w-[220px]"
:options="permissionProviders"
:field-names="{ label: 'name', value: 'value' }"
v-model:value="providerName"
@change="onProviderChange"
/>
</div>
</template>
<Grid>
<template #action="{ row }">
<Popconfirm
:title="$t('AbpUi.AreYouSure')"
:description="
$t('AbpPermissionManagement.RejectPermissionWarningMessage', [
row.providerKey,
permissionInfo!.displayName ?? permissionInfo!.name,
])
"
@confirm="onDeleteGrand(row)"
>
<Button :icon="h(DeleteOutlined)" block danger type="link">
{{ $t('AbpPermissionManagement.RejectPermission') }}
</Button>
</Popconfirm>
</template>
</Grid>
</Card>
</ColPage>
</Modal>
</template>
<style scoped></style>

32
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();
}
</script>
<template>
<Modal>
<div class="flex flex-col content-center justify-center">
<div>
<div class="flex items-center justify-between">
<Checkbox
:disabled="modelState?.readonly"
@change="onCheckAll"
@ -275,6 +297,9 @@ function getChildren(permissions: PermissionTree[]): PermissionTree[] {
>
{{ $t('AbpPermissionManagement.SelectAllInAllTabs') }}
</Checkbox>
<Button type="primary" @click="onSearchPermissionGrant">
{{ $t('AbpPermissionManagement.PermissionGranted') }}
</Button>
</div>
<Divider />
<Tabs tab-position="left" type="card">
@ -318,6 +343,7 @@ function getChildren(permissions: PermissionTree[]): PermissionTree[] {
</template>
</Tabs>
</div>
<PermissionGrantedModal />
</Modal>
</template>

7
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,

19
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;

2
aspnet-core/LINGYUN.MicroService.All.slnx

@ -406,6 +406,8 @@
<Project Path="modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application.Contracts/LINGYUN.Abp.PermissionManagement.Application.Contracts.csproj" />
<Project Path="modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application/LINGYUN.Abp.PermissionManagement.Application.csproj" />
<Project Path="modules/permissions-management/LINGYUN.Abp.PermissionManagement.Domain.OrganizationUnits/LINGYUN.Abp.PermissionManagement.Domain.OrganizationUnits.csproj" />
<Project Path="modules/permissions-management/LINGYUN.Abp.PermissionManagement.Domain/LINGYUN.Abp.PermissionManagement.Domain.csproj" Id="867ae033-0d5c-4ad3-934a-971efd0c6b43" />
<Project Path="modules/permissions-management/LINGYUN.Abp.PermissionManagement.EntityFrameworkCore/LINGYUN.Abp.PermissionManagement.EntityFrameworkCore.csproj" Id="59d20b04-2670-4cea-8335-4dea120a6a9d" />
<Project Path="modules/permissions-management/LINGYUN.Abp.PermissionManagement.HttpApi/LINGYUN.Abp.PermissionManagement.HttpApi.csproj" />
</Folder>
<Folder Name="/modules/platform/">

32
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

14
aspnet-core/migrations/LY.MicroService.BackendAdmin.DbMigrator/LY.MicroService.BackendAdmin.DbMigrator.csproj

@ -33,20 +33,6 @@
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\modules\webhooks\LINGYUN.Abp.WebhooksManagement.Application.Contracts\LINGYUN.Abp.WebhooksManagement.Application.Contracts.csproj" />
<ProjectReference Include="..\..\modules\task-management\LINGYUN.Abp.TaskManagement.Application.Contracts\LINGYUN.Abp.TaskManagement.Application.Contracts.csproj" />
<ProjectReference Include="..\..\modules\realtime-notifications\LINGYUN.Abp.Notifications.Application.Contracts\LINGYUN.Abp.Notifications.Application.Contracts.csproj" />
<ProjectReference Include="..\..\modules\realtime-message\LINGYUN.Abp.MessageService.Application.Contracts\LINGYUN.Abp.MessageService.Application.Contracts.csproj" />
<ProjectReference Include="..\..\modules\platform\LINGYUN.Platform.Application.Contracts\LINGYUN.Platform.Application.Contracts.csproj" />
<ProjectReference Include="..\..\modules\blob-management\LINGYUN.Abp.BlobManagement.Application.Contracts\LINGYUN.Abp.BlobManagement.Application.Contracts.csproj" />
<ProjectReference Include="..\..\modules\localization-management\LINGYUN.Abp.LocalizationManagement.Application.Contracts\LINGYUN.Abp.LocalizationManagement.Application.Contracts.csproj" />
<ProjectReference Include="..\..\modules\identity\LINGYUN.Abp.Identity.Application.Contracts\LINGYUN.Abp.Identity.Application.Contracts.csproj" />
<ProjectReference Include="..\..\modules\openiddict\LINGYUN.Abp.OpenIddict.Application.Contracts\LINGYUN.Abp.OpenIddict.Application.Contracts.csproj" />
<ProjectReference Include="..\..\framework\settings\LINGYUN.Abp.SettingManagement.Application.Contracts\LINGYUN.Abp.SettingManagement.Application.Contracts.csproj" />
<ProjectReference Include="..\..\modules\auditing\LINGYUN.Abp.Auditing.Application.Contracts\LINGYUN.Abp.Auditing.Application.Contracts.csproj" />
<ProjectReference Include="..\..\modules\caching-management\LINGYUN.Abp.CachingManagement.Application.Contracts\LINGYUN.Abp.CachingManagement.Application.Contracts.csproj" />
<ProjectReference Include="..\..\modules\feature-management\LINGYUN.Abp.FeatureManagement.Application.Contracts\LINGYUN.Abp.FeatureManagement.Application.Contracts.csproj" />
<ProjectReference Include="..\..\modules\text-templating\LINGYUN.Abp.TextTemplating.Application.Contracts\LINGYUN.Abp.TextTemplating.Application.Contracts.csproj" />
<ProjectReference Include="..\LY.MicroService.BackendAdmin.EntityFrameworkCore\LY.MicroService.BackendAdmin.EntityFrameworkCore.csproj" />
</ItemGroup>

48
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),

29
aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/LY.MicroService.BackendAdmin.EntityFrameworkCore.csproj

@ -16,13 +16,40 @@
</PackageReference>
<PackageReference Include="Volo.Abp.FeatureManagement.EntityFrameworkCore" />
<PackageReference Include="Volo.Abp.SettingManagement.EntityFrameworkCore" />
<PackageReference Include="Volo.Abp.PermissionManagement.EntityFrameworkCore" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\framework\settings\LINGYUN.Abp.SettingManagement.Application.Contracts\LINGYUN.Abp.SettingManagement.Application.Contracts.csproj" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\modules\account\LINGYUN.Abp.Account.Application.Contracts\LINGYUN.Abp.Account.Application.Contracts.csproj" />
<ProjectReference Include="..\..\modules\auditing\LINGYUN.Abp.Auditing.Application.Contracts\LINGYUN.Abp.Auditing.Application.Contracts.csproj" />
<ProjectReference Include="..\..\modules\caching-management\LINGYUN.Abp.CachingManagement.Application.Contracts\LINGYUN.Abp.CachingManagement.Application.Contracts.csproj" />
<ProjectReference Include="..\..\modules\data-protection\LINGYUN.Abp.DataProtectionManagement.Application.Contracts\LINGYUN.Abp.DataProtectionManagement.Application.Contracts.csproj" />
<ProjectReference Include="..\..\modules\feature-management\LINGYUN.Abp.FeatureManagement.Application.Contracts\LINGYUN.Abp.FeatureManagement.Application.Contracts.csproj" />
<ProjectReference Include="..\..\modules\gdpr\LINGYUN.Abp.Gdpr.Application.Contracts\LINGYUN.Abp.Gdpr.Application.Contracts.csproj" />
<ProjectReference Include="..\..\modules\identity\LINGYUN.Abp.Identity.Application.Contracts\LINGYUN.Abp.Identity.Application.Contracts.csproj" />
<ProjectReference Include="..\..\modules\localization-management\LINGYUN.Abp.LocalizationManagement.Application.Contracts\LINGYUN.Abp.LocalizationManagement.Application.Contracts.csproj" />
<ProjectReference Include="..\..\modules\openIddict\LINGYUN.Abp.OpenIddict.Application.Contracts\LINGYUN.Abp.OpenIddict.Application.Contracts.csproj" />
<ProjectReference Include="..\..\modules\blob-management\LINGYUN.Abp.BlobManagement.Application.Contracts\LINGYUN.Abp.BlobManagement.Application.Contracts.csproj" />
<ProjectReference Include="..\..\modules\permissions-management\LINGYUN.Abp.PermissionManagement.Application.Contracts\LINGYUN.Abp.PermissionManagement.Application.Contracts.csproj" />
<ProjectReference Include="..\..\modules\platform\LINGYUN.Platform.Application.Contracts\LINGYUN.Platform.Application.Contracts.csproj" />
<ProjectReference Include="..\..\modules\project\LINGYUN.Abp.ProjectManagement.Application.Contracts\LINGYUN.Abp.ProjectManagement.Application.Contracts.csproj" />
<ProjectReference Include="..\..\modules\realtime-message\LINGYUN.Abp.MessageService.Application.Contracts\LINGYUN.Abp.MessageService.Application.Contracts.csproj" />
<ProjectReference Include="..\..\modules\realtime-notifications\LINGYUN.Abp.Notifications.Application.Contracts\LINGYUN.Abp.Notifications.Application.Contracts.csproj" />
<ProjectReference Include="..\..\modules\rules-management\rules-engine\LINGYUN.Abp.RulesEngineManagement.Application.Contracts\LINGYUN.Abp.RulesEngineManagement.Application.Contracts.csproj" />
<ProjectReference Include="..\..\modules\saas\LINGYUN.Abp.Saas.Application.Contracts\LINGYUN.Abp.Saas.Application.Contracts.csproj" />
<ProjectReference Include="..\..\modules\task-management\LINGYUN.Abp.TaskManagement.Application.Contracts\LINGYUN.Abp.TaskManagement.Application.Contracts.csproj" />
<ProjectReference Include="..\..\modules\text-templating\LINGYUN.Abp.TextTemplating.Application.Contracts\LINGYUN.Abp.TextTemplating.Application.Contracts.csproj" />
<ProjectReference Include="..\..\modules\webhooks\LINGYUN.Abp.WebhooksManagement.Application.Contracts\LINGYUN.Abp.WebhooksManagement.Application.Contracts.csproj" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\framework\common\LINGYUN.Abp.Data.DbMigrator\LINGYUN.Abp.Data.DbMigrator.csproj" />
<ProjectReference Include="..\..\framework\efcore\LINGYUN.Abp.EntityFrameworkCore.MySQL.Microting\LINGYUN.Abp.EntityFrameworkCore.MySQL.Microting.csproj" />
<ProjectReference Include="..\..\modules\data-protection\LINGYUN.Abp.DataProtectionManagement.EntityFrameworkCore\LINGYUN.Abp.DataProtectionManagement.EntityFrameworkCore.csproj" />
<ProjectReference Include="..\..\modules\permissions-management\LINGYUN.Abp.PermissionManagement.EntityFrameworkCore\LINGYUN.Abp.PermissionManagement.EntityFrameworkCore.csproj" />
<ProjectReference Include="..\..\modules\saas\LINGYUN.Abp.Saas.EntityFrameworkCore\LINGYUN.Abp.Saas.EntityFrameworkCore.csproj" />
<ProjectReference Include="..\..\modules\text-templating\LINGYUN.Abp.TextTemplating.EntityFrameworkCore\LINGYUN.Abp.TextTemplating.EntityFrameworkCore.csproj" />
</ItemGroup>

9
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<ProviderInfoDto> GrantedProviders { get; set; } = new List<ProviderInfoDto>();
}

11
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<GetPermissionGrantedWithProviderListResultDto> GetGrantedByProviderAsync(
[NotNull] string permissionName,
[NotNull] string providerName);
}

9
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}'!"
}
}

9
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}'权限授权!"
}
}

1
aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application/LINGYUN.Abp.PermissionManagement.Application.csproj

@ -19,6 +19,7 @@
<ItemGroup>
<ProjectReference Include="..\LINGYUN.Abp.PermissionManagement.Application.Contracts\LINGYUN.Abp.PermissionManagement.Application.Contracts.csproj" />
<ProjectReference Include="..\LINGYUN.Abp.PermissionManagement.Domain\LINGYUN.Abp.PermissionManagement.Domain.csproj" />
</ItemGroup>
</Project>

1
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
{

13
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,

30
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<PermissionManagementOptions> options,
@ -33,6 +32,24 @@ public class PermissionAppService : VoloPermissionAppService
options,
simpleStateCheckerManager)
{
PermissionGrantRepository = permissionGrantRepository;
}
public async virtual Task<GetPermissionGrantedWithProviderListResultDto> 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,

3
aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Domain/FodyWeavers.xml

@ -0,0 +1,3 @@
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
<ConfigureAwait />
</Weavers>

30
aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Domain/FodyWeavers.xsd

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- This file was generated by Fody. Manual changes to this file will be lost when your project is rebuilt. -->
<xs:element name="Weavers">
<xs:complexType>
<xs:all>
<xs:element name="ConfigureAwait" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:attribute name="ContinueOnCapturedContext" type="xs:boolean" />
</xs:complexType>
</xs:element>
</xs:all>
<xs:attribute name="VerifyAssembly" type="xs:boolean">
<xs:annotation>
<xs:documentation>'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="VerifyIgnoreCodes" type="xs:string">
<xs:annotation>
<xs:documentation>A comma-separated list of error codes that can be safely ignored in assembly verification.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="GenerateXsd" type="xs:boolean">
<xs:annotation>
<xs:documentation>'false' to turn off automatic generation of the XML Schema file.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:schema>

20
aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Domain/LINGYUN.Abp.PermissionManagement.Domain.csproj

@ -0,0 +1,20 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\..\configureawait.props" />
<Import Project="..\..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<AssemblyName>LINGYUN.Abp.PermissionManagement.Domain</AssemblyName>
<PackageId>LINGYUN.Abp.PermissionManagement.Domain</PackageId>
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
<RootNamespace />
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.PermissionManagement.Domain" />
</ItemGroup>
</Project>

9
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
{
}

15
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<List<PermissionGrant>> GetListAsync(
string[] names,
string providerName,
CancellationToken cancellationToken = default
);
}

3
aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.EntityFrameworkCore/FodyWeavers.xml

@ -0,0 +1,3 @@
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
<ConfigureAwait />
</Weavers>

30
aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.EntityFrameworkCore/FodyWeavers.xsd

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- This file was generated by Fody. Manual changes to this file will be lost when your project is rebuilt. -->
<xs:element name="Weavers">
<xs:complexType>
<xs:all>
<xs:element name="ConfigureAwait" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:attribute name="ContinueOnCapturedContext" type="xs:boolean" />
</xs:complexType>
</xs:element>
</xs:all>
<xs:attribute name="VerifyAssembly" type="xs:boolean">
<xs:annotation>
<xs:documentation>'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="VerifyIgnoreCodes" type="xs:string">
<xs:annotation>
<xs:documentation>A comma-separated list of error codes that can be safely ignored in assembly verification.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="GenerateXsd" type="xs:boolean">
<xs:annotation>
<xs:documentation>'false' to turn off automatic generation of the XML Schema file.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:schema>

24
aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.EntityFrameworkCore/LINGYUN.Abp.PermissionManagement.EntityFrameworkCore.csproj

@ -0,0 +1,24 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\..\configureawait.props" />
<Import Project="..\..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<AssemblyName>LINGYUN.Abp.PermissionManagement.EntityFrameworkCore</AssemblyName>
<PackageId>LINGYUN.Abp.PermissionManagement.EntityFrameworkCore</PackageId>
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
<RootNamespace />
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.PermissionManagement.EntityFrameworkCore" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\LINGYUN.Abp.PermissionManagement.Domain\LINGYUN.Abp.PermissionManagement.Domain.csproj" />
</ItemGroup>
</Project>

22
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<PermissionManagementDbContext>(options =>
{
options.AddDefaultRepositories<IPermissionManagementDbContext>();
options.AddRepository<Volo.Abp.PermissionManagement.PermissionGrant, EfCorePermissionGrantRepository>();
});
}
}

31
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<IPermissionManagementDbContext> dbContextProvider)
: base(dbContextProvider)
{
}
public async virtual Task<List<Volo.Abp.PermissionManagement.PermissionGrant>> GetListAsync(
string[] names,
string providerName,
CancellationToken cancellationToken = default)
{
return await (await GetDbSetAsync())
.Where(s =>
names.Contains(s.Name) &&
s.ProviderName == providerName
).ToListAsync(GetCancellationToken(cancellationToken));
}
}

33
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<GetPermissionGrantedWithProviderListResultDto> GetGrantedByProviderAsync([NotNull] string permissionName, [NotNull] string providerName)
{
return _permissionAppService.GetGrantedByProviderAsync(permissionName, providerName);
}
}

2
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;
});
}

Loading…
Cancel
Save