Browse Source

feat(menus): 增加特定于用户/角色的起始页.

pull/508/head
cKey 4 years ago
parent
commit
692beefe63
  1. 20
      apps/vue/src/api/platform/menu.ts
  2. 3
      apps/vue/src/api/platform/model/menuModel.ts
  3. 20
      apps/vue/src/views/identity/components/MenuModal.vue
  4. 33
      apps/vue/src/views/identity/role/components/RoleTable.vue
  5. 38
      apps/vue/src/views/identity/user/components/UserTable.vue
  6. 1
      aspnet-core/modules/platform/LINGYUN.Platform.Application.Contracts/LINGYUN/Platform/Menus/Dto/MenuDto.cs
  7. 10
      aspnet-core/modules/platform/LINGYUN.Platform.Application.Contracts/LINGYUN/Platform/Menus/Dto/RoleMenuStartupInput.cs
  8. 8
      aspnet-core/modules/platform/LINGYUN.Platform.Application.Contracts/LINGYUN/Platform/Menus/Dto/UserMenuStartupInput.cs
  9. 6
      aspnet-core/modules/platform/LINGYUN.Platform.Application.Contracts/LINGYUN/Platform/Menus/IMenuAppService.cs
  10. 81
      aspnet-core/modules/platform/LINGYUN.Platform.Application/LINGYUN/Platform/Menus/MenuAppService.cs
  11. 3
      aspnet-core/modules/platform/LINGYUN.Platform.Application/LINGYUN/Platform/PlatformApplicationMappingProfile.cs
  12. 1
      aspnet-core/modules/platform/LINGYUN.Platform.Domain.Shared/LINGYUN/Platform/Localization/Resources/en.json
  13. 1
      aspnet-core/modules/platform/LINGYUN.Platform.Domain.Shared/LINGYUN/Platform/Localization/Resources/zh-Hans.json
  14. 4
      aspnet-core/modules/platform/LINGYUN.Platform.Domain/LINGYUN/Platform/Menus/IRoleMenuRepository.cs
  15. 4
      aspnet-core/modules/platform/LINGYUN.Platform.Domain/LINGYUN/Platform/Menus/IUserMenuRepository.cs
  16. 46
      aspnet-core/modules/platform/LINGYUN.Platform.Domain/LINGYUN/Platform/Menus/MenuManager.cs
  17. 2
      aspnet-core/modules/platform/LINGYUN.Platform.Domain/LINGYUN/Platform/Menus/RoleMenu.cs
  18. 2
      aspnet-core/modules/platform/LINGYUN.Platform.Domain/LINGYUN/Platform/Menus/UserMenu.cs
  19. 23
      aspnet-core/modules/platform/LINGYUN.Platform.EntityFrameworkCore/LINGYUN/Platform/Menus/EfCoreRoleMenuRepository.cs
  20. 18
      aspnet-core/modules/platform/LINGYUN.Platform.EntityFrameworkCore/LINGYUN/Platform/Menus/EfCoreUserMenuRepository.cs
  21. 14
      aspnet-core/modules/platform/LINGYUN.Platform.HttpApi/LINGYUN/Platform/Menus/MenuController.cs
  22. 673
      aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/Migrations/20220301001241_Add-Field-Startup-With-UserAndRole-Menu.Designer.cs
  23. 37
      aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/Migrations/20220301001241_Add-Field-Startup-With-UserAndRole-Menu.cs
  24. 28
      aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/Migrations/PlatformHttpApiHostMigrationsDbContextModelSnapshot.cs

20
apps/vue/src/api/platform/menu.ts

@ -18,8 +18,10 @@ enum Api {
GetAll = '/api/platform/menus/all', GetAll = '/api/platform/menus/all',
GetUserMenus = '/api/platform/menus/by-user/{userId}/{framework}', GetUserMenus = '/api/platform/menus/by-user/{userId}/{framework}',
SetUserMenus = 'api/platform/menus/by-user', SetUserMenus = 'api/platform/menus/by-user',
SetUserStartup = 'api/platform/menus/startup/{id}/by-user',
GetRoleMenus = '/api/platform/menus/by-role/{role}/{framework}', GetRoleMenus = '/api/platform/menus/by-role/{role}/{framework}',
SetRoleMenus = '/api/platform/menus/by-role', SetRoleMenus = '/api/platform/menus/by-role',
SetRoleStartup = 'api/platform/menus/startup/{id}/by-role',
GetMyMenus = '/api/platform/menus/by-current-user', GetMyMenus = '/api/platform/menus/by-current-user',
Create = '/api/platform/menus', Create = '/api/platform/menus',
Delete = '/api/platform/menus/{id}', Delete = '/api/platform/menus/{id}',
@ -85,9 +87,27 @@ export const setUserMenu = (input: UserMenu) => {
}); });
}; };
export const setUserStartupMenu = (userId: string, menuId: string) => {
return defHttp.put<void>({
url: format(Api.SetUserStartup, { id: menuId }),
data: {
userId: userId,
},
});
};
export const setRoleMenu = (input: RoleMenu) => { export const setRoleMenu = (input: RoleMenu) => {
return defHttp.put<void>({ return defHttp.put<void>({
url: Api.SetRoleMenus, url: Api.SetRoleMenus,
data: input, data: input,
}); });
}; };
export const setRoleStartupMenu = (roleName: string, menuId: string) => {
return defHttp.put<void>({
url: format(Api.SetRoleStartup, { id: menuId }),
data: {
roleName: roleName,
},
});
};

3
apps/vue/src/api/platform/model/menuModel.ts

@ -46,7 +46,8 @@ export class Menu extends Route {
component!: string; component!: string;
framework = ''; framework = '';
parentId?: string; parentId?: string;
isPublic!: boolean; isPublic = false;
startup = false;
children = new Array<Menu>(); children = new Array<Menu>();
} }

20
apps/vue/src/views/identity/components/MenuModal.vue

@ -13,6 +13,14 @@
<FormItem :label="L('DisplayName:UIFramework')"> <FormItem :label="L('DisplayName:UIFramework')">
<Select v-model:value="frameworkRef" :options="optionsRef" @select="handleSelect" /> <Select v-model:value="frameworkRef" :options="optionsRef" @select="handleSelect" />
</FormItem> </FormItem>
<FormItem :label="L('Menu:SetStartup')">
<TreeSelect
:replace-fields="replaceFields"
:tree-data="menuTreeRef"
:allow-clear="true"
v-model:value="startupMenuRef"
/>
</FormItem>
<FormItem :label="L('DisplayName:Menus')"> <FormItem :label="L('DisplayName:Menus')">
<BasicTree <BasicTree
:checkable="true" :checkable="true"
@ -63,11 +71,12 @@
}), }),
}, },
}, },
emits: ['change', 'register'], emits: ['change', 'register', 'change:startup'],
setup(props, { emit }) { setup(props, { emit }) {
const { L } = useLocalization('AppPlatform'); const { L } = useLocalization('AppPlatform');
const identityRef = ref(''); const identityRef = ref('');
const frameworkRef = ref(''); const frameworkRef = ref('');
const startupMenuRef = ref('');
const menuTreeRef = ref<any[]>([]); const menuTreeRef = ref<any[]>([]);
const defaultCheckedRef = ref<any[]>([]); const defaultCheckedRef = ref<any[]>([]);
const checkedRef = ref<string[]>([]); const checkedRef = ref<string[]>([]);
@ -87,6 +96,7 @@
identityRef.value = record.identity; identityRef.value = record.identity;
optionsRef.value = []; optionsRef.value = [];
frameworkRef.value = ''; frameworkRef.value = '';
startupMenuRef.value = '';
checkedRef.value = []; checkedRef.value = [];
defaultCheckedRef.value = []; defaultCheckedRef.value = [];
menuTreeRef.value = []; menuTreeRef.value = [];
@ -110,6 +120,10 @@
props.getMenuApi(unref(identityRef), value).then((res) => { props.getMenuApi(unref(identityRef), value).then((res) => {
checkedRef.value = res.items.map((item) => item.id); checkedRef.value = res.items.map((item) => item.id);
defaultCheckedRef.value = checkedRef.value; defaultCheckedRef.value = checkedRef.value;
const startupMenu = res.items.filter((item) => item.startup);
if (startupMenu && startupMenu.length > 0) {
startupMenuRef.value = startupMenu[0].id;
}
}); });
} }
@ -133,6 +147,9 @@
function handleSubmit() { function handleSubmit() {
emit('change', unref(identityRef), unref(checkedRef)); emit('change', unref(identityRef), unref(checkedRef));
if (unref(startupMenuRef)) {
emit('change:startup', unref(identityRef), unref(startupMenuRef));
}
} }
return { return {
@ -141,6 +158,7 @@
defaultCheckedRef, defaultCheckedRef,
replaceFields, replaceFields,
frameworkRef, frameworkRef,
startupMenuRef,
optionsRef, optionsRef,
registerModal, registerModal,
handleSelect, handleSelect,

33
apps/vue/src/views/identity/role/components/RoleTable.vue

@ -41,7 +41,7 @@
}, },
{ {
auth: 'Platform.Menu.ManageRoles', auth: 'Platform.Menu.ManageRoles',
label: PL('Menu:Manage'), label: L('Menu:Manage'),
onClick: handleSetMenu.bind(null, record), onClick: handleSetMenu.bind(null, record),
}, },
]" ]"
@ -56,6 +56,7 @@
:loading="loadMenuRef" :loading="loadMenuRef"
:get-menu-api="getListByRole" :get-menu-api="getListByRole"
@change="handleChangeMenu" @change="handleChangeMenu"
@change:startup="handleChangeStartupMenu"
/> />
</div> </div>
</template> </template>
@ -72,7 +73,7 @@
import { BasicTable, TableAction } from '/@/components/Table'; import { BasicTable, TableAction } from '/@/components/Table';
import { useRoleTable } from '../hooks/useRoleTable'; import { useRoleTable } from '../hooks/useRoleTable';
import { usePermission as usePermissionModal } from '../hooks/usePermission'; import { usePermission as usePermissionModal } from '../hooks/usePermission';
import { getListByRole, setRoleMenu } from '/@/api/platform/menu'; import { getListByRole, setRoleMenu, setRoleStartupMenu } from '/@/api/platform/menu';
export default defineComponent({ export default defineComponent({
name: 'RoleTable', name: 'RoleTable',
@ -85,8 +86,7 @@
PermissionModal, PermissionModal,
}, },
setup() { setup() {
const { L } = useLocalization('AbpIdentity'); const { L } = useLocalization('AbpIdentity', 'AppPlatform');
const { L: PL } = useLocalization('AppPlatform');
const loadMenuRef = ref(false); const loadMenuRef = ref(false);
const { hasPermission } = usePermission(); const { hasPermission } = usePermission();
const [registerModal, { openModal }] = useModal(); const [registerModal, { openModal }] = useModal();
@ -114,33 +114,38 @@
}); });
} }
function handleChangeStartupMenu(roleName, meunId) {
setRoleStartupMenu(roleName, meunId);
}
function handleAddNew() {
openModal(true, {}, true);
}
function handleEdit(record) {
openModal(true, record, true);
}
return { return {
L, L,
PL,
loadMenuRef, loadMenuRef,
hasPermission, hasPermission,
registerTable, registerTable,
reloadTable, reloadTable,
registerModal, registerModal,
openModal,
registerClaimModal, registerClaimModal,
openClaimModal, openClaimModal,
registerPermissionModal, registerPermissionModal,
showPermissionModal, showPermissionModal,
registerMenuModal, registerMenuModal,
handleAddNew,
handleEdit,
handleSetMenu, handleSetMenu,
handleDelete, handleDelete,
handleChangeMenu, handleChangeMenu,
handleChangeStartupMenu,
getListByRole, getListByRole,
}; };
}, },
methods: {
handleAddNew() {
this.openModal(true, {}, true);
},
handleEdit(record) {
this.openModal(true, record, true);
},
},
}); });
</script> </script>

38
apps/vue/src/views/identity/user/components/UserTable.vue

@ -89,6 +89,7 @@
:loading="loadMenuRef" :loading="loadMenuRef"
:get-menu-api="getListByUser" :get-menu-api="getListByUser"
@change="handleChangeMenu" @change="handleChangeMenu"
@change:startup="handleChangeStartupMenu"
/> />
</div> </div>
</template> </template>
@ -110,7 +111,7 @@
import { usePassword } from '../hooks/usePassword'; import { usePassword } from '../hooks/usePassword';
import { useLock } from '../hooks/useLock'; import { useLock } from '../hooks/useLock';
import { usePermission as usePermissionModal } from '../hooks/usePermission'; import { usePermission as usePermissionModal } from '../hooks/usePermission';
import { getListByUser, setUserMenu } from '/@/api/platform/menu'; import { getListByUser, setUserMenu, setUserStartupMenu } from '/@/api/platform/menu';
export default defineComponent({ export default defineComponent({
name: 'UserTable', name: 'UserTable',
@ -156,6 +157,24 @@
}); });
} }
function handleAddNew() {
openModal(true, {}, true);
}
function handleEdit(record) {
openModal(true, record, true);
}
function handleUnlock(record) {
handleUnLock(record.id).then(() => {
reloadTable();
});
}
function handleChangeStartupMenu(userId, meunId) {
setUserStartupMenu(userId, meunId);
}
return { return {
L, L,
loadMenuRef, loadMenuRef,
@ -176,23 +195,14 @@
showLockModal, showLockModal,
handleUnLock, handleUnLock,
registerMenuModal, registerMenuModal,
handleAddNew,
handleEdit,
handleUnlock,
handleSetMenu, handleSetMenu,
handleChangeMenu, handleChangeMenu,
handleChangeStartupMenu,
getListByUser, getListByUser,
}; };
}, },
methods: {
handleAddNew() {
this.openModal(true, {}, true);
},
handleEdit(record) {
this.openModal(true, record, true);
},
handleUnlock(record) {
this.handleUnLock(record.id).then(() => {
this.reloadTable();
});
},
},
}); });
</script> </script>

1
aspnet-core/modules/platform/LINGYUN.Platform.Application.Contracts/LINGYUN/Platform/Menus/Dto/MenuDto.cs

@ -28,5 +28,6 @@ namespace LINGYUN.Platform.Menus
public Guid LayoutId { get; set; } public Guid LayoutId { get; set; }
public bool IsPublic { get; set; } public bool IsPublic { get; set; }
public bool Startup { get; set; }
} }
} }

10
aspnet-core/modules/platform/LINGYUN.Platform.Application.Contracts/LINGYUN/Platform/Menus/Dto/RoleMenuStartupInput.cs

@ -0,0 +1,10 @@
using System.ComponentModel.DataAnnotations;
namespace LINGYUN.Platform.Menus;
public class RoleMenuStartupInput
{
[Required]
[StringLength(80)]
public string RoleName { get; set; }
}

8
aspnet-core/modules/platform/LINGYUN.Platform.Application.Contracts/LINGYUN/Platform/Menus/Dto/UserMenuStartupInput.cs

@ -0,0 +1,8 @@
using System;
namespace LINGYUN.Platform.Menus;
public class UserMenuStartupInput
{
public Guid UserId { get; set; }
}

6
aspnet-core/modules/platform/LINGYUN.Platform.Application.Contracts/LINGYUN/Platform/Menus/IMenuAppService.cs

@ -21,7 +21,11 @@ namespace LINGYUN.Platform.Menus
Task SetUserMenusAsync(UserMenuInput input); Task SetUserMenusAsync(UserMenuInput input);
Task SetRoleMenusAsync(RoleMenuInput input); Task SetUserStartupAsync(Guid id, UserMenuStartupInput input);
Task SetRoleMenusAsync(RoleMenuInput input);
Task SetRoleStartupAsync(Guid id, RoleMenuStartupInput input);
Task<ListResultDto<MenuDto>> GetCurrentUserMenuListAsync(GetMenuInput input); Task<ListResultDto<MenuDto>> GetCurrentUserMenuListAsync(GetMenuInput input);
} }

81
aspnet-core/modules/platform/LINGYUN.Platform.Application/LINGYUN/Platform/Menus/MenuAppService.cs

@ -20,6 +20,8 @@ namespace LINGYUN.Platform.Menus
protected DataItemMappingOptions DataItemMapping { get; } protected DataItemMappingOptions DataItemMapping { get; }
protected MenuManager MenuManager { get; } protected MenuManager MenuManager { get; }
protected IMenuRepository MenuRepository { get; } protected IMenuRepository MenuRepository { get; }
protected IUserMenuRepository UserMenuRepository { get; }
protected IRoleMenuRepository RoleMenuRepository { get; }
protected IDataRepository DataRepository { get; } protected IDataRepository DataRepository { get; }
protected ILayoutRepository LayoutRepository { get; } protected ILayoutRepository LayoutRepository { get; }
@ -28,12 +30,16 @@ namespace LINGYUN.Platform.Menus
IMenuRepository menuRepository, IMenuRepository menuRepository,
IDataRepository dataRepository, IDataRepository dataRepository,
ILayoutRepository layoutRepository, ILayoutRepository layoutRepository,
IUserMenuRepository userMenuRepository,
IRoleMenuRepository roleMenuRepository,
IOptions<DataItemMappingOptions> options) IOptions<DataItemMappingOptions> options)
{ {
MenuManager = menuManager; MenuManager = menuManager;
MenuRepository = menuRepository; MenuRepository = menuRepository;
DataRepository = dataRepository; DataRepository = dataRepository;
LayoutRepository = layoutRepository; LayoutRepository = layoutRepository;
UserMenuRepository = userMenuRepository;
RoleMenuRepository = roleMenuRepository;
DataItemMapping = options.Value; DataItemMapping = options.Value;
} }
@ -44,8 +50,28 @@ namespace LINGYUN.Platform.Menus
CurrentUser.Roles, CurrentUser.Roles,
input.Framework); input.Framework);
return new ListResultDto<MenuDto>( var menus = ObjectMapper.Map<List<Menu>, List<MenuDto>>(myMenus);
ObjectMapper.Map<List<Menu>, List<MenuDto>>(myMenus));
var startupMenu = await UserMenuRepository.GetStartupMenuAsync(
CurrentUser.GetId());
if (startupMenu == null && CurrentUser.Roles.Any())
{
startupMenu = await RoleMenuRepository.GetStartupMenuAsync(CurrentUser.Roles);
}
if (startupMenu != null)
{
var findMenu = menus.FirstOrDefault(x => x.Id.Equals(startupMenu.Id));
if (findMenu != null)
{
findMenu.Startup = true;
}
}
return new ListResultDto<MenuDto>(menus);
} }
[Authorize(PlatformPermissions.Menu.Default)] [Authorize(PlatformPermissions.Menu.Default)]
@ -211,8 +237,26 @@ namespace LINGYUN.Platform.Menus
{ {
var menus = await MenuRepository.GetUserMenusAsync(input.UserId, input.Roles, input.Framework); var menus = await MenuRepository.GetUserMenusAsync(input.UserId, input.Roles, input.Framework);
return new ListResultDto<MenuDto>( var menuDtos = ObjectMapper.Map<List<Menu>, List<MenuDto>>(menus);
ObjectMapper.Map<List<Menu>, List<MenuDto>>(menus));
var startupMenu = await UserMenuRepository.GetStartupMenuAsync(input.UserId);
if (startupMenu == null)
{
startupMenu = await RoleMenuRepository.GetStartupMenuAsync(input.Roles);
}
if (startupMenu != null)
{
var findMenu = menuDtos.FirstOrDefault(x => x.Id.Equals(startupMenu.Id));
if (findMenu != null)
{
findMenu.Startup = true;
}
}
return new ListResultDto<MenuDto>(menuDtos);
} }
[Authorize(PlatformPermissions.Menu.ManageUsers)] [Authorize(PlatformPermissions.Menu.ManageUsers)]
@ -221,19 +265,44 @@ namespace LINGYUN.Platform.Menus
await MenuManager.SetUserMenusAsync(input.UserId, input.MenuIds); await MenuManager.SetUserMenusAsync(input.UserId, input.MenuIds);
} }
[Authorize(PlatformPermissions.Menu.ManageUsers)]
public async virtual Task SetUserStartupAsync(Guid id, UserMenuStartupInput input)
{
await MenuManager.SetUserStartupMenuAsync(input.UserId, id);
}
[Authorize(PlatformPermissions.Menu.ManageRoles)] [Authorize(PlatformPermissions.Menu.ManageRoles)]
public virtual async Task SetRoleMenusAsync(RoleMenuInput input) public virtual async Task SetRoleMenusAsync(RoleMenuInput input)
{ {
await MenuManager.SetRoleMenusAsync(input.RoleName, input.MenuIds); await MenuManager.SetRoleMenusAsync(input.RoleName, input.MenuIds);
} }
[Authorize(PlatformPermissions.Menu.ManageRoles)]
public async virtual Task SetRoleStartupAsync(Guid id, RoleMenuStartupInput input)
{
await MenuManager.SetRoleStartupMenuAsync(input.RoleName, id);
}
[Authorize(PlatformPermissions.Menu.ManageRoles)] [Authorize(PlatformPermissions.Menu.ManageRoles)]
public virtual async Task<ListResultDto<MenuDto>> GetRoleMenuListAsync(MenuGetByRoleInput input) public virtual async Task<ListResultDto<MenuDto>> GetRoleMenuListAsync(MenuGetByRoleInput input)
{ {
var menus = await MenuRepository.GetRoleMenusAsync(new string[] { input.Role }, input.Framework); var menus = await MenuRepository.GetRoleMenusAsync(new string[] { input.Role }, input.Framework);
return new ListResultDto<MenuDto>( var menuDtos = ObjectMapper.Map<List<Menu>, List<MenuDto>>(menus);
ObjectMapper.Map<List<Menu>, List<MenuDto>>(menus));
var startupMenu = await RoleMenuRepository.GetStartupMenuAsync(new string[] { input.Role });
if (startupMenu != null)
{
var findMenu = menuDtos.FirstOrDefault(x => x.Id.Equals(startupMenu.Id));
if (findMenu != null)
{
findMenu.Startup = true;
}
}
return new ListResultDto<MenuDto>(menuDtos);
} }
} }
} }

3
aspnet-core/modules/platform/LINGYUN.Platform.Application/LINGYUN/Platform/PlatformApplicationMappingProfile.cs

@ -16,7 +16,8 @@ namespace LINGYUN.Platform
CreateMap<DataItem, DataItemDto>(); CreateMap<DataItem, DataItemDto>();
CreateMap<Data, DataDto>(); CreateMap<Data, DataDto>();
CreateMap<Menu, MenuDto>() CreateMap<Menu, MenuDto>()
.ForMember(dto => dto.Meta, map => map.MapFrom(src => src.ExtraProperties)); .ForMember(dto => dto.Meta, map => map.MapFrom(src => src.ExtraProperties))
.ForMember(dto => dto.Startup, map => map.Ignore());
CreateMap<Layout, LayoutDto>() CreateMap<Layout, LayoutDto>()
.ForMember(dto => dto.Meta, map => map.MapFrom(src => src.ExtraProperties)); .ForMember(dto => dto.Meta, map => map.MapFrom(src => src.ExtraProperties));
} }

1
aspnet-core/modules/platform/LINGYUN.Platform.Domain.Shared/LINGYUN/Platform/Localization/Resources/en.json

@ -33,6 +33,7 @@
"DisplayName:Layout": "Layout", "DisplayName:Layout": "Layout",
"DisplayName:Basic": "Basic", "DisplayName:Basic": "Basic",
"DisplayName:DataDictionary": "Data Dictionary", "DisplayName:DataDictionary": "Data Dictionary",
"DisplayName:RoleName": "Role Name",
"Layout:AddNew": "Add New", "Layout:AddNew": "Add New",
"Layout:Edit": "Edit", "Layout:Edit": "Edit",
"Layout:EditByName": "Edit Layout - {0}", "Layout:EditByName": "Edit Layout - {0}",

1
aspnet-core/modules/platform/LINGYUN.Platform.Domain.Shared/LINGYUN/Platform/Localization/Resources/zh-Hans.json

@ -33,6 +33,7 @@
"DisplayName:Layout": "布局", "DisplayName:Layout": "布局",
"DisplayName:Basic": "基础信息", "DisplayName:Basic": "基础信息",
"DisplayName:DataDictionary": "数据字典", "DisplayName:DataDictionary": "数据字典",
"DisplayName:RoleName": "角色名称",
"Layout:AddNew": "添加新布局", "Layout:AddNew": "添加新布局",
"Layout:Edit": "编辑布局", "Layout:Edit": "编辑布局",
"Layout:EditByName": "编辑布局 - {0}", "Layout:EditByName": "编辑布局 - {0}",

4
aspnet-core/modules/platform/LINGYUN.Platform.Domain/LINGYUN/Platform/Menus/IRoleMenuRepository.cs

@ -24,8 +24,8 @@ namespace LINGYUN.Platform.Menus
string roleName, string roleName,
CancellationToken cancellationToken = default); CancellationToken cancellationToken = default);
Task InsertAsync( Task<Menu> GetStartupMenuAsync(
IEnumerable<RoleMenu> roleMenus, IEnumerable<string> roleNames,
CancellationToken cancellationToken = default); CancellationToken cancellationToken = default);
} }
} }

4
aspnet-core/modules/platform/LINGYUN.Platform.Domain/LINGYUN/Platform/Menus/IUserMenuRepository.cs

@ -24,8 +24,8 @@ namespace LINGYUN.Platform.Menus
Guid userId, Guid userId,
CancellationToken cancellationToken = default); CancellationToken cancellationToken = default);
Task InsertAsync( Task<Menu> GetStartupMenuAsync(
IEnumerable<UserMenu> userMenus, Guid userId,
CancellationToken cancellationToken = default); CancellationToken cancellationToken = default);
} }
} }

46
aspnet-core/modules/platform/LINGYUN.Platform.Domain/LINGYUN/Platform/Menus/MenuManager.cs

@ -126,6 +126,27 @@ namespace LINGYUN.Platform.Menus
return false; return false;
} }
public async virtual Task SetUserStartupMenuAsync(Guid userId, Guid menuId)
{
using (var unitOfWork = UnitOfWorkManager.Begin())
{
var userMenus = await UserMenuRepository.GetListByUserIdAsync(userId);
foreach (var menu in userMenus)
{
menu.Startup = false;
if (menu.MenuId.Equals(menuId))
{
menu.Startup = true;
}
}
await UserMenuRepository.UpdateManyAsync(userMenus);
await unitOfWork.SaveChangesAsync();
}
}
public virtual async Task SetUserMenusAsync(Guid userId, IEnumerable<Guid> menuIds) public virtual async Task SetUserMenusAsync(Guid userId, IEnumerable<Guid> menuIds)
{ {
using (var unitOfWork = UnitOfWorkManager.Begin()) using (var unitOfWork = UnitOfWorkManager.Begin())
@ -145,13 +166,34 @@ namespace LINGYUN.Platform.Menus
if (adds.Any()) if (adds.Any())
{ {
var addInMenus = adds.Select(menuId => new UserMenu(GuidGenerator.Create(), menuId, userId, CurrentTenant.Id)); var addInMenus = adds.Select(menuId => new UserMenu(GuidGenerator.Create(), menuId, userId, CurrentTenant.Id));
await UserMenuRepository.InsertAsync(addInMenus); await UserMenuRepository.InsertManyAsync(addInMenus);
} }
await unitOfWork.SaveChangesAsync(); await unitOfWork.SaveChangesAsync();
} }
} }
public async virtual Task SetRoleStartupMenuAsync(string roleName, Guid menuId)
{
using (var unitOfWork = UnitOfWorkManager.Begin())
{
var roleMenus = await RoleMenuRepository.GetListByRoleNameAsync(roleName);
foreach (var menu in roleMenus)
{
menu.Startup = false;
if (menu.MenuId.Equals(menuId))
{
menu.Startup = true;
}
}
await RoleMenuRepository.UpdateManyAsync(roleMenus);
await unitOfWork.SaveChangesAsync();
}
}
public virtual async Task SetRoleMenusAsync(string roleName, IEnumerable<Guid> menuIds) public virtual async Task SetRoleMenusAsync(string roleName, IEnumerable<Guid> menuIds)
{ {
using (var unitOfWork = UnitOfWorkManager.Begin()) using (var unitOfWork = UnitOfWorkManager.Begin())
@ -171,7 +213,7 @@ namespace LINGYUN.Platform.Menus
if (adds.Any()) if (adds.Any())
{ {
var addInMenus = adds.Select(menuId => new RoleMenu(GuidGenerator.Create(), menuId, roleName, CurrentTenant.Id)); var addInMenus = adds.Select(menuId => new RoleMenu(GuidGenerator.Create(), menuId, roleName, CurrentTenant.Id));
await RoleMenuRepository.InsertAsync(addInMenus); await RoleMenuRepository.InsertManyAsync(addInMenus);
} }
await unitOfWork.SaveChangesAsync(); await unitOfWork.SaveChangesAsync();

2
aspnet-core/modules/platform/LINGYUN.Platform.Domain/LINGYUN/Platform/Menus/RoleMenu.cs

@ -15,6 +15,8 @@ namespace LINGYUN.Platform.Menus
public virtual string RoleName { get; protected set; } public virtual string RoleName { get; protected set; }
public virtual bool Startup { get; set; }
protected RoleMenu() { } protected RoleMenu() { }
public RoleMenu( public RoleMenu(

2
aspnet-core/modules/platform/LINGYUN.Platform.Domain/LINGYUN/Platform/Menus/UserMenu.cs

@ -15,6 +15,8 @@ namespace LINGYUN.Platform.Menus
public virtual Guid UserId { get; protected set; } public virtual Guid UserId { get; protected set; }
public virtual bool Startup { get; set; }
protected UserMenu() { } protected UserMenu() { }
public UserMenu( public UserMenu(

23
aspnet-core/modules/platform/LINGYUN.Platform.EntityFrameworkCore/LINGYUN/Platform/Menus/EfCoreRoleMenuRepository.cs

@ -24,11 +24,6 @@ namespace LINGYUN.Platform.Menus
.ToListAsync(GetCancellationToken(cancellationToken)); .ToListAsync(GetCancellationToken(cancellationToken));
} }
public virtual async Task InsertAsync(IEnumerable<RoleMenu> roleMenus, CancellationToken cancellationToken = default)
{
await (await GetDbSetAsync()).AddRangeAsync(roleMenus, GetCancellationToken(cancellationToken));
}
public virtual async Task<bool> RoleHasInMenuAsync( public virtual async Task<bool> RoleHasInMenuAsync(
string roleName, string roleName,
string menuName, string menuName,
@ -44,5 +39,23 @@ namespace LINGYUN.Platform.Menus
.AnyAsync(x => x.RoleName == roleName, .AnyAsync(x => x.RoleName == roleName,
GetCancellationToken(cancellationToken)); GetCancellationToken(cancellationToken));
} }
public virtual async Task<Menu> GetStartupMenuAsync(
IEnumerable<string> roleNames,
CancellationToken cancellationToken = default)
{
var dbContext = await GetDbContextAsync();
var roleMenuQuery = dbContext.Set<RoleMenu>()
.Where(x => roleNames.Contains(x.RoleName))
.Where(x => x.Startup);
return await
(from roleMenu in roleMenuQuery
join menu in dbContext.Set<Menu>()
on roleMenu.MenuId equals menu.Id
select menu)
.OrderByDescending(x => x.CreationTime)
.FirstOrDefaultAsync(GetCancellationToken(cancellationToken));
}
} }
} }

18
aspnet-core/modules/platform/LINGYUN.Platform.EntityFrameworkCore/LINGYUN/Platform/Menus/EfCoreUserMenuRepository.cs

@ -44,10 +44,22 @@ namespace LINGYUN.Platform.Menus
.ToListAsync(GetCancellationToken(cancellationToken)); .ToListAsync(GetCancellationToken(cancellationToken));
} }
public virtual async Task InsertAsync(IEnumerable<UserMenu> userMenus, CancellationToken cancellationToken = default) public virtual async Task<Menu> GetStartupMenuAsync(
Guid userId,
CancellationToken cancellationToken = default)
{ {
var dbSet = await GetDbSetAsync(); var dbContext = await GetDbContextAsync();
await dbSet.AddRangeAsync(userMenus, GetCancellationToken(cancellationToken)); var userMenuQuery = dbContext.Set<UserMenu>()
.Where(x => x.UserId.Equals(userId))
.Where(x => x.Startup);
return await
(from userMenu in userMenuQuery
join menu in dbContext.Set<Menu>()
on userMenu.MenuId equals menu.Id
select menu)
.OrderByDescending(x => x.CreationTime)
.FirstOrDefaultAsync(GetCancellationToken(cancellationToken));
} }
} }
} }

14
aspnet-core/modules/platform/LINGYUN.Platform.HttpApi/LINGYUN/Platform/Menus/MenuController.cs

@ -78,6 +78,13 @@ namespace LINGYUN.Platform.Menus
await MenuAppService.SetUserMenusAsync(input); await MenuAppService.SetUserMenusAsync(input);
} }
[HttpPut]
[Route("startup/{id}/by-user")]
public async virtual Task SetUserStartupAsync(Guid id, UserMenuStartupInput input)
{
await MenuAppService.SetUserStartupAsync(id, input);
}
[HttpGet] [HttpGet]
[Route("by-user")] [Route("by-user")]
public virtual async Task<ListResultDto<MenuDto>> GetUserMenuListAsync(MenuGetByUserInput input) public virtual async Task<ListResultDto<MenuDto>> GetUserMenuListAsync(MenuGetByUserInput input)
@ -107,6 +114,13 @@ namespace LINGYUN.Platform.Menus
await MenuAppService.SetRoleMenusAsync(input); await MenuAppService.SetRoleMenusAsync(input);
} }
[HttpPut]
[Route("startup/{id}/by-role")]
public async virtual Task SetRoleStartupAsync(Guid id, RoleMenuStartupInput input)
{
await MenuAppService.SetRoleStartupAsync(id, input);
}
[HttpGet] [HttpGet]
[Route("by-role")] [Route("by-role")]
public virtual async Task<ListResultDto<MenuDto>> GetRoleMenuListAsync(MenuGetByRoleInput input) public virtual async Task<ListResultDto<MenuDto>> GetRoleMenuListAsync(MenuGetByRoleInput input)

673
aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/Migrations/20220301001241_Add-Field-Startup-With-UserAndRole-Menu.Designer.cs

@ -0,0 +1,673 @@
// <auto-generated />
using System;
using LY.MicroService.PlatformManagement.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Volo.Abp.EntityFrameworkCore;
#nullable disable
namespace LY.MicroService.PlatformManagement.Migrations
{
[DbContext(typeof(PlatformManagementMigrationsDbContext))]
[Migration("20220301001241_Add-Field-Startup-With-UserAndRole-Menu")]
partial class AddFieldStartupWithUserAndRoleMenu
{
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.MySql)
.HasAnnotation("ProductVersion", "6.0.2")
.HasAnnotation("Relational:MaxIdentifierLength", 64);
modelBuilder.Entity("LINGYUN.Platform.Datas.Data", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("char(36)");
b.Property<string>("Code")
.IsRequired()
.HasMaxLength(1024)
.HasColumnType("varchar(1024)")
.HasColumnName("Code");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasMaxLength(40)
.HasColumnType("varchar(40)")
.HasColumnName("ConcurrencyStamp");
b.Property<DateTime>("CreationTime")
.HasColumnType("datetime(6)")
.HasColumnName("CreationTime");
b.Property<Guid?>("CreatorId")
.HasColumnType("char(36)")
.HasColumnName("CreatorId");
b.Property<Guid?>("DeleterId")
.HasColumnType("char(36)")
.HasColumnName("DeleterId");
b.Property<DateTime?>("DeletionTime")
.HasColumnType("datetime(6)")
.HasColumnName("DeletionTime");
b.Property<string>("Description")
.HasMaxLength(1024)
.HasColumnType("varchar(1024)")
.HasColumnName("Description");
b.Property<string>("DisplayName")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("varchar(128)")
.HasColumnName("DisplayName");
b.Property<string>("ExtraProperties")
.HasColumnType("longtext")
.HasColumnName("ExtraProperties");
b.Property<bool>("IsDeleted")
.ValueGeneratedOnAdd()
.HasColumnType("tinyint(1)")
.HasDefaultValue(false)
.HasColumnName("IsDeleted");
b.Property<bool>("IsStatic")
.HasColumnType("tinyint(1)");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime(6)")
.HasColumnName("LastModificationTime");
b.Property<Guid?>("LastModifierId")
.HasColumnType("char(36)")
.HasColumnName("LastModifierId");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(30)
.HasColumnType("varchar(30)")
.HasColumnName("Name");
b.Property<Guid?>("ParentId")
.HasColumnType("char(36)");
b.Property<Guid?>("TenantId")
.HasColumnType("char(36)")
.HasColumnName("TenantId");
b.HasKey("Id");
b.HasIndex("Name");
b.ToTable("AppPlatformDatas", (string)null);
});
modelBuilder.Entity("LINGYUN.Platform.Datas.DataItem", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("char(36)");
b.Property<bool>("AllowBeNull")
.ValueGeneratedOnAdd()
.HasColumnType("tinyint(1)")
.HasDefaultValue(true);
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasMaxLength(40)
.HasColumnType("varchar(40)")
.HasColumnName("ConcurrencyStamp");
b.Property<DateTime>("CreationTime")
.HasColumnType("datetime(6)")
.HasColumnName("CreationTime");
b.Property<Guid?>("CreatorId")
.HasColumnType("char(36)")
.HasColumnName("CreatorId");
b.Property<Guid>("DataId")
.HasColumnType("char(36)");
b.Property<string>("DefaultValue")
.HasMaxLength(128)
.HasColumnType("varchar(128)")
.HasColumnName("DefaultValue");
b.Property<Guid?>("DeleterId")
.HasColumnType("char(36)")
.HasColumnName("DeleterId");
b.Property<DateTime?>("DeletionTime")
.HasColumnType("datetime(6)")
.HasColumnName("DeletionTime");
b.Property<string>("Description")
.HasMaxLength(1024)
.HasColumnType("varchar(1024)")
.HasColumnName("Description");
b.Property<string>("DisplayName")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("varchar(128)")
.HasColumnName("DisplayName");
b.Property<string>("ExtraProperties")
.HasColumnType("longtext")
.HasColumnName("ExtraProperties");
b.Property<bool>("IsDeleted")
.ValueGeneratedOnAdd()
.HasColumnType("tinyint(1)")
.HasDefaultValue(false)
.HasColumnName("IsDeleted");
b.Property<bool>("IsStatic")
.HasColumnType("tinyint(1)");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime(6)")
.HasColumnName("LastModificationTime");
b.Property<Guid?>("LastModifierId")
.HasColumnType("char(36)")
.HasColumnName("LastModifierId");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(30)
.HasColumnType("varchar(30)")
.HasColumnName("Name");
b.Property<Guid?>("TenantId")
.HasColumnType("char(36)")
.HasColumnName("TenantId");
b.Property<int>("ValueType")
.HasColumnType("int");
b.HasKey("Id");
b.HasIndex("DataId");
b.HasIndex("Name");
b.ToTable("AppPlatformDataItems", (string)null);
});
modelBuilder.Entity("LINGYUN.Platform.Layouts.Layout", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("char(36)");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasMaxLength(40)
.HasColumnType("varchar(40)")
.HasColumnName("ConcurrencyStamp");
b.Property<DateTime>("CreationTime")
.HasColumnType("datetime(6)")
.HasColumnName("CreationTime");
b.Property<Guid?>("CreatorId")
.HasColumnType("char(36)")
.HasColumnName("CreatorId");
b.Property<Guid>("DataId")
.HasColumnType("char(36)");
b.Property<Guid?>("DeleterId")
.HasColumnType("char(36)")
.HasColumnName("DeleterId");
b.Property<DateTime?>("DeletionTime")
.HasColumnType("datetime(6)")
.HasColumnName("DeletionTime");
b.Property<string>("Description")
.HasColumnType("longtext");
b.Property<string>("DisplayName")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("varchar(128)")
.HasColumnName("DisplayName");
b.Property<string>("ExtraProperties")
.HasColumnType("longtext")
.HasColumnName("ExtraProperties");
b.Property<string>("Framework")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("varchar(64)")
.HasColumnName("Framework");
b.Property<bool>("IsDeleted")
.ValueGeneratedOnAdd()
.HasColumnType("tinyint(1)")
.HasDefaultValue(false)
.HasColumnName("IsDeleted");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime(6)")
.HasColumnName("LastModificationTime");
b.Property<Guid?>("LastModifierId")
.HasColumnType("char(36)")
.HasColumnName("LastModifierId");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("varchar(64)")
.HasColumnName("Name");
b.Property<string>("Path")
.HasMaxLength(255)
.HasColumnType("varchar(255)")
.HasColumnName("Path");
b.Property<string>("Redirect")
.HasMaxLength(255)
.HasColumnType("varchar(255)")
.HasColumnName("Redirect");
b.Property<Guid?>("TenantId")
.HasColumnType("char(36)")
.HasColumnName("TenantId");
b.HasKey("Id");
b.ToTable("AppPlatformLayouts", (string)null);
});
modelBuilder.Entity("LINGYUN.Platform.Menus.Menu", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("char(36)");
b.Property<string>("Code")
.IsRequired()
.HasMaxLength(23)
.HasColumnType("varchar(23)")
.HasColumnName("Code");
b.Property<string>("Component")
.IsRequired()
.HasMaxLength(255)
.HasColumnType("varchar(255)")
.HasColumnName("Component");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasMaxLength(40)
.HasColumnType("varchar(40)")
.HasColumnName("ConcurrencyStamp");
b.Property<DateTime>("CreationTime")
.HasColumnType("datetime(6)")
.HasColumnName("CreationTime");
b.Property<Guid?>("CreatorId")
.HasColumnType("char(36)")
.HasColumnName("CreatorId");
b.Property<Guid?>("DeleterId")
.HasColumnType("char(36)")
.HasColumnName("DeleterId");
b.Property<DateTime?>("DeletionTime")
.HasColumnType("datetime(6)")
.HasColumnName("DeletionTime");
b.Property<string>("Description")
.HasColumnType("longtext");
b.Property<string>("DisplayName")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("varchar(128)")
.HasColumnName("DisplayName");
b.Property<string>("ExtraProperties")
.HasColumnType("longtext")
.HasColumnName("ExtraProperties");
b.Property<string>("Framework")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("varchar(64)")
.HasColumnName("Framework");
b.Property<bool>("IsDeleted")
.ValueGeneratedOnAdd()
.HasColumnType("tinyint(1)")
.HasDefaultValue(false)
.HasColumnName("IsDeleted");
b.Property<bool>("IsPublic")
.HasColumnType("tinyint(1)");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime(6)")
.HasColumnName("LastModificationTime");
b.Property<Guid?>("LastModifierId")
.HasColumnType("char(36)")
.HasColumnName("LastModifierId");
b.Property<Guid>("LayoutId")
.HasColumnType("char(36)");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("varchar(64)")
.HasColumnName("Name");
b.Property<Guid?>("ParentId")
.HasColumnType("char(36)");
b.Property<string>("Path")
.HasMaxLength(255)
.HasColumnType("varchar(255)")
.HasColumnName("Path");
b.Property<string>("Redirect")
.HasMaxLength(255)
.HasColumnType("varchar(255)")
.HasColumnName("Redirect");
b.Property<Guid?>("TenantId")
.HasColumnType("char(36)")
.HasColumnName("TenantId");
b.HasKey("Id");
b.ToTable("AppPlatformMenus", (string)null);
});
modelBuilder.Entity("LINGYUN.Platform.Menus.RoleMenu", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("char(36)");
b.Property<DateTime>("CreationTime")
.HasColumnType("datetime(6)")
.HasColumnName("CreationTime");
b.Property<Guid?>("CreatorId")
.HasColumnType("char(36)")
.HasColumnName("CreatorId");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime(6)")
.HasColumnName("LastModificationTime");
b.Property<Guid?>("LastModifierId")
.HasColumnType("char(36)")
.HasColumnName("LastModifierId");
b.Property<Guid>("MenuId")
.HasColumnType("char(36)");
b.Property<string>("RoleName")
.IsRequired()
.HasMaxLength(256)
.HasColumnType("varchar(256)")
.HasColumnName("RoleName");
b.Property<bool>("Startup")
.HasColumnType("tinyint(1)");
b.Property<Guid?>("TenantId")
.HasColumnType("char(36)")
.HasColumnName("TenantId");
b.HasKey("Id");
b.HasIndex("RoleName", "MenuId");
b.ToTable("AppPlatformRoleMenus", (string)null);
});
modelBuilder.Entity("LINGYUN.Platform.Menus.UserMenu", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("char(36)");
b.Property<DateTime>("CreationTime")
.HasColumnType("datetime(6)")
.HasColumnName("CreationTime");
b.Property<Guid?>("CreatorId")
.HasColumnType("char(36)")
.HasColumnName("CreatorId");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime(6)")
.HasColumnName("LastModificationTime");
b.Property<Guid?>("LastModifierId")
.HasColumnType("char(36)")
.HasColumnName("LastModifierId");
b.Property<Guid>("MenuId")
.HasColumnType("char(36)");
b.Property<bool>("Startup")
.HasColumnType("tinyint(1)");
b.Property<Guid?>("TenantId")
.HasColumnType("char(36)")
.HasColumnName("TenantId");
b.Property<Guid>("UserId")
.HasColumnType("char(36)");
b.HasKey("Id");
b.HasIndex("UserId", "MenuId");
b.ToTable("AppPlatformUserMenus", (string)null);
});
modelBuilder.Entity("LINGYUN.Platform.Versions.AppVersion", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("char(36)");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasMaxLength(40)
.HasColumnType("varchar(40)")
.HasColumnName("ConcurrencyStamp");
b.Property<DateTime>("CreationTime")
.HasColumnType("datetime(6)")
.HasColumnName("CreationTime");
b.Property<Guid?>("CreatorId")
.HasColumnType("char(36)")
.HasColumnName("CreatorId");
b.Property<Guid?>("DeleterId")
.HasColumnType("char(36)")
.HasColumnName("DeleterId");
b.Property<DateTime?>("DeletionTime")
.HasColumnType("datetime(6)")
.HasColumnName("DeletionTime");
b.Property<string>("Description")
.HasMaxLength(2048)
.HasColumnType("varchar(2048)")
.HasColumnName("Description");
b.Property<string>("ExtraProperties")
.HasColumnType("longtext")
.HasColumnName("ExtraProperties");
b.Property<bool>("IsDeleted")
.ValueGeneratedOnAdd()
.HasColumnType("tinyint(1)")
.HasDefaultValue(false)
.HasColumnName("IsDeleted");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime(6)")
.HasColumnName("LastModificationTime");
b.Property<Guid?>("LastModifierId")
.HasColumnType("char(36)")
.HasColumnName("LastModifierId");
b.Property<int>("Level")
.HasColumnType("int");
b.Property<int>("PlatformType")
.HasColumnType("int");
b.Property<Guid?>("TenantId")
.HasColumnType("char(36)")
.HasColumnName("TenantId");
b.Property<string>("Title")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("varchar(50)")
.HasColumnName("Title");
b.Property<string>("Version")
.IsRequired()
.HasMaxLength(20)
.HasColumnType("varchar(20)")
.HasColumnName("Version");
b.HasKey("Id");
b.HasIndex("Version");
b.ToTable("AppPlatformVersion", (string)null);
});
modelBuilder.Entity("LINGYUN.Platform.Versions.VersionFile", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
b.Property<Guid>("AppVersionId")
.HasColumnType("char(36)");
b.Property<DateTime>("CreationTime")
.HasColumnType("datetime(6)")
.HasColumnName("CreationTime");
b.Property<Guid?>("CreatorId")
.HasColumnType("char(36)")
.HasColumnName("CreatorId");
b.Property<int>("DownloadCount")
.HasColumnType("int");
b.Property<int>("FileType")
.HasColumnType("int");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime(6)")
.HasColumnName("LastModificationTime");
b.Property<Guid?>("LastModifierId")
.HasColumnType("char(36)")
.HasColumnName("LastModifierId");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(255)
.HasColumnType("varchar(255)")
.HasColumnName("Name");
b.Property<string>("Path")
.HasMaxLength(255)
.HasColumnType("varchar(255)")
.HasColumnName("Path");
b.Property<string>("SHA256")
.IsRequired()
.HasMaxLength(65)
.HasColumnType("varchar(65)")
.HasColumnName("SHA256");
b.Property<long>("Size")
.HasColumnType("bigint");
b.Property<Guid?>("TenantId")
.HasColumnType("char(36)")
.HasColumnName("TenantId");
b.Property<string>("Version")
.IsRequired()
.HasMaxLength(20)
.HasColumnType("varchar(20)")
.HasColumnName("Version");
b.HasKey("Id");
b.HasIndex("AppVersionId");
b.HasIndex("Path", "Name", "Version")
.IsUnique();
b.ToTable("AppPlatformVersionFile", (string)null);
});
modelBuilder.Entity("LINGYUN.Platform.Datas.DataItem", b =>
{
b.HasOne("LINGYUN.Platform.Datas.Data", null)
.WithMany("Items")
.HasForeignKey("DataId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("LINGYUN.Platform.Versions.VersionFile", b =>
{
b.HasOne("LINGYUN.Platform.Versions.AppVersion", "AppVersion")
.WithMany("Files")
.HasForeignKey("AppVersionId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("AppVersion");
});
modelBuilder.Entity("LINGYUN.Platform.Datas.Data", b =>
{
b.Navigation("Items");
});
modelBuilder.Entity("LINGYUN.Platform.Versions.AppVersion", b =>
{
b.Navigation("Files");
});
#pragma warning restore 612, 618
}
}
}

37
aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/Migrations/20220301001241_Add-Field-Startup-With-UserAndRole-Menu.cs

@ -0,0 +1,37 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace LY.MicroService.PlatformManagement.Migrations
{
public partial class AddFieldStartupWithUserAndRoleMenu : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<bool>(
name: "Startup",
table: "AppPlatformUserMenus",
type: "tinyint(1)",
nullable: false,
defaultValue: false);
migrationBuilder.AddColumn<bool>(
name: "Startup",
table: "AppPlatformRoleMenus",
type: "tinyint(1)",
nullable: false,
defaultValue: false);
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "Startup",
table: "AppPlatformUserMenus");
migrationBuilder.DropColumn(
name: "Startup",
table: "AppPlatformRoleMenus");
}
}
}

28
aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/Migrations/PlatformHttpApiHostMigrationsDbContextModelSnapshot.cs

@ -6,6 +6,8 @@ using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion; using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore;
#nullable disable
namespace LY.MicroService.PlatformManagement.Migrations namespace LY.MicroService.PlatformManagement.Migrations
{ {
[DbContext(typeof(PlatformManagementMigrationsDbContext))] [DbContext(typeof(PlatformManagementMigrationsDbContext))]
@ -16,8 +18,8 @@ namespace LY.MicroService.PlatformManagement.Migrations
#pragma warning disable 612, 618 #pragma warning disable 612, 618
modelBuilder modelBuilder
.HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.MySql) .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.MySql)
.HasAnnotation("Relational:MaxIdentifierLength", 64) .HasAnnotation("ProductVersion", "6.0.2")
.HasAnnotation("ProductVersion", "5.0.11"); .HasAnnotation("Relational:MaxIdentifierLength", 64);
modelBuilder.Entity("LINGYUN.Platform.Datas.Data", b => modelBuilder.Entity("LINGYUN.Platform.Datas.Data", b =>
{ {
@ -102,7 +104,7 @@ namespace LY.MicroService.PlatformManagement.Migrations
b.HasIndex("Name"); b.HasIndex("Name");
b.ToTable("AppPlatformDatas"); b.ToTable("AppPlatformDatas", (string)null);
}); });
modelBuilder.Entity("LINGYUN.Platform.Datas.DataItem", b => modelBuilder.Entity("LINGYUN.Platform.Datas.DataItem", b =>
@ -197,7 +199,7 @@ namespace LY.MicroService.PlatformManagement.Migrations
b.HasIndex("Name"); b.HasIndex("Name");
b.ToTable("AppPlatformDataItems"); b.ToTable("AppPlatformDataItems", (string)null);
}); });
modelBuilder.Entity("LINGYUN.Platform.Layouts.Layout", b => modelBuilder.Entity("LINGYUN.Platform.Layouts.Layout", b =>
@ -286,7 +288,7 @@ namespace LY.MicroService.PlatformManagement.Migrations
b.HasKey("Id"); b.HasKey("Id");
b.ToTable("AppPlatformLayouts"); b.ToTable("AppPlatformLayouts", (string)null);
}); });
modelBuilder.Entity("LINGYUN.Platform.Menus.Menu", b => modelBuilder.Entity("LINGYUN.Platform.Menus.Menu", b =>
@ -393,7 +395,7 @@ namespace LY.MicroService.PlatformManagement.Migrations
b.HasKey("Id"); b.HasKey("Id");
b.ToTable("AppPlatformMenus"); b.ToTable("AppPlatformMenus", (string)null);
}); });
modelBuilder.Entity("LINGYUN.Platform.Menus.RoleMenu", b => modelBuilder.Entity("LINGYUN.Platform.Menus.RoleMenu", b =>
@ -427,6 +429,9 @@ namespace LY.MicroService.PlatformManagement.Migrations
.HasColumnType("varchar(256)") .HasColumnType("varchar(256)")
.HasColumnName("RoleName"); .HasColumnName("RoleName");
b.Property<bool>("Startup")
.HasColumnType("tinyint(1)");
b.Property<Guid?>("TenantId") b.Property<Guid?>("TenantId")
.HasColumnType("char(36)") .HasColumnType("char(36)")
.HasColumnName("TenantId"); .HasColumnName("TenantId");
@ -435,7 +440,7 @@ namespace LY.MicroService.PlatformManagement.Migrations
b.HasIndex("RoleName", "MenuId"); b.HasIndex("RoleName", "MenuId");
b.ToTable("AppPlatformRoleMenus"); b.ToTable("AppPlatformRoleMenus", (string)null);
}); });
modelBuilder.Entity("LINGYUN.Platform.Menus.UserMenu", b => modelBuilder.Entity("LINGYUN.Platform.Menus.UserMenu", b =>
@ -463,6 +468,9 @@ namespace LY.MicroService.PlatformManagement.Migrations
b.Property<Guid>("MenuId") b.Property<Guid>("MenuId")
.HasColumnType("char(36)"); .HasColumnType("char(36)");
b.Property<bool>("Startup")
.HasColumnType("tinyint(1)");
b.Property<Guid?>("TenantId") b.Property<Guid?>("TenantId")
.HasColumnType("char(36)") .HasColumnType("char(36)")
.HasColumnName("TenantId"); .HasColumnName("TenantId");
@ -474,7 +482,7 @@ namespace LY.MicroService.PlatformManagement.Migrations
b.HasIndex("UserId", "MenuId"); b.HasIndex("UserId", "MenuId");
b.ToTable("AppPlatformUserMenus"); b.ToTable("AppPlatformUserMenus", (string)null);
}); });
modelBuilder.Entity("LINGYUN.Platform.Versions.AppVersion", b => modelBuilder.Entity("LINGYUN.Platform.Versions.AppVersion", b =>
@ -554,7 +562,7 @@ namespace LY.MicroService.PlatformManagement.Migrations
b.HasIndex("Version"); b.HasIndex("Version");
b.ToTable("AppPlatformVersion"); b.ToTable("AppPlatformVersion", (string)null);
}); });
modelBuilder.Entity("LINGYUN.Platform.Versions.VersionFile", b => modelBuilder.Entity("LINGYUN.Platform.Versions.VersionFile", b =>
@ -625,7 +633,7 @@ namespace LY.MicroService.PlatformManagement.Migrations
b.HasIndex("Path", "Name", "Version") b.HasIndex("Path", "Name", "Version")
.IsUnique(); .IsUnique();
b.ToTable("AppPlatformVersionFile"); b.ToTable("AppPlatformVersionFile", (string)null);
}); });
modelBuilder.Entity("LINGYUN.Platform.Datas.DataItem", b => modelBuilder.Entity("LINGYUN.Platform.Datas.DataItem", b =>

Loading…
Cancel
Save