Browse Source

Merge pull request #21733 from abpframework/cms-menu-permission

Add permissions for dynamic menu items
pull/21776/head
liangshiwei 1 year ago
committed by GitHub
parent
commit
931f381d84
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  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

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<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 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 Guid? PageId { get; set; }
public string RequiredPermissionName { 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.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.Data;
using Volo.Abp.Features;
using Volo.Abp.GlobalFeatures;
@ -23,15 +25,18 @@ public class MenuItemAdminAppService : CmsKitAdminAppServiceBase, IMenuItemAdmin
protected MenuItemManager MenuManager { get; }
protected IMenuItemRepository MenuItemRepository { get; }
protected IPageRepository PageRepository { get; }
protected IPermissionDefinitionManager PermissionDefinitionManager { get; }
public MenuItemAdminAppService(
MenuItemManager menuManager,
IMenuItemRepository menuRepository,
IPageRepository pageRepository)
IPageRepository pageRepository,
IPermissionDefinitionManager permissionDefinitionManager)
{
MenuManager = menuManager;
MenuItemRepository = menuRepository;
PageRepository = pageRepository;
PermissionDefinitionManager = permissionDefinitionManager;
}
public virtual async Task<ListResultDto<MenuItemDto>> GetListAsync()
@ -70,7 +75,8 @@ public class MenuItemAdminAppService : CmsKitAdminAppServiceBase, IMenuItemAdmin
input.Target,
input.ElementId,
input.CssClass,
CurrentTenant.Id
CurrentTenant.Id,
input.RequiredPermissionName
);
if (input.PageId.HasValue)
@ -103,6 +109,7 @@ public class MenuItemAdminAppService : CmsKitAdminAppServiceBase, IMenuItemAdmin
menuItem.Target = input.Target;
menuItem.ElementId = input.ElementId;
menuItem.CssClass = input.CssClass;
menuItem.RequiredPermissionName = input.RequiredPermissionName;
menuItem.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
input.MapExtraPropertiesTo(menuItem);
await MenuItemRepository.UpdateAsync(menuItem);
@ -138,4 +145,21 @@ public class MenuItemAdminAppService : CmsKitAdminAppServiceBase, IMenuItemAdmin
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 }
});
}
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",
"type": "System.Guid?",
"typeSimple": "string?",
"isOptional": false,
"isOptional": true,
"defaultValue": null
}
],
@ -2167,6 +2167,23 @@
"type": "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,
"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);
}
[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.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.Icon"/>
<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 AutoMapper;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.Features;
using Volo.Abp.GlobalFeatures;
using Volo.Abp.ObjectExtending;
@ -32,7 +33,6 @@ public class CreateModalModel : CmsKitAdminPageModel
public virtual async Task OnGetAsync(Guid? parentId)
{
ViewModel.ParentId = parentId;
IsPageFeatureEnabled = GlobalFeatureManager.Instance.IsEnabled<PagesFeature>()
&& await FeatureChecker.IsEnabledAsync(CmsKitFeatures.PageEnable);
}
@ -72,6 +72,8 @@ public class CreateModalModel : CmsKitAdminPageModel
public string ElementId { 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"/>
<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.Icon"/>
<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.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Threading.Tasks;
using AutoMapper;
@ -28,6 +29,8 @@ public class UpdateModalModel : CmsKitAdminPageModel
public Guid Id { get; set; }
public bool IsPageFeatureEnabled { get; set; }
public IReadOnlyList<PermissionLookupDto> Permissions { get; set; }
public UpdateModalModel(IMenuItemAdminAppService menuAdminAppService, IFeatureChecker featureChecker)
{
@ -39,7 +42,7 @@ public class UpdateModalModel : CmsKitAdminPageModel
public async Task OnGetAsync()
{
var menuItemDto = await MenuAdminAppService.GetAsync(Id);
Permissions = (await MenuAdminAppService.GetPermissionLookupAsync(new PermissionLookupInputDto())).Items;
IsPageFeatureEnabled = GlobalFeatureManager.Instance.IsEnabled<PagesFeature>()
&& await FeatureChecker.IsEnabledAsync(CmsKitFeatures.PageEnable);
@ -76,6 +79,8 @@ public class UpdateModalModel : CmsKitAdminPageModel
public Guid? PageId { get; set; }
public string? PageTitle { get; set; }
public string RequiredPermissionName { get; set; }
[HiddenInput]
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 $displayName = $('#ViewModel_DisplayName');
var $menuItemForm = $('#menu-item-form');
var $selectRequiredPermission = $('#requiredPermissionName');
$pageId.on('change', function (params) {
$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) {
$('[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 $displayName = $('#ViewModel_DisplayName');
var $menuItemForm = $('#menu-item-form');
var $selectRequiredPermission = $('#requiredPermissionName');
$pageId.on('change', function (params) {
$url.prop('disabled', $pageId.val());
@ -21,6 +22,52 @@ $(function () {
$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) {
$('[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 Guid? PageId { get; set; }
public string RequiredPermissionName { 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": "اختر إجراءً للمدونة",
"AssignBlogPostsToOtherBlog": "تعيين مشاركات المدونة إلى مدونة أخرى",
"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",
"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",
"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",
"AssignBlogPostsToOtherBlog": "Blogbeiträge einem anderen Blog zuweisen",
"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",
"AssignBlogPostsToOtherBlog": "Blogbeiträge einem anderen Blog zuweisen",
"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": "Επιλέξτε μια ενέργεια για το ιστολόγιο",
"AssignBlogPostsToOtherBlog": "Ανάθεση αναρτήσεων ιστολογίου σε άλλο ιστολόγιο",
"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",
"AssignBlogPostsToOtherBlog": "Assign blog posts to another blog",
"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",
"AssignBlogPostsToOtherBlog": "Assign blog posts to another blog",
"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",
"AssignBlogPostsToOtherBlog": "Asignar publicaciones de blog a otro 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": "یک عمل برای وبلاگ انتخاب کنید",
"AssignBlogPostsToOtherBlog": "پست های وبلاگ را به وبلاگ دیگری اختصاص دهید",
"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",
"AssignBlogPostsToOtherBlog": "Määritä blogiviestit toiseen blogiin",
"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",
"AssignBlogPostsToOtherBlog": "Attribuer des articles de blog à un autre blog",
"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": "ब्लॉग के लिए कोई कार्रवाई चुनें",
"AssignBlogPostsToOtherBlog": "अन्य ब्लॉग को ब्लॉग पोस्ट असाइन करें",
"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",
"AssignBlogPostsToOtherBlog": "Dodijelite postove na blogu drugom blogu",
"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",
"AssignBlogPostsToOtherBlog": "Blogbejegyzések hozzárendelése egy másik bloghoz",
"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",
"AssignBlogPostsToOtherBlog": "Úthluta bloggfærslum til annars bloggs",
"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",
"AssignBlogPostsToOtherBlog": "Assegna i post del blog ad un altro 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",
"AssignBlogPostsToOtherBlog": "Wijs blogberichten toe aan een andere blog",
"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",
"AssignBlogPostsToOtherBlog": "Przypisz posty na blogu do innego bloga",
"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",
"AssignBlogPostsToOtherBlog": "Atribuir postagens de blog a outro blog",
"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",
"AssignBlogPostsToOtherBlog": "Atribuiţi postările de blog la alt 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": "Выберите действие для блога",
"AssignBlogPostsToOtherBlog": "Назначить сообщения в блоге другому блогу",
"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",
"AssignBlogPostsToOtherBlog": "Priradiť blogové príspevky k inému blogu",
"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",
"AssignBlogPostsToOtherBlog": "Dodeli objave v blogu drugemu blogu",
"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",
"AssignBlogPostsToOtherBlog": "Tilldela blogginlägg till en annan blogg",
"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",
"AssignBlogPostsToOtherBlog": "Diğer bloglara blog yazıları atayın",
"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",
"AssignBlogPostsToOtherBlog": "Gán bài đăng trên blog cho blog khác",
"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": "选择博客的操作",
"AssignBlogPostsToOtherBlog": "将博客文章分配给其他博客",
"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": "選擇部落格的操作",
"AssignBlogPostsToOtherBlog": "將部落格文章分配給其他部落格",
"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 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? TenantId { get; protected set; }
public string RequiredPermissionName { get; set; }
protected MenuItem()
{
@ -55,7 +57,8 @@ public class MenuItem : AuditedAggregateRoot<Guid>, IMultiTenant
[CanBeNull] string target = null,
[CanBeNull] string elementId = null,
[CanBeNull] string cssClass = null,
[CanBeNull] Guid? tenantId = null)
[CanBeNull] Guid? tenantId = null,
[CanBeNull] string requiredPermissionName = null)
: base(id)
{
SetDisplayName(displayName);
@ -68,6 +71,7 @@ public class MenuItem : AuditedAggregateRoot<Guid>, IMultiTenant
ElementId = elementId;
CssClass = cssClass;
TenantId = tenantId;
RequiredPermissionName = requiredPermissionName;
}
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.Url).IsRequired().HasMaxLength(MenuItemConsts.MaxUrlLength);
b.Property(x => x.RequiredPermissionName).HasMaxLength(MenuItemConsts.MaxRequiredPermissionNameLength);
});
}
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.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.Features;
using Volo.Abp.GlobalFeatures;
using Volo.Abp.UI.Navigation;
@ -55,7 +57,7 @@ public class CmsKitPublicMenuContributor : IMenuContributor
private ApplicationMenuItem CreateApplicationMenuItem(MenuItemDto menuItem)
{
return new ApplicationMenuItem(
var menu = new ApplicationMenuItem(
menuItem.DisplayName,
menuItem.DisplayName,
menuItem.Url,
@ -65,5 +67,11 @@ public class CmsKitPublicMenuContributor : IMenuContributor
menuItem.ElementId,
menuItem.CssClass
);
if (!menuItem.RequiredPermissionName.IsNullOrWhiteSpace())
{
menu.RequirePermissions(menuItem.RequiredPermissionName);
}
return menu;
}
}

Loading…
Cancel
Save