Browse Source

Merge branch 'dev' into berkan/add-localization

pull/21774/head
Berkan Sasmaz 2 years ago
parent
commit
6a20c45e21
  1. 2
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/IMenuItemAdminAppService.cs
  2. 2
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemCreateInput.cs
  3. 2
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemUpdateInput.cs
  4. 8
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/PermissionLookupDto.cs
  5. 6
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/PermissionLookupInputDto.cs
  6. 28
      modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuItemAdminAppService.cs
  7. 8
      modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Admin/Menus/MenuItemAdminClientProxy.Generated.cs
  8. 56
      modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/cms-kit-admin-generate-proxy.json
  9. 7
      modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Menus/MenuItemAdminController.cs
  10. 5
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml
  11. 4
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml.cs
  12. 24
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml
  13. 7
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml.cs
  14. 46
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/createModal.js
  15. 47
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/updateModal.js
  16. 2
      modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuItemDto.cs
  17. 3
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ar.json
  18. 3
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/cs.json
  19. 3
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/de-DE.json
  20. 3
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/de.json
  21. 3
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/el.json
  22. 3
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en-GB.json
  23. 3
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json
  24. 3
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/es.json
  25. 3
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fa.json
  26. 3
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fi.json
  27. 3
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fr.json
  28. 3
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/hi.json
  29. 3
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/hr.json
  30. 3
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/hu.json
  31. 3
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/is.json
  32. 3
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/it.json
  33. 3
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/nl.json
  34. 3
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/pl-PL.json
  35. 3
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/pt-BR.json
  36. 3
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ro-RO.json
  37. 3
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ru.json
  38. 3
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/sk.json
  39. 3
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/sl.json
  40. 3
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/sv.json
  41. 3
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json
  42. 3
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/vi.json
  43. 3
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/zh-Hans.json
  44. 3
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/zh-Hant.json
  45. 1
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Menus/MenuItemConsts.cs
  46. 6
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItem.cs
  47. 2
      modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs
  48. 12
      modules/cms-kit/src/Volo.CmsKit.Public.Web/Menus/CmsKitPublicMenuContributor.cs
  49. 16
      modules/docs/.abpstudio/state.json
  50. 11
      modules/docs/Default.abprun.json
  51. 6
      modules/docs/Volo.Docs.abpsln
  52. 3
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Documents/IDocumentAdminAppService.cs
  53. 7
      modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentAdminAppService.cs
  54. 6
      modules/docs/src/Volo.Docs.Admin.HttpApi.Client/ClientProxies/Volo/Docs/Admin/DocumentsAdminClientProxy.Generated.cs
  55. 23
      modules/docs/src/Volo.Docs.Admin.HttpApi.Client/ClientProxies/Volo/Docs/Admin/docs-admin-generate-proxy.json
  56. 14
      modules/docs/src/Volo.Docs.Admin.HttpApi.Client/Volo.Docs.Admin.HttpApi.Client.abppkg
  57. 8
      modules/docs/src/Volo.Docs.Admin.HttpApi/Volo/Docs/Admin/DocumentsAdminController.cs
  58. 11
      modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/Index.cshtml.cs
  59. 13
      modules/docs/src/Volo.Docs.Admin.Web/Volo.Docs.Admin.Web.abppkg
  60. 7
      modules/docs/src/Volo.Docs.Admin.Web/wwwroot/client-proxies/docs-admin-proxy.js

2
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/IMenuItemAdminAppService.cs

@ -21,4 +21,6 @@ public interface IMenuItemAdminAppService : IApplicationService
Task MoveMenuItemAsync(Guid id, MenuItemMoveInput input); Task MoveMenuItemAsync(Guid id, MenuItemMoveInput input);
Task<PagedResultDto<PageLookupDto>> GetPageLookupAsync(PageLookupInputDto input); Task<PagedResultDto<PageLookupDto>> GetPageLookupAsync(PageLookupInputDto input);
Task<ListResultDto<PermissionLookupDto>> GetPermissionLookupAsync(PermissionLookupInputDto inputDto);
} }

2
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemCreateInput.cs

@ -27,4 +27,6 @@ public class MenuItemCreateInput : ExtensibleObject
public string CssClass { get; set; } public string CssClass { get; set; }
public Guid? PageId { get; set; } public Guid? PageId { get; set; }
public string RequiredPermissionName { get; set; }
} }

2
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemUpdateInput.cs

@ -24,6 +24,8 @@ public class MenuItemUpdateInput : ExtensibleObject, IHasConcurrencyStamp
public string CssClass { get; set; } public string CssClass { get; set; }
public Guid? PageId { get; set; } public Guid? PageId { get; set; }
public string RequiredPermissionName { get; set; }
public string ConcurrencyStamp { get; set; } public string ConcurrencyStamp { get; set; }
} }

8
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/PermissionLookupDto.cs

@ -0,0 +1,8 @@
namespace Volo.CmsKit.Admin.Menus;
public class PermissionLookupDto
{
public string Name { get; set; }
public string DisplayName { get; set; }
}

6
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/PermissionLookupInputDto.cs

@ -0,0 +1,6 @@
namespace Volo.CmsKit.Admin.Menus;
public class PermissionLookupInputDto
{
public string Filter { get; set; }
}

28
modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuItemAdminAppService.cs

@ -1,8 +1,10 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.Data; using Volo.Abp.Data;
using Volo.Abp.Features; using Volo.Abp.Features;
using Volo.Abp.GlobalFeatures; using Volo.Abp.GlobalFeatures;
@ -23,15 +25,18 @@ public class MenuItemAdminAppService : CmsKitAdminAppServiceBase, IMenuItemAdmin
protected MenuItemManager MenuManager { get; } protected MenuItemManager MenuManager { get; }
protected IMenuItemRepository MenuItemRepository { get; } protected IMenuItemRepository MenuItemRepository { get; }
protected IPageRepository PageRepository { get; } protected IPageRepository PageRepository { get; }
protected IPermissionDefinitionManager PermissionDefinitionManager { get; }
public MenuItemAdminAppService( public MenuItemAdminAppService(
MenuItemManager menuManager, MenuItemManager menuManager,
IMenuItemRepository menuRepository, IMenuItemRepository menuRepository,
IPageRepository pageRepository) IPageRepository pageRepository,
IPermissionDefinitionManager permissionDefinitionManager)
{ {
MenuManager = menuManager; MenuManager = menuManager;
MenuItemRepository = menuRepository; MenuItemRepository = menuRepository;
PageRepository = pageRepository; PageRepository = pageRepository;
PermissionDefinitionManager = permissionDefinitionManager;
} }
public virtual async Task<ListResultDto<MenuItemDto>> GetListAsync() public virtual async Task<ListResultDto<MenuItemDto>> GetListAsync()
@ -70,7 +75,8 @@ public class MenuItemAdminAppService : CmsKitAdminAppServiceBase, IMenuItemAdmin
input.Target, input.Target,
input.ElementId, input.ElementId,
input.CssClass, input.CssClass,
CurrentTenant.Id CurrentTenant.Id,
input.RequiredPermissionName
); );
if (input.PageId.HasValue) if (input.PageId.HasValue)
@ -103,6 +109,7 @@ public class MenuItemAdminAppService : CmsKitAdminAppServiceBase, IMenuItemAdmin
menuItem.Target = input.Target; menuItem.Target = input.Target;
menuItem.ElementId = input.ElementId; menuItem.ElementId = input.ElementId;
menuItem.CssClass = input.CssClass; menuItem.CssClass = input.CssClass;
menuItem.RequiredPermissionName = input.RequiredPermissionName;
menuItem.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp); menuItem.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
input.MapExtraPropertiesTo(menuItem); input.MapExtraPropertiesTo(menuItem);
await MenuItemRepository.UpdateAsync(menuItem); await MenuItemRepository.UpdateAsync(menuItem);
@ -138,4 +145,21 @@ public class MenuItemAdminAppService : CmsKitAdminAppServiceBase, IMenuItemAdmin
ObjectMapper.Map<List<Page>, List<PageLookupDto>>(pages) ObjectMapper.Map<List<Page>, List<PageLookupDto>>(pages)
); );
} }
public virtual async Task<ListResultDto<PermissionLookupDto>> GetPermissionLookupAsync(PermissionLookupInputDto inputDto)
{
var permissions = await PermissionDefinitionManager.GetPermissionsAsync();
var permissionLookupDtos= permissions
.WhereIf(!inputDto.Filter.IsNullOrWhiteSpace(), p => p.Name.Contains(inputDto.Filter, StringComparison.OrdinalIgnoreCase))
.Select(x => new PermissionLookupDto
{
Name = x.Name,
DisplayName = x.DisplayName.Localize(StringLocalizerFactory)
}).ToList();
return new ListResultDto<PermissionLookupDto>(
permissionLookupDtos
);
}
} }

8
modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Admin/Menus/MenuItemAdminClientProxy.Generated.cs

@ -72,4 +72,12 @@ public partial class MenuItemAdminClientProxy : ClientProxyBase<IMenuItemAdminAp
{ typeof(PageLookupInputDto), input } { typeof(PageLookupInputDto), input }
}); });
} }
public virtual async Task<ListResultDto<PermissionLookupDto>> GetPermissionLookupAsync(PermissionLookupInputDto inputDto)
{
return await RequestAsync<ListResultDto<PermissionLookupDto>>(nameof(GetPermissionLookupAsync), new ClientProxyRequestTypeValue
{
{ typeof(PermissionLookupInputDto), inputDto }
});
}
} }

56
modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/cms-kit-admin-generate-proxy.json

@ -40,7 +40,7 @@
"typeAsString": "System.Nullable`1[[System.Guid, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib", "typeAsString": "System.Nullable`1[[System.Guid, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib",
"type": "System.Guid?", "type": "System.Guid?",
"typeSimple": "string?", "typeSimple": "string?",
"isOptional": false, "isOptional": true,
"defaultValue": null "defaultValue": null
} }
], ],
@ -2167,6 +2167,23 @@
"type": "Volo.Abp.Application.Dtos.PagedResultDto<Volo.CmsKit.Admin.Menus.PageLookupDto>", "type": "Volo.Abp.Application.Dtos.PagedResultDto<Volo.CmsKit.Admin.Menus.PageLookupDto>",
"typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto<Volo.CmsKit.Admin.Menus.PageLookupDto>" "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto<Volo.CmsKit.Admin.Menus.PageLookupDto>"
} }
},
{
"name": "GetPermissionLookupAsync",
"parametersOnMethod": [
{
"name": "inputDto",
"typeAsString": "Volo.CmsKit.Admin.Menus.PermissionLookupInputDto, Volo.CmsKit.Admin.Application.Contracts",
"type": "Volo.CmsKit.Admin.Menus.PermissionLookupInputDto",
"typeSimple": "Volo.CmsKit.Admin.Menus.PermissionLookupInputDto",
"isOptional": false,
"defaultValue": null
}
],
"returnValue": {
"type": "Volo.Abp.Application.Dtos.ListResultDto<Volo.CmsKit.Admin.Menus.PermissionLookupDto>",
"typeSimple": "Volo.Abp.Application.Dtos.ListResultDto<Volo.CmsKit.Admin.Menus.PermissionLookupDto>"
}
} }
] ]
} }
@ -2484,6 +2501,43 @@
}, },
"allowAnonymous": false, "allowAnonymous": false,
"implementFrom": "Volo.CmsKit.Admin.Menus.IMenuItemAdminAppService" "implementFrom": "Volo.CmsKit.Admin.Menus.IMenuItemAdminAppService"
},
"GetPermissionLookupAsyncByInputDto": {
"uniqueName": "GetPermissionLookupAsyncByInputDto",
"name": "GetPermissionLookupAsync",
"httpMethod": "GET",
"url": "api/cms-kit-admin/menu-items/lookup/permissions",
"supportedVersions": [],
"parametersOnMethod": [
{
"name": "inputDto",
"typeAsString": "Volo.CmsKit.Admin.Menus.PermissionLookupInputDto, Volo.CmsKit.Admin.Application.Contracts",
"type": "Volo.CmsKit.Admin.Menus.PermissionLookupInputDto",
"typeSimple": "Volo.CmsKit.Admin.Menus.PermissionLookupInputDto",
"isOptional": false,
"defaultValue": null
}
],
"parameters": [
{
"nameOnMethod": "inputDto",
"name": "Filter",
"jsonName": null,
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "inputDto"
}
],
"returnValue": {
"type": "Volo.Abp.Application.Dtos.ListResultDto<Volo.CmsKit.Admin.Menus.PermissionLookupDto>",
"typeSimple": "Volo.Abp.Application.Dtos.ListResultDto<Volo.CmsKit.Admin.Menus.PermissionLookupDto>"
},
"allowAnonymous": false,
"implementFrom": "Volo.CmsKit.Admin.Menus.IMenuItemAdminAppService"
} }
} }
}, },

7
modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Menus/MenuItemAdminController.cs

@ -78,4 +78,11 @@ public class MenuItemAdminController : CmsKitAdminController, IMenuItemAdminAppS
{ {
return MenuItemAdminAppService.GetPageLookupAsync(input); return MenuItemAdminAppService.GetPageLookupAsync(input);
} }
[HttpGet]
[Route("lookup/permissions")]
public Task<ListResultDto<PermissionLookupDto>> GetPermissionLookupAsync(PermissionLookupInputDto inputDto)
{
return MenuItemAdminAppService.GetPermissionLookupAsync(inputDto);
}
} }

5
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml

@ -60,6 +60,11 @@
<abp-input asp-for="ViewModel.ParentId"/> <abp-input asp-for="ViewModel.ParentId"/>
<abp-input asp-for="ViewModel.DisplayName"/> <abp-input asp-for="ViewModel.DisplayName"/>
<div class="mb-3">
<label class="form-label" for="requiredPermissionName">@L["RequiredPermissionName"].Value</label>
<select asp-for="ViewModel.RequiredPermissionName" id="requiredPermissionName" class="form-control"></select>
<div id="tooltip_container"></div>
</div>
<abp-input asp-for="ViewModel.IsActive"/> <abp-input asp-for="ViewModel.IsActive"/>
<abp-input asp-for="ViewModel.Icon"/> <abp-input asp-for="ViewModel.Icon"/>
<abp-input asp-for="ViewModel.Order"/> <abp-input asp-for="ViewModel.Order"/>

4
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml.cs

@ -3,6 +3,7 @@ using System.ComponentModel.DataAnnotations;
using System.Threading.Tasks; using System.Threading.Tasks;
using AutoMapper; using AutoMapper;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.Features; using Volo.Abp.Features;
using Volo.Abp.GlobalFeatures; using Volo.Abp.GlobalFeatures;
using Volo.Abp.ObjectExtending; using Volo.Abp.ObjectExtending;
@ -32,7 +33,6 @@ public class CreateModalModel : CmsKitAdminPageModel
public virtual async Task OnGetAsync(Guid? parentId) public virtual async Task OnGetAsync(Guid? parentId)
{ {
ViewModel.ParentId = parentId; ViewModel.ParentId = parentId;
IsPageFeatureEnabled = GlobalFeatureManager.Instance.IsEnabled<PagesFeature>() IsPageFeatureEnabled = GlobalFeatureManager.Instance.IsEnabled<PagesFeature>()
&& await FeatureChecker.IsEnabledAsync(CmsKitFeatures.PageEnable); && await FeatureChecker.IsEnabledAsync(CmsKitFeatures.PageEnable);
} }
@ -72,6 +72,8 @@ public class CreateModalModel : CmsKitAdminPageModel
public string ElementId { get; set; } public string ElementId { get; set; }
public string CssClass { get; set; } public string CssClass { get; set; }
public string RequiredPermissionName { get; set; }
} }
} }

24
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml

@ -64,6 +64,30 @@
} }
<abp-input asp-for="ViewModel.DisplayName"/> <abp-input asp-for="ViewModel.DisplayName"/>
<div class="mb-3">
<label class="form-label" for="requiredPermissionName">@L["RequiredPermissionName"].Value</label>
<select asp-for="ViewModel.RequiredPermissionName" id="requiredPermissionName" class="form-control">
@if(Model.ViewModel.RequiredPermissionName != null)
{
var selectedPermission = Model.Permissions.FirstOrDefault(p => p.Name == Model.ViewModel.RequiredPermissionName);
if (selectedPermission != null)
{
<option
data-bs-toggle="tooltip"
data-bs-container="#tooltip_container"
data-bs-placement="top"
title="@selectedPermission.DisplayName"
selected
value="@Model.ViewModel.RequiredPermissionName">@selectedPermission.Name</option>
}
else
{
<option selected value="@Model.ViewModel.RequiredPermissionName">@Model.ViewModel.RequiredPermissionName</option>
}
}
</select>
<div id="tooltip_container"></div>
</div>
<abp-input asp-for="ViewModel.IsActive"/> <abp-input asp-for="ViewModel.IsActive"/>
<abp-input asp-for="ViewModel.Icon"/> <abp-input asp-for="ViewModel.Icon"/>
<abp-input asp-for="ViewModel.Target"/> <abp-input asp-for="ViewModel.Target"/>

7
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml.cs

@ -1,4 +1,5 @@
using System; using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.Threading.Tasks; using System.Threading.Tasks;
using AutoMapper; using AutoMapper;
@ -28,6 +29,8 @@ public class UpdateModalModel : CmsKitAdminPageModel
public Guid Id { get; set; } public Guid Id { get; set; }
public bool IsPageFeatureEnabled { get; set; } public bool IsPageFeatureEnabled { get; set; }
public IReadOnlyList<PermissionLookupDto> Permissions { get; set; }
public UpdateModalModel(IMenuItemAdminAppService menuAdminAppService, IFeatureChecker featureChecker) public UpdateModalModel(IMenuItemAdminAppService menuAdminAppService, IFeatureChecker featureChecker)
{ {
@ -39,7 +42,7 @@ public class UpdateModalModel : CmsKitAdminPageModel
public async Task OnGetAsync() public async Task OnGetAsync()
{ {
var menuItemDto = await MenuAdminAppService.GetAsync(Id); var menuItemDto = await MenuAdminAppService.GetAsync(Id);
Permissions = (await MenuAdminAppService.GetPermissionLookupAsync(new PermissionLookupInputDto())).Items;
IsPageFeatureEnabled = GlobalFeatureManager.Instance.IsEnabled<PagesFeature>() IsPageFeatureEnabled = GlobalFeatureManager.Instance.IsEnabled<PagesFeature>()
&& await FeatureChecker.IsEnabledAsync(CmsKitFeatures.PageEnable); && await FeatureChecker.IsEnabledAsync(CmsKitFeatures.PageEnable);
@ -76,6 +79,8 @@ public class UpdateModalModel : CmsKitAdminPageModel
public Guid? PageId { get; set; } public Guid? PageId { get; set; }
public string? PageTitle { get; set; } public string? PageTitle { get; set; }
public string RequiredPermissionName { get; set; }
[HiddenInput] [HiddenInput]
public string ConcurrencyStamp { get; set; } public string ConcurrencyStamp { get; set; }

46
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/createModal.js

@ -8,6 +8,7 @@ $(function () {
var $url = $('#ViewModel_Url'); var $url = $('#ViewModel_Url');
var $displayName = $('#ViewModel_DisplayName'); var $displayName = $('#ViewModel_DisplayName');
var $menuItemForm = $('#menu-item-form'); var $menuItemForm = $('#menu-item-form');
var $selectRequiredPermission = $('#requiredPermissionName');
$pageId.on('change', function (params) { $pageId.on('change', function (params) {
$url.prop('disabled', $pageId.val()); $url.prop('disabled', $pageId.val());
@ -20,6 +21,51 @@ $(function () {
} }
}) })
function initSelectRequiredPermission(){
function formatDisplayName(item) {
if (!item.id) {
return item.text;
}
var $displayName = $(`<span data-bs-toggle="tooltip" data-bs-container="#tooltip_container" data-bs-placement="top" title="${item.displayName}">${item.id}</span>`);
$displayName.tooltip();
return $displayName;
}
$selectRequiredPermission.select2({
ajax:{
url: '/api/cms-kit-admin/menu-items/lookup/permissions',
delay: 250,
dataType: "json",
data: function (params) {
let query = {};
query["filter"] = params.term;
return query;
},
processResults: function (data) {
let retVal = [];
let items = data["items"];
$('body').tooltip('dispose');
items.forEach(function (item, index) {
retVal.push({
id: item["name"],
text: item["name"],
displayName: item["displayName"]
})
});
return {
results: retVal
};
}
},
templateResult: formatDisplayName,
width: '100%',
dropdownParent: $('#menu-create-modal'),
language: abp.localization.currentCulture.cultureName
});
}
initSelectRequiredPermission();
$menuItemForm.on('submit', function (e) { $menuItemForm.on('submit', function (e) {
$('[href="#url"]').tab('show'); $('[href="#url"]').tab('show');
}); });

47
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/updateModal.js

@ -8,6 +8,7 @@ $(function () {
var $url = $('#ViewModel_Url'); var $url = $('#ViewModel_Url');
var $displayName = $('#ViewModel_DisplayName'); var $displayName = $('#ViewModel_DisplayName');
var $menuItemForm = $('#menu-item-form'); var $menuItemForm = $('#menu-item-form');
var $selectRequiredPermission = $('#requiredPermissionName');
$pageId.on('change', function (params) { $pageId.on('change', function (params) {
$url.prop('disabled', $pageId.val()); $url.prop('disabled', $pageId.val());
@ -21,6 +22,52 @@ $(function () {
$pageId.trigger('change'); $pageId.trigger('change');
function initSelectRequiredPermission(){
function formatDisplayName(item) {
if (!item.id) {
return item.text;
}
var $displayName = $(`<span data-bs-container="#tooltip_container" data-bs-toggle="tooltip" data-bs-placement="top" title="${item.displayName}">${item.id}</span>`);
$displayName.tooltip();
return $displayName;
}
$selectRequiredPermission.select2({
ajax:{
url: '/api/cms-kit-admin/menu-items/lookup/permissions',
delay: 250,
dataType: "json",
data: function (params) {
let query = {};
query["filter"] = params.term;
return query;
},
processResults: function (data) {
let retVal = [];
let items = data["items"];
$('body').tooltip('dispose');
items.forEach(function (item, index) {
retVal.push({
id: item["name"],
text: item["name"],
displayName: item["displayName"]
})
});
return {
results: retVal
};
}
},
templateResult: formatDisplayName,
width: '100%',
dropdownParent: $('#menu-update-modal'),
language: abp.localization.currentCulture.cultureName
});
}
initSelectRequiredPermission();
$('[data-ts-toggle="tooltip"]').tooltip()
$menuItemForm.on('submit', function (e) { $menuItemForm.on('submit', function (e) {
$('[href="#url"]').tab('show'); $('[href="#url"]').tab('show');
}); });

2
modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuItemDto.cs

@ -26,6 +26,8 @@ public class MenuItemDto : ExtensibleAuditedEntityDto<Guid>, IHasConcurrencyStam
public string CssClass { get; set; } public string CssClass { get; set; }
public Guid? PageId { get; set; } public Guid? PageId { get; set; }
public string RequiredPermissionName { get; set; }
public string ConcurrencyStamp { get; set; } public string ConcurrencyStamp { get; set; }
} }

3
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ar.json

@ -241,6 +241,7 @@
"ChooseAnActionForBlog": "اختر إجراءً للمدونة", "ChooseAnActionForBlog": "اختر إجراءً للمدونة",
"AssignBlogPostsToOtherBlog": "تعيين مشاركات المدونة إلى مدونة أخرى", "AssignBlogPostsToOtherBlog": "تعيين مشاركات المدونة إلى مدونة أخرى",
"SelectAnBlogToAssign": "حدد مدونة لتعيين مشاركات المدونة إليها", "SelectAnBlogToAssign": "حدد مدونة لتعيين مشاركات المدونة إليها",
"DeleteAllBlogPostsOfThisBlog": "حذف جميع مشاركات المدونة" "DeleteAllBlogPostsOfThisBlog": "حذف جميع مشاركات المدونة",
"RequiredPermissionName": "اسم الإذن المطلوب",
} }
} }

3
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/cs.json

@ -231,6 +231,7 @@
"ChooseAnActionForBlog": "Vyberte akci pro blog", "ChooseAnActionForBlog": "Vyberte akci pro blog",
"AssignBlogPostsToOtherBlog": "Přiřaďte blogové příspěvky k jinému blogu", "AssignBlogPostsToOtherBlog": "Přiřaďte blogové příspěvky k jinému blogu",
"SelectAnBlogToAssign": "Vyberte blog, ke kterému chcete přiřadit blogové příspěvky", "SelectAnBlogToAssign": "Vyberte blog, ke kterému chcete přiřadit blogové příspěvky",
"DeleteAllBlogPostsOfThisBlog": "Smazat všechny blogové příspěvky tohoto blogu" "DeleteAllBlogPostsOfThisBlog": "Smazat všechny blogové příspěvky tohoto blogu",
"RequiredPermissionName": "Je vyžadováno oprávnění"
} }
} }

3
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/de-DE.json

@ -165,6 +165,7 @@
"ChooseAnActionForBlog": "Wählen Sie eine Aktion für den Blog", "ChooseAnActionForBlog": "Wählen Sie eine Aktion für den Blog",
"AssignBlogPostsToOtherBlog": "Blogbeiträge einem anderen Blog zuweisen", "AssignBlogPostsToOtherBlog": "Blogbeiträge einem anderen Blog zuweisen",
"SelectAnBlogToAssign": "Wählen Sie einen Blog aus, um Blogbeiträge zuzuweisen", "SelectAnBlogToAssign": "Wählen Sie einen Blog aus, um Blogbeiträge zuzuweisen",
"DeleteAllBlogPostsOfThisBlog": "Alle Blogbeiträge dieses Blogs löschen" "DeleteAllBlogPostsOfThisBlog": "Alle Blogbeiträge dieses Blogs löschen",
"RequiredPermissionName": "Erforderlicher Berechtigungsname"
} }
} }

3
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/de.json

@ -231,6 +231,7 @@
"ChooseAnActionForBlog": "Wählen Sie eine Aktion für den Blog", "ChooseAnActionForBlog": "Wählen Sie eine Aktion für den Blog",
"AssignBlogPostsToOtherBlog": "Blogbeiträge einem anderen Blog zuweisen", "AssignBlogPostsToOtherBlog": "Blogbeiträge einem anderen Blog zuweisen",
"SelectAnBlogToAssign": "Wählen Sie einen Blog aus, um Blogbeiträge zuzuweisen", "SelectAnBlogToAssign": "Wählen Sie einen Blog aus, um Blogbeiträge zuzuweisen",
"DeleteAllBlogPostsOfThisBlog": "Alle Blogbeiträge dieses Blogs löschen" "DeleteAllBlogPostsOfThisBlog": "Alle Blogbeiträge dieses Blogs löschen",
"RequiredPermissionName": "Erforderlicher Berechtigungsname"
} }
} }

3
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/el.json

@ -188,6 +188,7 @@
"ChooseAnActionForBlog": "Επιλέξτε μια ενέργεια για το ιστολόγιο", "ChooseAnActionForBlog": "Επιλέξτε μια ενέργεια για το ιστολόγιο",
"AssignBlogPostsToOtherBlog": "Ανάθεση αναρτήσεων ιστολογίου σε άλλο ιστολόγιο", "AssignBlogPostsToOtherBlog": "Ανάθεση αναρτήσεων ιστολογίου σε άλλο ιστολόγιο",
"SelectAnBlogToAssign": "Επιλέξτε ένα ιστολόγιο για να αναθέσετε αναρτήσεις ιστολογίου", "SelectAnBlogToAssign": "Επιλέξτε ένα ιστολόγιο για να αναθέσετε αναρτήσεις ιστολογίου",
"DeleteAllBlogPostsOfThisBlog": "Διαγραφή όλων των αναρτήσεων ιστολογίου αυτού του ιστολογίου" "DeleteAllBlogPostsOfThisBlog": "Διαγραφή όλων των αναρτήσεων ιστολογίου αυτού του ιστολογίου",
"RequiredPermissionName": "Απαιτούμενο όνομα δικαιώματος"
} }
} }

3
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en-GB.json

@ -32,6 +32,7 @@
"ChooseAnActionForBlog": "Choose an action for the blog", "ChooseAnActionForBlog": "Choose an action for the blog",
"AssignBlogPostsToOtherBlog": "Assign blog posts to another blog", "AssignBlogPostsToOtherBlog": "Assign blog posts to another blog",
"SelectAnBlogToAssign": "Select a blog to assign", "SelectAnBlogToAssign": "Select a blog to assign",
"DeleteAllBlogPostsOfThisBlog": "Delete all blog posts of this blog" "DeleteAllBlogPostsOfThisBlog": "Delete all blog posts of this blog",
"RequiredPermissionName": "Required permission name"
} }
} }

3
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json

@ -259,6 +259,7 @@
"ChooseAnActionForBlog": "Choose an action for the blog", "ChooseAnActionForBlog": "Choose an action for the blog",
"AssignBlogPostsToOtherBlog": "Assign blog posts to another blog", "AssignBlogPostsToOtherBlog": "Assign blog posts to another blog",
"SelectAnBlogToAssign": "Select a blog to assign", "SelectAnBlogToAssign": "Select a blog to assign",
"DeleteAllBlogPostsOfThisBlog": "Delete all blog posts of this blog" "DeleteAllBlogPostsOfThisBlog": "Delete all blog posts of this blog",
"RequiredPermissionName": "Required permission name"
} }
} }

3
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/es.json

@ -231,6 +231,7 @@
"ChooseAnActionForBlog": "Elija una acción para el blog", "ChooseAnActionForBlog": "Elija una acción para el blog",
"AssignBlogPostsToOtherBlog": "Asignar publicaciones de blog a otro blog", "AssignBlogPostsToOtherBlog": "Asignar publicaciones de blog a otro blog",
"SelectAnBlogToAssign": "Seleccione un blog para asignar publicaciones de blog", "SelectAnBlogToAssign": "Seleccione un blog para asignar publicaciones de blog",
"DeleteAllBlogPostsOfThisBlog": "Eliminar todas las publicaciones de blog de este blog" "DeleteAllBlogPostsOfThisBlog": "Eliminar todas las publicaciones de blog de este blog",
"RequiredPermissionName": "Nombre de permiso requerido"
} }
} }

3
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fa.json

@ -187,6 +187,7 @@
"ChooseAnActionForBlog": "یک عمل برای وبلاگ انتخاب کنید", "ChooseAnActionForBlog": "یک عمل برای وبلاگ انتخاب کنید",
"AssignBlogPostsToOtherBlog": "پست های وبلاگ را به وبلاگ دیگری اختصاص دهید", "AssignBlogPostsToOtherBlog": "پست های وبلاگ را به وبلاگ دیگری اختصاص دهید",
"SelectAnBlogToAssign": "یک وبلاگ برای اختصاص دادن انتخاب کنید", "SelectAnBlogToAssign": "یک وبلاگ برای اختصاص دادن انتخاب کنید",
"DeleteAllBlogPostsOfThisBlog": "تمام پست های وبلاگ این وبلاگ را حذف کنید" "DeleteAllBlogPostsOfThisBlog": "تمام پست های وبلاگ این وبلاگ را حذف کنید",
"RequiredPermissionName": "نام مجوز مورد نیاز"
} }
} }

3
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fi.json

@ -231,6 +231,7 @@
"ChooseAnActionForBlog": "Valitse toiminto blogille", "ChooseAnActionForBlog": "Valitse toiminto blogille",
"AssignBlogPostsToOtherBlog": "Määritä blogiviestit toiseen blogiin", "AssignBlogPostsToOtherBlog": "Määritä blogiviestit toiseen blogiin",
"SelectAnBlogToAssign": "Valitse blogi, johon haluat määrittää", "SelectAnBlogToAssign": "Valitse blogi, johon haluat määrittää",
"DeleteAllBlogPostsOfThisBlog": "Poista tämän blogin kaikki blogiviestit" "DeleteAllBlogPostsOfThisBlog": "Poista tämän blogin kaikki blogiviestit",
"RequiredPermissionName": "Tarvittava lupa"
} }
} }

3
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fr.json

@ -231,6 +231,7 @@
"ChooseAnActionForBlog": "Choisissez une action pour le blog", "ChooseAnActionForBlog": "Choisissez une action pour le blog",
"AssignBlogPostsToOtherBlog": "Attribuer des articles de blog à un autre blog", "AssignBlogPostsToOtherBlog": "Attribuer des articles de blog à un autre blog",
"SelectAnBlogToAssign": "Sélectionnez un blog à attribuer", "SelectAnBlogToAssign": "Sélectionnez un blog à attribuer",
"DeleteAllBlogPostsOfThisBlog": "Supprimer tous les articles de blog de ce blog" "DeleteAllBlogPostsOfThisBlog": "Supprimer tous les articles de blog de ce blog",
"RequiredPermissionName": "Nom de permission requis"
} }
} }

3
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/hi.json

@ -231,6 +231,7 @@
"ChooseAnActionForBlog": "ब्लॉग के लिए कोई कार्रवाई चुनें", "ChooseAnActionForBlog": "ब्लॉग के लिए कोई कार्रवाई चुनें",
"AssignBlogPostsToOtherBlog": "अन्य ब्लॉग को ब्लॉग पोस्ट असाइन करें", "AssignBlogPostsToOtherBlog": "अन्य ब्लॉग को ब्लॉग पोस्ट असाइन करें",
"SelectAnBlogToAssign": "असाइन करने के लिए एक ब्लॉग चुनें", "SelectAnBlogToAssign": "असाइन करने के लिए एक ब्लॉग चुनें",
"DeleteAllBlogPostsOfThisBlog": "इस ब्लॉग के सभी ब्लॉग पोस्ट हटाएं" "DeleteAllBlogPostsOfThisBlog": "इस ब्लॉग के सभी ब्लॉग पोस्ट हटाएं",
"RequiredPermissionName": "आवश्यक अनुमति नाम"
} }
} }

3
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/hr.json

@ -231,6 +231,7 @@
"ChooseAnActionForBlog": "Odaberite radnju za blog", "ChooseAnActionForBlog": "Odaberite radnju za blog",
"AssignBlogPostsToOtherBlog": "Dodijelite postove na blogu drugom blogu", "AssignBlogPostsToOtherBlog": "Dodijelite postove na blogu drugom blogu",
"SelectAnBlogToAssign": "Odaberite blog za dodjelu", "SelectAnBlogToAssign": "Odaberite blog za dodjelu",
"DeleteAllBlogPostsOfThisBlog": "Izbrišite sve postove na blogu" "DeleteAllBlogPostsOfThisBlog": "Izbrišite sve postove na blogu",
"RequiredPermissionName": "Potrebno ime dozvole"
} }
} }

3
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/hu.json

@ -231,6 +231,7 @@
"ChooseAnActionForBlog": "Válasszon egy műveletet a bloghoz", "ChooseAnActionForBlog": "Válasszon egy műveletet a bloghoz",
"AssignBlogPostsToOtherBlog": "Blogbejegyzések hozzárendelése egy másik bloghoz", "AssignBlogPostsToOtherBlog": "Blogbejegyzések hozzárendelése egy másik bloghoz",
"SelectAnBlogToAssign": "Válasszon egy blogot a hozzárendeléshez", "SelectAnBlogToAssign": "Válasszon egy blogot a hozzárendeléshez",
"DeleteAllBlogPostsOfThisBlog": "Ez a művelet törli az összes blogbejegyzést ebből a blogból. Biztos vagy benne?" "DeleteAllBlogPostsOfThisBlog": "Ez a művelet törli az összes blogbejegyzést ebből a blogból. Biztos vagy benne?",
"RequiredPermissionName": "Szükséges engedély neve"
} }
} }

3
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/is.json

@ -231,6 +231,7 @@
"ChooseAnActionForBlog": "Veldu aðgerð fyrir blogg", "ChooseAnActionForBlog": "Veldu aðgerð fyrir blogg",
"AssignBlogPostsToOtherBlog": "Úthluta bloggfærslum til annars bloggs", "AssignBlogPostsToOtherBlog": "Úthluta bloggfærslum til annars bloggs",
"SelectAnBlogToAssign": "Veldu blogg til að úthluta", "SelectAnBlogToAssign": "Veldu blogg til að úthluta",
"DeleteAllBlogPostsOfThisBlog": "Eyða öllum bloggfærslum þessa bloggs" "DeleteAllBlogPostsOfThisBlog": "Eyða öllum bloggfærslum þessa bloggs",
"RequiredPermissionName": "Nafn á nauðsynlegri leyfi"
} }
} }

3
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/it.json

@ -231,6 +231,7 @@
"ChooseAnActionForBlog": "Scegli un'azione per il blog", "ChooseAnActionForBlog": "Scegli un'azione per il blog",
"AssignBlogPostsToOtherBlog": "Assegna i post del blog ad un altro blog", "AssignBlogPostsToOtherBlog": "Assegna i post del blog ad un altro blog",
"SelectAnBlogToAssign": "Seleziona un blog a cui assegnare i post del blog", "SelectAnBlogToAssign": "Seleziona un blog a cui assegnare i post del blog",
"DeleteAllBlogPostsOfThisBlog": "Elimina tutti i post del blog di questo blog" "DeleteAllBlogPostsOfThisBlog": "Elimina tutti i post del blog di questo blog",
"RequiredPermissionName": "Nome del permesso richiesto"
} }
} }

3
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/nl.json

@ -231,6 +231,7 @@
"ChooseAnActionForBlog": "Kies een actie voor de blog", "ChooseAnActionForBlog": "Kies een actie voor de blog",
"AssignBlogPostsToOtherBlog": "Wijs blogberichten toe aan een andere blog", "AssignBlogPostsToOtherBlog": "Wijs blogberichten toe aan een andere blog",
"SelectAnBlogToAssign": "Selecteer een blog om toe te wijzen", "SelectAnBlogToAssign": "Selecteer een blog om toe te wijzen",
"DeleteAllBlogPostsOfThisBlog": "Verwijder alle blogberichten van deze blog" "DeleteAllBlogPostsOfThisBlog": "Verwijder alle blogberichten van deze blog",
"RequiredPermissionName": "Vereiste toestemming"
} }
} }

3
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/pl-PL.json

@ -231,6 +231,7 @@
"ChooseAnActionForBlog": "Wybierz akcję dla bloga", "ChooseAnActionForBlog": "Wybierz akcję dla bloga",
"AssignBlogPostsToOtherBlog": "Przypisz posty na blogu do innego bloga", "AssignBlogPostsToOtherBlog": "Przypisz posty na blogu do innego bloga",
"SelectAnBlogToAssign": "Wybierz blog, do którego chcesz przypisać posty na blogu", "SelectAnBlogToAssign": "Wybierz blog, do którego chcesz przypisać posty na blogu",
"DeleteAllBlogPostsOfThisBlog": "Usuń wszystkie posty na blogu tego bloga" "DeleteAllBlogPostsOfThisBlog": "Usuń wszystkie posty na blogu tego bloga",
"RequiredPermissionName": "Wymagana nazwa uprawnienia"
} }
} }

3
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/pt-BR.json

@ -231,6 +231,7 @@
"ChooseAnActionForBlog": "Escolha uma ação para o blog", "ChooseAnActionForBlog": "Escolha uma ação para o blog",
"AssignBlogPostsToOtherBlog": "Atribuir postagens de blog a outro blog", "AssignBlogPostsToOtherBlog": "Atribuir postagens de blog a outro blog",
"SelectAnBlogToAssign": "Selecione um blog para atribuir", "SelectAnBlogToAssign": "Selecione um blog para atribuir",
"DeleteAllBlogPostsOfThisBlog": "Excluir todas as postagens de blog deste blog" "DeleteAllBlogPostsOfThisBlog": "Excluir todas as postagens de blog deste blog",
"RequiredPermissionName": "Nome da permissão necessária"
} }
} }

3
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ro-RO.json

@ -231,6 +231,7 @@
"ChooseAnActionForBlog": "Alegeţi o acţiune pentru blog", "ChooseAnActionForBlog": "Alegeţi o acţiune pentru blog",
"AssignBlogPostsToOtherBlog": "Atribuiţi postările de blog la alt blog", "AssignBlogPostsToOtherBlog": "Atribuiţi postările de blog la alt blog",
"SelectAnBlogToAssign": "Selectaţi un blog pentru a atribui postările de blog", "SelectAnBlogToAssign": "Selectaţi un blog pentru a atribui postările de blog",
"DeleteAllBlogPostsOfThisBlog": "Ştergeţi toate postările de blog ale acestui blog" "DeleteAllBlogPostsOfThisBlog": "Ştergeţi toate postările de blog ale acestui blog",
"RequiredPermissionName": "Numele permisiunii necesare"
} }
} }

3
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ru.json

@ -231,6 +231,7 @@
"ChooseAnActionForBlog": "Выберите действие для блога", "ChooseAnActionForBlog": "Выберите действие для блога",
"AssignBlogPostsToOtherBlog": "Назначить сообщения в блоге другому блогу", "AssignBlogPostsToOtherBlog": "Назначить сообщения в блоге другому блогу",
"SelectAnBlogToAssign": "Выберите блог для назначения", "SelectAnBlogToAssign": "Выберите блог для назначения",
"DeleteAllBlogPostsOfThisBlog": "Удалить все сообщения в блоге этого блога" "DeleteAllBlogPostsOfThisBlog": "Удалить все сообщения в блоге этого блога",
"RequiredPermissionName": "Имя требуемого разрешения"
} }
} }

3
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/sk.json

@ -231,6 +231,7 @@
"ChooseAnActionForBlog": "Vyberte akciu pre blog", "ChooseAnActionForBlog": "Vyberte akciu pre blog",
"AssignBlogPostsToOtherBlog": "Priradiť blogové príspevky k inému blogu", "AssignBlogPostsToOtherBlog": "Priradiť blogové príspevky k inému blogu",
"SelectAnBlogToAssign": "Vyberte blog, na ktorý chcete priradiť blogové príspevky", "SelectAnBlogToAssign": "Vyberte blog, na ktorý chcete priradiť blogové príspevky",
"DeleteAllBlogPostsOfThisBlog": "Zmazať všetky blogové príspevky tohto blogu" "DeleteAllBlogPostsOfThisBlog": "Zmazať všetky blogové príspevky tohto blogu",
"RequiredPermissionName": "Požadovaný názov oprávnenia"
} }
} }

3
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/sl.json

@ -231,6 +231,7 @@
"ChooseAnActionForBlog": "Izberite dejanje za blog", "ChooseAnActionForBlog": "Izberite dejanje za blog",
"AssignBlogPostsToOtherBlog": "Dodeli objave v blogu drugemu blogu", "AssignBlogPostsToOtherBlog": "Dodeli objave v blogu drugemu blogu",
"SelectAnBlogToAssign": "Izberite blog, ki mu želite dodeliti objave", "SelectAnBlogToAssign": "Izberite blog, ki mu želite dodeliti objave",
"DeleteAllBlogPostsOfThisBlog": "Izbriši vse objave v tem blogu" "DeleteAllBlogPostsOfThisBlog": "Izbriši vse objave v tem blogu",
"RequiredPermissionName": "Ime zahtevane dovoljenja"
} }
} }

3
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/sv.json

@ -258,6 +258,7 @@
"ChooseAnActionForBlog": "Välj en åtgärd för bloggen", "ChooseAnActionForBlog": "Välj en åtgärd för bloggen",
"AssignBlogPostsToOtherBlog": "Tilldela blogginlägg till en annan blogg", "AssignBlogPostsToOtherBlog": "Tilldela blogginlägg till en annan blogg",
"SelectAnBlogToAssign": "Välj en blogg att tilldela", "SelectAnBlogToAssign": "Välj en blogg att tilldela",
"DeleteAllBlogPostsOfThisBlog": "Radera alla blogginlägg i denna blogg" "DeleteAllBlogPostsOfThisBlog": "Radera alla blogginlägg i denna blogg",
"RequiredPermissionName": "Nödvändigt behörighetsnamn"
} }
} }

3
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json

@ -222,6 +222,7 @@
"ChooseAnActionForBlog": "Blog için bir eylem seçin", "ChooseAnActionForBlog": "Blog için bir eylem seçin",
"AssignBlogPostsToOtherBlog": "Diğer bloglara blog yazıları atayın", "AssignBlogPostsToOtherBlog": "Diğer bloglara blog yazıları atayın",
"SelectAnBlogToAssign": "Atanacak bir blog seçin", "SelectAnBlogToAssign": "Atanacak bir blog seçin",
"DeleteAllBlogPostsOfThisBlog": "Bu blogun tüm blog yazılarını sil" "DeleteAllBlogPostsOfThisBlog": "Bu blogun tüm blog yazılarını sil",
"RequiredPermissionName": "Gerekli izin adı"
} }
} }

3
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/vi.json

@ -231,6 +231,7 @@
"ChooseAnActionForBlog": "Chọn một hành động cho blog", "ChooseAnActionForBlog": "Chọn một hành động cho blog",
"AssignBlogPostsToOtherBlog": "Gán bài đăng trên blog cho blog khác", "AssignBlogPostsToOtherBlog": "Gán bài đăng trên blog cho blog khác",
"SelectAnBlogToAssign": "Chọn một blog để gán", "SelectAnBlogToAssign": "Chọn một blog để gán",
"DeleteAllBlogPostsOfThisBlog": "Xóa tất cả bài đăng trên blog của blog này" "DeleteAllBlogPostsOfThisBlog": "Xóa tất cả bài đăng trên blog của blog này",
"RequiredPermissionName": "Tên quyền cần thiết"
} }
} }

3
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/zh-Hans.json

@ -231,6 +231,7 @@
"ChooseAnActionForBlog": "选择博客的操作", "ChooseAnActionForBlog": "选择博客的操作",
"AssignBlogPostsToOtherBlog": "将博客文章分配给其他博客", "AssignBlogPostsToOtherBlog": "将博客文章分配给其他博客",
"SelectAnBlogToAssign": "选择要分配的博客", "SelectAnBlogToAssign": "选择要分配的博客",
"DeleteAllBlogPostsOfThisBlog": "删除此博客的所有博客文章" "DeleteAllBlogPostsOfThisBlog": "删除此博客的所有博客文章",
"RequiredPermissionName": "所需权限名称"
} }
} }

3
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/zh-Hant.json

@ -231,6 +231,7 @@
"ChooseAnActionForBlog": "選擇部落格的操作", "ChooseAnActionForBlog": "選擇部落格的操作",
"AssignBlogPostsToOtherBlog": "將部落格文章分配給其他部落格", "AssignBlogPostsToOtherBlog": "將部落格文章分配給其他部落格",
"SelectAnBlogToAssign": "選擇要分配的部落格", "SelectAnBlogToAssign": "選擇要分配的部落格",
"DeleteAllBlogPostsOfThisBlog": "刪除此部落格的所有部落格文章" "DeleteAllBlogPostsOfThisBlog": "刪除此部落格的所有部落格文章",
"RequiredPermissionName": "所需權限名稱"
} }
} }

1
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Menus/MenuItemConsts.cs

@ -4,4 +4,5 @@ public static class MenuItemConsts
{ {
public const int MaxDisplayNameLength = 64; public const int MaxDisplayNameLength = 64;
public const int MaxUrlLength = 1024; public const int MaxUrlLength = 1024;
public const int MaxRequiredPermissionNameLength = 128;
} }

6
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItem.cs

@ -40,6 +40,8 @@ public class MenuItem : AuditedAggregateRoot<Guid>, IMultiTenant
public Guid? PageId { get; protected set; } public Guid? PageId { get; protected set; }
public Guid? TenantId { get; protected set; } public Guid? TenantId { get; protected set; }
public string RequiredPermissionName { get; set; }
protected MenuItem() protected MenuItem()
{ {
@ -55,7 +57,8 @@ public class MenuItem : AuditedAggregateRoot<Guid>, IMultiTenant
[CanBeNull] string target = null, [CanBeNull] string target = null,
[CanBeNull] string elementId = null, [CanBeNull] string elementId = null,
[CanBeNull] string cssClass = null, [CanBeNull] string cssClass = null,
[CanBeNull] Guid? tenantId = null) [CanBeNull] Guid? tenantId = null,
[CanBeNull] string requiredPermissionName = null)
: base(id) : base(id)
{ {
SetDisplayName(displayName); SetDisplayName(displayName);
@ -68,6 +71,7 @@ public class MenuItem : AuditedAggregateRoot<Guid>, IMultiTenant
ElementId = elementId; ElementId = elementId;
CssClass = cssClass; CssClass = cssClass;
TenantId = tenantId; TenantId = tenantId;
RequiredPermissionName = requiredPermissionName;
} }
public void SetDisplayName([NotNull] string displayName) public void SetDisplayName([NotNull] string displayName)

2
modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs

@ -261,6 +261,8 @@ public static class CmsKitDbContextModelCreatingExtensions
b.Property(x => x.DisplayName).IsRequired().HasMaxLength(MenuItemConsts.MaxDisplayNameLength); b.Property(x => x.DisplayName).IsRequired().HasMaxLength(MenuItemConsts.MaxDisplayNameLength);
b.Property(x => x.Url).IsRequired().HasMaxLength(MenuItemConsts.MaxUrlLength); b.Property(x => x.Url).IsRequired().HasMaxLength(MenuItemConsts.MaxUrlLength);
b.Property(x => x.RequiredPermissionName).HasMaxLength(MenuItemConsts.MaxRequiredPermissionNameLength);
}); });
} }
else else

12
modules/cms-kit/src/Volo.CmsKit.Public.Web/Menus/CmsKitPublicMenuContributor.cs

@ -1,7 +1,9 @@
using System.Collections.Generic; using System;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.Features; using Volo.Abp.Features;
using Volo.Abp.GlobalFeatures; using Volo.Abp.GlobalFeatures;
using Volo.Abp.UI.Navigation; using Volo.Abp.UI.Navigation;
@ -55,7 +57,7 @@ public class CmsKitPublicMenuContributor : IMenuContributor
private ApplicationMenuItem CreateApplicationMenuItem(MenuItemDto menuItem) private ApplicationMenuItem CreateApplicationMenuItem(MenuItemDto menuItem)
{ {
return new ApplicationMenuItem( var menu = new ApplicationMenuItem(
menuItem.DisplayName, menuItem.DisplayName,
menuItem.DisplayName, menuItem.DisplayName,
menuItem.Url, menuItem.Url,
@ -65,5 +67,11 @@ public class CmsKitPublicMenuContributor : IMenuContributor
menuItem.ElementId, menuItem.ElementId,
menuItem.CssClass menuItem.CssClass
); );
if (!menuItem.RequiredPermissionName.IsNullOrWhiteSpace())
{
menu.RequirePermissions(menuItem.RequiredPermissionName);
}
return menu;
} }
} }

16
modules/docs/.abpstudio/state.json

@ -0,0 +1,16 @@
{
"selectedKubernetesProfile": null,
"solutionRunner": {
"selectedProfile": "Default",
"targetFrameworks": [],
"applicationsStartingWithoutBuild": [],
"applicationBatchStartStates": [
{
"profile": "Default",
"applicationOrFolder": "VoloDocs.Web",
"value": 0
}
],
"folderBatchStartStates": []
}
}

11
modules/docs/Default.abprun.json

@ -0,0 +1,11 @@
{
"metadata": {},
"applications": {
"VoloDocs.Web": {
"type": "dotnet-project",
"path": "app/VoloDocs.Web/VoloDocs.Web.csproj",
"launchUrl": "https://localhost:5001",
"kubernetesService": null
}
}
}

6
modules/docs/Volo.Docs.abpsln

@ -3,5 +3,11 @@
"Volo.Docs": { "Volo.Docs": {
"path": "Volo.Docs.abpmdl" "path": "Volo.Docs.abpmdl"
} }
},
"id": "c1d848e0-0b53-461b-824a-8533ba1fd82b",
"runProfiles": {
"Default": {
"path": "Default.abprun.json"
}
} }
} }

3
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Documents/IDocumentAdminAppService.cs

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services; using Volo.Abp.Application.Services;
using Volo.Docs.Admin.Projects;
namespace Volo.Docs.Admin.Documents namespace Volo.Docs.Admin.Documents
{ {
@ -21,5 +22,7 @@ namespace Volo.Docs.Admin.Documents
Task ReindexAsync(Guid documentId); Task ReindexAsync(Guid documentId);
Task<List<DocumentInfoDto>> GetFilterItemsAsync(); Task<List<DocumentInfoDto>> GetFilterItemsAsync();
Task<List<ProjectWithoutDetailsDto>> GetProjectsAsync();
} }
} }

7
modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentAdminAppService.cs

@ -8,6 +8,7 @@ using Volo.Abp;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services; using Volo.Abp.Application.Services;
using Volo.Abp.Caching; using Volo.Abp.Caching;
using Volo.Docs.Admin.Projects;
using Volo.Docs.Caching; using Volo.Docs.Caching;
using Volo.Docs.Documents; using Volo.Docs.Documents;
using Volo.Docs.Documents.FullSearch.Elastic; using Volo.Docs.Documents.FullSearch.Elastic;
@ -220,6 +221,12 @@ namespace Volo.Docs.Admin.Documents
return ObjectMapper.Map<List<DocumentInfo>, List<DocumentInfoDto>>(documents); return ObjectMapper.Map<List<DocumentInfo>, List<DocumentInfoDto>>(documents);
} }
public virtual async Task<List<ProjectWithoutDetailsDto>> GetProjectsAsync()
{
var projects = await _projectRepository.GetListWithoutDetailsAsync();
return ObjectMapper.Map<List<ProjectWithoutDetails>, List<ProjectWithoutDetailsDto>>(projects);
}
private async Task UpdateDocumentUpdateInfoCache(Document document) private async Task UpdateDocumentUpdateInfoCache(Document document)
{ {

6
modules/docs/src/Volo.Docs.Admin.HttpApi.Client/ClientProxies/Volo/Docs/Admin/DocumentsAdminClientProxy.Generated.cs

@ -9,6 +9,7 @@ using Volo.Abp.Http.Client;
using Volo.Abp.Http.Client.ClientProxying; using Volo.Abp.Http.Client.ClientProxying;
using Volo.Abp.Http.Modeling; using Volo.Abp.Http.Modeling;
using Volo.Docs.Admin.Documents; using Volo.Docs.Admin.Documents;
using Volo.Docs.Admin.Projects;
// ReSharper disable once CheckNamespace // ReSharper disable once CheckNamespace
namespace Volo.Docs.Admin; namespace Volo.Docs.Admin;
@ -69,4 +70,9 @@ public partial class DocumentsAdminClientProxy : ClientProxyBase<IDocumentAdminA
{ {
return await RequestAsync<List<DocumentInfoDto>>(nameof(GetFilterItemsAsync)); return await RequestAsync<List<DocumentInfoDto>>(nameof(GetFilterItemsAsync));
} }
public virtual async Task<List<ProjectWithoutDetailsDto>> GetProjectsAsync()
{
return await RequestAsync<List<ProjectWithoutDetailsDto>>(nameof(GetProjectsAsync));
}
} }

23
modules/docs/src/Volo.Docs.Admin.HttpApi.Client/ClientProxies/docs-admin-generate-proxy.json → modules/docs/src/Volo.Docs.Admin.HttpApi.Client/ClientProxies/Volo/Docs/Admin/docs-admin-generate-proxy.json

@ -125,6 +125,14 @@
"type": "System.Collections.Generic.List<Volo.Docs.Admin.Documents.DocumentInfoDto>", "type": "System.Collections.Generic.List<Volo.Docs.Admin.Documents.DocumentInfoDto>",
"typeSimple": "[Volo.Docs.Admin.Documents.DocumentInfoDto]" "typeSimple": "[Volo.Docs.Admin.Documents.DocumentInfoDto]"
} }
},
{
"name": "GetProjectsAsync",
"parametersOnMethod": [],
"returnValue": {
"type": "System.Collections.Generic.List<Volo.Docs.Admin.Projects.ProjectWithoutDetailsDto>",
"typeSimple": "[Volo.Docs.Admin.Projects.ProjectWithoutDetailsDto]"
}
} }
] ]
} }
@ -558,6 +566,21 @@
}, },
"allowAnonymous": null, "allowAnonymous": null,
"implementFrom": "Volo.Docs.Admin.Documents.IDocumentAdminAppService" "implementFrom": "Volo.Docs.Admin.Documents.IDocumentAdminAppService"
},
"GetProjectsAsync": {
"uniqueName": "GetProjectsAsync",
"name": "GetProjectsAsync",
"httpMethod": "GET",
"url": "api/docs/admin/documents/GetProjects",
"supportedVersions": [],
"parametersOnMethod": [],
"parameters": [],
"returnValue": {
"type": "System.Collections.Generic.List<Volo.Docs.Admin.Projects.ProjectWithoutDetailsDto>",
"typeSimple": "[Volo.Docs.Admin.Projects.ProjectWithoutDetailsDto]"
},
"allowAnonymous": null,
"implementFrom": "Volo.Docs.Admin.Documents.IDocumentAdminAppService"
} }
} }
}, },

14
modules/docs/src/Volo.Docs.Admin.HttpApi.Client/Volo.Docs.Admin.HttpApi.Client.abppkg

@ -1,3 +1,15 @@
{ {
"role": "lib.http-api-client" "role": "lib.http-api-client",
"proxies": {
"csharp": {
"VoloDocs.Web-docs-admin": {
"applicationName": "VoloDocs.Web",
"module": "docs-admin",
"url": "https://localhost:5001",
"folder": "ClientProxies\\Volo\\Docs\\Admin",
"serviceType": "application",
"withoutContracts": true
}
}
}
} }

8
modules/docs/src/Volo.Docs.Admin.HttpApi/Volo/Docs/Admin/DocumentsAdminController.cs

@ -7,6 +7,7 @@ using Volo.Abp;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc;
using Volo.Docs.Admin.Documents; using Volo.Docs.Admin.Documents;
using Volo.Docs.Admin.Projects;
namespace Volo.Docs.Admin namespace Volo.Docs.Admin
{ {
@ -71,5 +72,12 @@ namespace Volo.Docs.Admin
{ {
return await _documentAdminAppService.GetFilterItemsAsync(); return await _documentAdminAppService.GetFilterItemsAsync();
} }
[HttpGet]
[Route("GetProjects")]
public virtual Task<List<ProjectWithoutDetailsDto>> GetProjectsAsync()
{
return _documentAdminAppService.GetProjectsAsync();
}
} }
} }

11
modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/Index.cshtml.cs

@ -2,23 +2,24 @@ using System.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Volo.Docs.Admin.Documents;
using Volo.Docs.Admin.Projects; using Volo.Docs.Admin.Projects;
namespace Volo.Docs.Admin.Pages.Docs.Admin.Documents; namespace Volo.Docs.Admin.Pages.Docs.Admin.Documents;
[Authorize(DocsAdminPermissions.Projects.Default)] [Authorize(DocsAdminPermissions.Documents.Default)]
public class IndexModel : DocsAdminPageModel public class IndexModel : DocsAdminPageModel
{ {
private readonly IProjectAdminAppService _projectAdminAppService; private readonly IDocumentAdminAppService _documentAdminAppService;
public List<ProjectWithoutDetailsDto> Projects { get; set; } public List<ProjectWithoutDetailsDto> Projects { get; set; }
public IndexModel(IProjectAdminAppService projectAdminAppService) public IndexModel(IDocumentAdminAppService documentAdminAppService)
{ {
_projectAdminAppService = projectAdminAppService; _documentAdminAppService = documentAdminAppService;
} }
public virtual async Task<IActionResult> OnGet() public virtual async Task<IActionResult> OnGet()
{ {
Projects = await _projectAdminAppService.GetListWithoutDetailsAsync(); Projects = await _documentAdminAppService.GetProjectsAsync();
return Page(); return Page();
} }
} }

13
modules/docs/src/Volo.Docs.Admin.Web/Volo.Docs.Admin.Web.abppkg

@ -1,3 +1,14 @@
{ {
"role": "lib.mvc" "role": "lib.mvc",
"proxies": {
"Javascript": {
"VoloDocs.Web-docs-admin": {
"applicationName": "VoloDocs.Web",
"module": "docs-admin",
"url": "https://localhost:5001",
"output": "wwwroot/client-proxies",
"serviceType": "application"
}
}
}
} }

7
modules/docs/src/Volo.Docs.Admin.Web/wwwroot/client-proxies/docs-admin-proxy.js

@ -68,6 +68,13 @@
}, ajaxParams)); }, ajaxParams));
}; };
volo.docs.admin.documentsAdmin.getProjects = function(ajaxParams) {
return abp.ajax($.extend(true, {
url: abp.appPath + 'api/docs/admin/documents/GetProjects',
type: 'GET'
}, ajaxParams));
};
})(); })();
// controller volo.docs.admin.projectsAdmin // controller volo.docs.admin.projectsAdmin

Loading…
Cancel
Save