Browse Source

Add permissions for dynamic menu items

pull/21733/head
liangshiwei 2 years ago
parent
commit
8cc343e366
  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. 71
      modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Blogs/BlogPostPublicClientProxy.Generated.cs
  9. 7
      modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Blogs/BlogPostPublicClientProxy.cs
  10. 55
      modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Comments/CommentPublicClientProxy.Generated.cs
  11. 7
      modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Comments/CommentPublicClientProxy.cs
  12. 29
      modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/GlobalResources/GlobalResourcePublicClientProxy.Generated.cs
  13. 7
      modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/GlobalResources/GlobalResourcePublicClientProxy.cs
  14. 37
      modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/MarkedItems/MarkedItemPublicClientProxy.Generated.cs
  15. 7
      modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/MarkedItems/MarkedItemPublicClientProxy.cs
  16. 25
      modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Menus/MenuItemPublicClientProxy.Generated.cs
  17. 7
      modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Menus/MenuItemPublicClientProxy.cs
  18. 41
      modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Pages/PagesPublicClientProxy.Generated.cs
  19. 7
      modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Pages/PagesPublicClientProxy.cs
  20. 47
      modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Ratings/RatingPublicClientProxy.Generated.cs
  21. 7
      modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Ratings/RatingPublicClientProxy.cs
  22. 48
      modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Reactions/ReactionPublicClientProxy.Generated.cs
  23. 7
      modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Reactions/ReactionPublicClientProxy.cs
  24. 37
      modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Tags/TagPublicClientProxy.Generated.cs
  25. 7
      modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Tags/TagPublicClientProxy.cs
  26. 2083
      modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/cms-kit-generate-proxy.json
  27. 7
      modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Menus/MenuItemAdminController.cs
  28. 13
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml
  29. 4
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml.cs
  30. 19
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml
  31. 7
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml.cs
  32. 2
      modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuItemDto.cs
  33. 3
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json
  34. 1
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Menus/MenuItemConsts.cs
  35. 6
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItem.cs
  36. 2
      modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs
  37. 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 Task<ListResultDto<PermissionLookupDto>> GetPermissionLookupAsync(PermissionLookupInputDto inputDto)
{
return RequestAsync<ListResultDto<PermissionLookupDto>>(nameof(GetPermissionLookupAsync), new ClientProxyRequestTypeValue
{
{ typeof(PermissionLookupInputDto), inputDto }
});
}
}

71
modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Blogs/BlogPostPublicClientProxy.Generated.cs

@ -0,0 +1,71 @@
// This file is automatically generated by ABP framework to use MVC Controllers from CSharp
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Http.Client;
using Volo.Abp.Http.Client.ClientProxying;
using Volo.Abp.Http.Modeling;
using Volo.CmsKit.Contents;
using Volo.CmsKit.Public.Blogs;
using Volo.CmsKit.Users;
// ReSharper disable once CheckNamespace
namespace Volo.CmsKit.Public.Blogs;
[Dependency(ReplaceServices = true)]
[ExposeServices(typeof(IBlogPostPublicAppService), typeof(BlogPostPublicClientProxy))]
public partial class BlogPostPublicClientProxy : ClientProxyBase<IBlogPostPublicAppService>, IBlogPostPublicAppService
{
public virtual async Task<BlogPostCommonDto> GetAsync(string blogSlug, string blogPostSlug)
{
return await RequestAsync<BlogPostCommonDto>(nameof(GetAsync), new ClientProxyRequestTypeValue
{
{ typeof(string), blogSlug },
{ typeof(string), blogPostSlug }
});
}
public virtual async Task<PagedResultDto<BlogPostCommonDto>> GetListAsync(string blogSlug, BlogPostGetListInput input)
{
return await RequestAsync<PagedResultDto<BlogPostCommonDto>>(nameof(GetListAsync), new ClientProxyRequestTypeValue
{
{ typeof(string), blogSlug },
{ typeof(BlogPostGetListInput), input }
});
}
public virtual async Task<PagedResultDto<CmsUserDto>> GetAuthorsHasBlogPostsAsync(BlogPostFilteredPagedAndSortedResultRequestDto input)
{
return await RequestAsync<PagedResultDto<CmsUserDto>>(nameof(GetAuthorsHasBlogPostsAsync), new ClientProxyRequestTypeValue
{
{ typeof(BlogPostFilteredPagedAndSortedResultRequestDto), input }
});
}
public virtual async Task<CmsUserDto> GetAuthorHasBlogPostAsync(Guid id)
{
return await RequestAsync<CmsUserDto>(nameof(GetAuthorHasBlogPostAsync), new ClientProxyRequestTypeValue
{
{ typeof(Guid), id }
});
}
public virtual async Task DeleteAsync(Guid id)
{
await RequestAsync(nameof(DeleteAsync), new ClientProxyRequestTypeValue
{
{ typeof(Guid), id }
});
}
public virtual async Task<string> GetTagNameAsync(Guid tagId)
{
return await RequestAsync<string>(nameof(GetTagNameAsync), new ClientProxyRequestTypeValue
{
{ typeof(Guid), tagId }
});
}
}

7
modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Blogs/BlogPostPublicClientProxy.cs

@ -0,0 +1,7 @@
// This file is part of BlogPostPublicClientProxy, you can customize it here
// ReSharper disable once CheckNamespace
namespace Volo.CmsKit.Public.Blogs;
public partial class BlogPostPublicClientProxy
{
}

55
modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Comments/CommentPublicClientProxy.Generated.cs

@ -0,0 +1,55 @@
// This file is automatically generated by ABP framework to use MVC Controllers from CSharp
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Http.Client;
using Volo.Abp.Http.Client.ClientProxying;
using Volo.Abp.Http.Modeling;
using Volo.CmsKit.Public.Comments;
// ReSharper disable once CheckNamespace
namespace Volo.CmsKit.Public.Comments;
[Dependency(ReplaceServices = true)]
[ExposeServices(typeof(ICommentPublicAppService), typeof(CommentPublicClientProxy))]
public partial class CommentPublicClientProxy : ClientProxyBase<ICommentPublicAppService>, ICommentPublicAppService
{
public virtual async Task<ListResultDto<CommentWithDetailsDto>> GetListAsync(string entityType, string entityId)
{
return await RequestAsync<ListResultDto<CommentWithDetailsDto>>(nameof(GetListAsync), new ClientProxyRequestTypeValue
{
{ typeof(string), entityType },
{ typeof(string), entityId }
});
}
public virtual async Task<CommentDto> CreateAsync(string entityType, string entityId, CreateCommentInput input)
{
return await RequestAsync<CommentDto>(nameof(CreateAsync), new ClientProxyRequestTypeValue
{
{ typeof(string), entityType },
{ typeof(string), entityId },
{ typeof(CreateCommentInput), input }
});
}
public virtual async Task<CommentDto> UpdateAsync(Guid id, UpdateCommentInput input)
{
return await RequestAsync<CommentDto>(nameof(UpdateAsync), new ClientProxyRequestTypeValue
{
{ typeof(Guid), id },
{ typeof(UpdateCommentInput), input }
});
}
public virtual async Task DeleteAsync(Guid id)
{
await RequestAsync(nameof(DeleteAsync), new ClientProxyRequestTypeValue
{
{ typeof(Guid), id }
});
}
}

7
modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Comments/CommentPublicClientProxy.cs

@ -0,0 +1,7 @@
// This file is part of CommentPublicClientProxy, you can customize it here
// ReSharper disable once CheckNamespace
namespace Volo.CmsKit.Public.Comments;
public partial class CommentPublicClientProxy
{
}

29
modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/GlobalResources/GlobalResourcePublicClientProxy.Generated.cs

@ -0,0 +1,29 @@
// This file is automatically generated by ABP framework to use MVC Controllers from CSharp
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Http.Client;
using Volo.Abp.Http.Client.ClientProxying;
using Volo.Abp.Http.Modeling;
using Volo.CmsKit.Public.GlobalResources;
// ReSharper disable once CheckNamespace
namespace Volo.CmsKit.Public.GlobalResources;
[Dependency(ReplaceServices = true)]
[ExposeServices(typeof(IGlobalResourcePublicAppService), typeof(GlobalResourcePublicClientProxy))]
public partial class GlobalResourcePublicClientProxy : ClientProxyBase<IGlobalResourcePublicAppService>, IGlobalResourcePublicAppService
{
public virtual async Task<GlobalResourceDto> GetGlobalScriptAsync()
{
return await RequestAsync<GlobalResourceDto>(nameof(GetGlobalScriptAsync));
}
public virtual async Task<GlobalResourceDto> GetGlobalStyleAsync()
{
return await RequestAsync<GlobalResourceDto>(nameof(GetGlobalStyleAsync));
}
}

7
modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/GlobalResources/GlobalResourcePublicClientProxy.cs

@ -0,0 +1,7 @@
// This file is part of GlobalResourcePublicClientProxy, you can customize it here
// ReSharper disable once CheckNamespace
namespace Volo.CmsKit.Public.GlobalResources;
public partial class GlobalResourcePublicClientProxy
{
}

37
modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/MarkedItems/MarkedItemPublicClientProxy.Generated.cs

@ -0,0 +1,37 @@
// This file is automatically generated by ABP framework to use MVC Controllers from CSharp
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Http.Client;
using Volo.Abp.Http.Client.ClientProxying;
using Volo.Abp.Http.Modeling;
using Volo.CmsKit.Public.MarkedItems;
// ReSharper disable once CheckNamespace
namespace Volo.CmsKit.Public.MarkedItems;
[Dependency(ReplaceServices = true)]
[ExposeServices(typeof(IMarkedItemPublicAppService), typeof(MarkedItemPublicClientProxy))]
public partial class MarkedItemPublicClientProxy : ClientProxyBase<IMarkedItemPublicAppService>, IMarkedItemPublicAppService
{
public virtual async Task<MarkedItemWithToggleDto> GetForUserAsync(string entityType, string entityId)
{
return await RequestAsync<MarkedItemWithToggleDto>(nameof(GetForUserAsync), new ClientProxyRequestTypeValue
{
{ typeof(string), entityType },
{ typeof(string), entityId }
});
}
public virtual async Task<bool> ToggleAsync(string entityType, string entityId)
{
return await RequestAsync<bool>(nameof(ToggleAsync), new ClientProxyRequestTypeValue
{
{ typeof(string), entityType },
{ typeof(string), entityId }
});
}
}

7
modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/MarkedItems/MarkedItemPublicClientProxy.cs

@ -0,0 +1,7 @@
// This file is part of MarkedItemPublicClientProxy, you can customize it here
// ReSharper disable once CheckNamespace
namespace Volo.CmsKit.Public.MarkedItems;
public partial class MarkedItemPublicClientProxy
{
}

25
modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Menus/MenuItemPublicClientProxy.Generated.cs

@ -0,0 +1,25 @@
// This file is automatically generated by ABP framework to use MVC Controllers from CSharp
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Http.Client;
using Volo.Abp.Http.Client.ClientProxying;
using Volo.Abp.Http.Modeling;
using Volo.CmsKit.Menus;
using Volo.CmsKit.Public.Menus;
// ReSharper disable once CheckNamespace
namespace Volo.CmsKit.Public.Menus;
[Dependency(ReplaceServices = true)]
[ExposeServices(typeof(IMenuItemPublicAppService), typeof(MenuItemPublicClientProxy))]
public partial class MenuItemPublicClientProxy : ClientProxyBase<IMenuItemPublicAppService>, IMenuItemPublicAppService
{
public virtual async Task<List<MenuItemDto>> GetListAsync()
{
return await RequestAsync<List<MenuItemDto>>(nameof(GetListAsync));
}
}

7
modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Menus/MenuItemPublicClientProxy.cs

@ -0,0 +1,7 @@
// This file is part of MenuItemPublicClientProxy, you can customize it here
// ReSharper disable once CheckNamespace
namespace Volo.CmsKit.Public.Menus;
public partial class MenuItemPublicClientProxy
{
}

41
modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Pages/PagesPublicClientProxy.Generated.cs

@ -0,0 +1,41 @@
// This file is automatically generated by ABP framework to use MVC Controllers from CSharp
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Http.Client;
using Volo.Abp.Http.Client.ClientProxying;
using Volo.Abp.Http.Modeling;
using Volo.CmsKit.Contents;
using Volo.CmsKit.Public.Pages;
// ReSharper disable once CheckNamespace
namespace Volo.CmsKit.Public.Pages;
[Dependency(ReplaceServices = true)]
[ExposeServices(typeof(IPagePublicAppService), typeof(PagesPublicClientProxy))]
public partial class PagesPublicClientProxy : ClientProxyBase<IPagePublicAppService>, IPagePublicAppService
{
public virtual async Task<PageDto> FindBySlugAsync(string slug)
{
return await RequestAsync<PageDto>(nameof(FindBySlugAsync), new ClientProxyRequestTypeValue
{
{ typeof(string), slug }
});
}
public virtual async Task<PageDto> FindDefaultHomePageAsync()
{
return await RequestAsync<PageDto>(nameof(FindDefaultHomePageAsync));
}
public virtual async Task<bool> DoesSlugExistAsync(string slug)
{
return await RequestAsync<bool>(nameof(DoesSlugExistAsync), new ClientProxyRequestTypeValue
{
{ typeof(string), slug }
});
}
}

7
modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Pages/PagesPublicClientProxy.cs

@ -0,0 +1,7 @@
// This file is part of PagesPublicClientProxy, you can customize it here
// ReSharper disable once CheckNamespace
namespace Volo.CmsKit.Public.Pages;
public partial class PagesPublicClientProxy
{
}

47
modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Ratings/RatingPublicClientProxy.Generated.cs

@ -0,0 +1,47 @@
// This file is automatically generated by ABP framework to use MVC Controllers from CSharp
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Http.Client;
using Volo.Abp.Http.Client.ClientProxying;
using Volo.Abp.Http.Modeling;
using Volo.CmsKit.Public.Ratings;
// ReSharper disable once CheckNamespace
namespace Volo.CmsKit.Public.Ratings;
[Dependency(ReplaceServices = true)]
[ExposeServices(typeof(IRatingPublicAppService), typeof(RatingPublicClientProxy))]
public partial class RatingPublicClientProxy : ClientProxyBase<IRatingPublicAppService>, IRatingPublicAppService
{
public virtual async Task<RatingDto> CreateAsync(string entityType, string entityId, CreateUpdateRatingInput input)
{
return await RequestAsync<RatingDto>(nameof(CreateAsync), new ClientProxyRequestTypeValue
{
{ typeof(string), entityType },
{ typeof(string), entityId },
{ typeof(CreateUpdateRatingInput), input }
});
}
public virtual async Task DeleteAsync(string entityType, string entityId)
{
await RequestAsync(nameof(DeleteAsync), new ClientProxyRequestTypeValue
{
{ typeof(string), entityType },
{ typeof(string), entityId }
});
}
public virtual async Task<List<RatingWithStarCountDto>> GetGroupedStarCountsAsync(string entityType, string entityId)
{
return await RequestAsync<List<RatingWithStarCountDto>>(nameof(GetGroupedStarCountsAsync), new ClientProxyRequestTypeValue
{
{ typeof(string), entityType },
{ typeof(string), entityId }
});
}
}

7
modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Ratings/RatingPublicClientProxy.cs

@ -0,0 +1,7 @@
// This file is part of RatingPublicClientProxy, you can customize it here
// ReSharper disable once CheckNamespace
namespace Volo.CmsKit.Public.Ratings;
public partial class RatingPublicClientProxy
{
}

48
modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Reactions/ReactionPublicClientProxy.Generated.cs

@ -0,0 +1,48 @@
// This file is automatically generated by ABP framework to use MVC Controllers from CSharp
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Http.Client;
using Volo.Abp.Http.Client.ClientProxying;
using Volo.Abp.Http.Modeling;
using Volo.CmsKit.Public.Reactions;
// ReSharper disable once CheckNamespace
namespace Volo.CmsKit.Public.Reactions;
[Dependency(ReplaceServices = true)]
[ExposeServices(typeof(IReactionPublicAppService), typeof(ReactionPublicClientProxy))]
public partial class ReactionPublicClientProxy : ClientProxyBase<IReactionPublicAppService>, IReactionPublicAppService
{
public virtual async Task<ListResultDto<ReactionWithSelectionDto>> GetForSelectionAsync(string entityType, string entityId)
{
return await RequestAsync<ListResultDto<ReactionWithSelectionDto>>(nameof(GetForSelectionAsync), new ClientProxyRequestTypeValue
{
{ typeof(string), entityType },
{ typeof(string), entityId }
});
}
public virtual async Task CreateAsync(string entityType, string entityId, string reaction)
{
await RequestAsync(nameof(CreateAsync), new ClientProxyRequestTypeValue
{
{ typeof(string), entityType },
{ typeof(string), entityId },
{ typeof(string), reaction }
});
}
public virtual async Task DeleteAsync(string entityType, string entityId, string reaction)
{
await RequestAsync(nameof(DeleteAsync), new ClientProxyRequestTypeValue
{
{ typeof(string), entityType },
{ typeof(string), entityId },
{ typeof(string), reaction }
});
}
}

7
modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Reactions/ReactionPublicClientProxy.cs

@ -0,0 +1,7 @@
// This file is part of ReactionPublicClientProxy, you can customize it here
// ReSharper disable once CheckNamespace
namespace Volo.CmsKit.Public.Reactions;
public partial class ReactionPublicClientProxy
{
}

37
modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Tags/TagPublicClientProxy.Generated.cs

@ -0,0 +1,37 @@
// This file is automatically generated by ABP framework to use MVC Controllers from CSharp
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Http.Client;
using Volo.Abp.Http.Client.ClientProxying;
using Volo.Abp.Http.Modeling;
using Volo.CmsKit.Tags;
// ReSharper disable once CheckNamespace
namespace Volo.CmsKit.Public.Tags;
[Dependency(ReplaceServices = true)]
[ExposeServices(typeof(ITagAppService), typeof(TagPublicClientProxy))]
public partial class TagPublicClientProxy : ClientProxyBase<ITagAppService>, ITagAppService
{
public virtual async Task<List<TagDto>> GetAllRelatedTagsAsync(string entityType, string entityId)
{
return await RequestAsync<List<TagDto>>(nameof(GetAllRelatedTagsAsync), new ClientProxyRequestTypeValue
{
{ typeof(string), entityType },
{ typeof(string), entityId }
});
}
public virtual async Task<List<PopularTagDto>> GetPopularTagsAsync(string entityType, int maxCount)
{
return await RequestAsync<List<PopularTagDto>>(nameof(GetPopularTagsAsync), new ClientProxyRequestTypeValue
{
{ typeof(string), entityType },
{ typeof(int), maxCount }
});
}
}

7
modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Tags/TagPublicClientProxy.cs

@ -0,0 +1,7 @@
// This file is part of TagPublicClientProxy, you can customize it here
// ReSharper disable once CheckNamespace
namespace Volo.CmsKit.Public.Tags;
public partial class TagPublicClientProxy
{
}

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

File diff suppressed because it is too large

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

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

@ -66,6 +66,19 @@
<abp-input asp-for="ViewModel.Target"/>
<abp-input asp-for="ViewModel.ElementId"/>
<abp-input asp-for="ViewModel.CssClass"/>
<div class="mb-3">
<label class="form-label" for="requiredPermissionName">@L["RequiredPermissionName"].Value</label>
<select id="requiredPermissionName" asp-for="ViewModel.RequiredPermissionName"
class="auto-complete-select"
data-autocomplete-api-url="/api/cms-kit-admin/menu-items/lookup/permissions"
data-autocomplete-display-property="displayName"
data-autocomplete-value-property="name"
data-autocomplete-items-property="items"
data-autocomplete-filter-param-name="filter"
data-autocomplete-allow-clear="true"
data-autocomplete-parent-selector="#menu-create-modal">
</select>
</div>
@foreach (var propertyInfo in ObjectExtensionManager.Instance.GetProperties<CreateModalModel.MenuItemCreateViewModel>())
{

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

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

@ -69,6 +69,25 @@
<abp-input asp-for="ViewModel.Target"/>
<abp-input asp-for="ViewModel.ElementId"/>
<abp-input asp-for="ViewModel.CssClass"/>
<div class="mb-3">
<label class="form-label" for="requiredPermissionName">@L["RequiredPermissionName"].Value</label>
<select id="requiredPermissionName" asp-for="ViewModel.RequiredPermissionName"
class="auto-complete-select"
data-autocomplete-api-url="/api/cms-kit-admin/menu-items/lookup/permissions"
data-autocomplete-display-property="displayName"
data-autocomplete-value-property="name"
data-autocomplete-items-property="items"
data-autocomplete-filter-param-name="filter"
data-autocomplete-allow-clear="true"
data-autocomplete-parent-selector="#menu-update-modal">
@if(Model.ViewModel.RequiredPermissionName != null)
{
var selectedPermission = Model.Permissions.FirstOrDefault(p => p.Name == Model.ViewModel.RequiredPermissionName);
<option selected value="@Model.ViewModel.RequiredPermissionName">@(selectedPermission == null ? Model.ViewModel.RequiredPermissionName : selectedPermission.DisplayName)</option>
}
</select>
</div>
@foreach (var propertyInfo in ObjectExtensionManager.Instance.GetProperties<UpdateModalModel.MenuItemUpdateViewModel>())
{

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

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/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"
}
}

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