diff --git a/.github/workflows/publish-docs.yml b/.github/workflows/publish-docs.yml new file mode 100644 index 0000000..41db872 --- /dev/null +++ b/.github/workflows/publish-docs.yml @@ -0,0 +1,54 @@ +name: publish to easyabp.io +on: + push: + branches: + - master + - main +jobs: + publish: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + persist-credentials: false + fetch-depth: 0 + + - name: Find and Replace + uses: jacobtomlinson/gha-find-replace@master + with: + find: \]\((/docs/) + replace: "](/guide/${{ github.event.repository.name }}/" + include: docs/**.md + + - name: Pull repo and change files + id: change + run: | + ls + git clone https://github.com/Syrna/easyabp.github.io + cd easyabp.github.io + rm -rf docs/guide/${{ github.event.repository.name }} + rm -rf docs/.vuepress/public/guide/${{ github.event.repository.name }} + mkdir -p docs/guide + mkdir -p docs/.vuepress/public/guide + cp -rf ../docs/ docs/guide/${{ github.event.repository.name }} + cp -rf ../docs/ docs/.vuepress/public/guide/${{ github.event.repository.name }} + git add --all + echo "##[set-output name=diff;]$(git diff --staged)" + + - name: Commit files + if: steps.change.outputs.diff + run: | + ls + cd easyabp.github.io + git config --local user.email "action@github.com" + git config --local user.name "GitHub Action" + git commit -m "Update the docs of ${{ github.event.repository.name }}" -a + + - name: Push changes + if: steps.change.outputs.diff + uses: ad-m/github-push-action@master + with: + github_token: ${{ secrets.EASYABP_IO_ACCESS_TOKEN }} + repository: Syrna/easyabp.github.io + directory: easyabp.github.io diff --git a/README.md b/README.md new file mode 100644 index 0000000..1ed136c --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +/docs/README.md \ No newline at end of file diff --git a/docs/Getting-Start-to-Develop-Modules.md b/docs/Getting-Start-to-Develop-Modules.md new file mode 100644 index 0000000..c2c0c94 --- /dev/null +++ b/docs/Getting-Start-to-Develop-Modules.md @@ -0,0 +1,71 @@ +# Getting Start to Develop Modules +This article will show you how to develop ABP modules that follow the [Module Development Specification](/docs/Module-Development-Specification.md) document. + +## Step 1: Generate a new ABP module + +Use ABP CLI to generate a new ABP module solution with the name prefix `Syrna.`, see: https://docs.abp.io/en/abp/latest/CLI#new. + +## Step 2: Complete the project structure + +1. For each project (except the Web project), create folders according to namespace and move all the original files and folders in, for example: `Syrna/(Abp)/MyModuleName/`. + +2. Search `Syrna.MyModuleName` in **src** folder and replace with ``. + +3. Move all the files in `Syrna.MyModuleName.Domain.Shared/Syrna/MyModuleName/Localization/MyModuleName/` to `Syrna.MyModuleName.Domain.Shared/Syrna/MyModuleName/Localization/`. + +4. Open **MyModuleNameDomainSharedModule.cs**: + * Change `.AddVirtualJson("/Localization/MyModuleName");` to `.AddVirtualJson("/Syrna/MyModuleName/Localization");`. + * Change `options.MapCodeNamespace("MyModuleName", typeof(MyModuleNameResource));` to ``options.MapCodeNamespace("Syrna.MyModuleName", typeof(MyModuleNameResource));``. + +5. Open **Syrna.MyModuleName.Domain.Shared.csproj**: + * Change `` to ``. + * Change `` to ``. + * Delete other unused `` configurations. + +## Step 3: Adjust code of pages + +Tip: Skip this step if you do not need Web project. + +1. **Pages** folder should have only **MyModuleName** subfolder, other folders and files should be in the **MyModuleName** folder. + +2. Open all the **index.js** for entity management pages: + * Change `abp.localization.getResource('MyProjectName');` to `abp.localization.getResource('SyrnaMyProjectName');` + +
+Detail checks + +1. Open all the **index.js** for entity management pages: + * Ensure the param value in `new abp.ModalManager()` is correct. + * Ensure the param value in `abp.auth.isGranted()`is correct. + +2. Open all the **index.cshtml** for entity management pages: + * Ensure the src value in `` and `` is correct. + +3. Open **MyModuleNameMenuContributor.cs**: + * Ensure the url of each menu item is correct. + +
+ +## Step 4: Change and use name constants + +1. Open `MyModuleNamePermissions.cs` and change **GroupName** to `Syrna.MyModuleName`. + +2. Open `MyModuleNameSettings.cs` and change **GroupName** to `Syrna.MyModuleName`. + +3. Open `MyModuleNameMenus.cs` and change **Prefix** to a public property with the value `Syrna.MyModuleName`. + +4. Open `MyModuleNameDbProperties.cs` and change **DbTablePrefix** and **ConnectionStringName** to `SyrnaMyModuleName`. + +5. Open `MyModuleNameRemoteServiceConsts.cs`, change **RemoteServiceName** to `SyrnaMyModuleName` and change **ModuleName** to `syrnaMyModuleName`. + +6. Open `MyModuleNameResource.cs` and replace `[LocalizationResourceName("MyModuleName")]` with `[LocalizationResourceName("SyrnaMyModuleName")]`. + +7. Open `MyModuleNameController.cs` and add **[Area(MyModuleNameServiceConsts.ModuleName)]** attribute. + +## Step 5: Other adjustments + +1. Modify the **common.props** file according to: https://github.com/Syrna/PrivateMessaging/blob/master/common.props. + +2. Unified ABP version number. + 1. Put ABP version number into the **Directory.Build.props** file (see [demo](https://github.com/Syrna/PrivateMessaging/blob/master/Directory.Build.props)). + 2. Replace `` to `` in all the .csproj files of the solution. diff --git a/docs/How-To.md b/docs/How-To.md new file mode 100644 index 0000000..f0ee174 --- /dev/null +++ b/docs/How-To.md @@ -0,0 +1,11 @@ +# "How To" Guides +Todo. + +## Add NuGet Packages +Todo. + +## Add Module Dependencies +Todo. + +## Develop an Syrna Module +See [Getting Start to Develop Modules](/docs/Getting-Start-to-Develop-Modules.md) and [Module Development Specification](/docs/Module-Development-Specification.md#contribute-to-easyabp). diff --git a/docs/Module-Development-Specification.md b/docs/Module-Development-Specification.md new file mode 100644 index 0000000..21c6056 --- /dev/null +++ b/docs/Module-Development-Specification.md @@ -0,0 +1,155 @@ +# Module Development Specification + +This document introduces the module development specification of the Syrna organization. Follow these rules and designs if you want to join and contribute. + +## Basic Knowledges + +Please read through the ABP official document: [Module Development](https://docs.abp.io/en/abp/latest/Module-Development-Basics). + +## Standardization + +We have some standards based on the official document: [Module Development Best Practices & Conventions](https://docs.abp.io/en/abp/latest/Best-Practices/Index). + +### Abstraction + +Try to design an abstract module and provide more implementations. +* Good practice: `Syrna.Abp.Sms`, `Syrna.Abp.Sms.Aws`, `Syrna.Abp.Sms.Azure`. +* Bad practice: `Syrna.Abp.AzureSms`. + +### Module Naming + +Example of module solution name: +* Application module: `Syrna.TodoManagement`. +* Framework module: `Syrna.Abp.Todo` (including the prefix `Abp.`). +> For framework modules, the better name of `XxxxxxModule` class for framework module is `AbpXxxxxxModule`. + +### Domain Services + +* Add a `[UnitOfWork]` attribute to the method that uses repositories. +* Don't use any write-operation method of repositories. That also means you will never add a `[UnitOfWork(IsTransactional = true)]` attribute. + +### Distributed Events + +Todo. + +### Solution Structure + +Read the document [Getting Start to Develop Modules](https://github.com/Syrna/SyrnaGuide/blob/master/docs/Getting-Start-to-Develop-Modules.md) and follow it to adjust your module solution from the startup template. + +### More Virtual Methods + +According to https://github.com/abpframework/abp/issues/3166 + +* Make all public/protected methods virtual (including entities, domain services, application services, page models, view components...) to make them easily overridable. +* Make all private methods of domain & application services "protected virtual" to also be able to override them. + +Generally, please virtualize the above methods, but you should also think about maintainability and consider protecting some methods if necessary. + +### Multi-tenancy + +* Let your entities implement `IMultiTenant` if your module can be designed to support multi-tenancy. +* Make sure permissions are host-side only if they should be hidden from tenant users and vice versa. + +### Menu Items + +Refer to the [MenuContributor demo](https://github.com/Syrna/GiftCardManagement/blob/master/src/Syrna.GiftCardManagement.Web/GiftCardManagementMenuContributor.cs). + +* The name of menu item should have a `CompanyName+ModuleName` prefix, for example: `SyrnaGiftCardManagementGiftCard` is the `GiftCard` using the `SyrnaGiftCardManagement` prefix. +* Create a `CompanyName+ModuleName` menu item as the root of the module and put other menu items into it, hide it if there is nosub menu item inside. + +### Retain a Parameterless Constructor + +Always retain a protected or public parameterless constructor, since serializers need it. + +```c# +public class Book +{ + protected Book() { } +} +``` + +### User Data + +There are two ways to get user data (such as UserName and PhoneNumber): + +1. Get from ABP's identity module. + + * Use `IExternalUserLookupServiceProvider` instead of `IIdentityUserRepository` or `IIdentityUserAppService` in all your code to get user's data. + +2. Create an local extra user entity (like `BlogUser`) and synchronize data from IdentityUser. + + * See ABP document: [Creating a New Entity with Its Own Database Table/Collection](https://docs.abp.io/en/abp/latest/Customizing-Application-Modules-Extending-Entities#creating-a-new-entity-with-its-own-database-table-collection). + * Use `IDistributedEventHandler` instead of `ILocalEventHandler` to synchronize user data. + +### Inherits ExtensibleObject + +Classes with `IHasExtraProperties` should inherit `ExtensibleObject`. + +Otherwise, you should make sure: + 1. The class has `[Serializable]` attribute. + 2. The ExtraProperties property has `[JsonInclude]` attribute. + 3. The ExtraProperties property has a protected setter. + +### Using IClock + +Use `IClock.Now` instead of `DateTime.Now` or `DateTime.UtcNow` in all your code to get current date time. + +### Using ConfigureAwait.Fody + +Refer to the [common.props](https://github.com/Syrna/PrivateMessaging/blob/master/common.props) and the [FodyWeavers.xml](https://github.com/Syrna/PrivateMessaging/blob/master/src/Syrna.PrivateMessaging.Domain/FodyWeavers.xml) demos. + +* Add `Fody` and `ConfigureAwait.Fody` references to module projects. +* Set ``. + +### Don't Use the Auto API Controllers + +The ABP auto API controllers is not friendly to tiered solutions, so please use the [AbpHelper](https://github.com/Syrna/AbpHelper.GUI/blob/master/doc/AbpHelper-CLI/Generate-Controller-Code/Usage.md) to generate controllers manually. + +### Change and Use Name Constants + +* Open `MyModuleNamePermissions.cs` and change **GroupName** to `Syrna.MyModuleName`. +* Open `MyModuleNameSettings.cs` and change **GroupName** to `Syrna.MyModuleName`. +* Open `MyModuleNameRemoteServiceConsts.cs` and change **RemoteServiceName** to `SyrnaMyModuleName`. +* Open `MyModuleNameRemoteServiceConsts.cs` and change **ModuleName** to `syrnaMyModuleName`. +* Open `MyModuleNameResource.cs` and replace `[LocalizationResourceName("MyModuleName")]` with `[LocalizationResourceName("SyrnaMyModuleName")]`. +* Open `MyModuleNameController.cs` and add **[Area(MyModuleNameServiceConsts.ModuleName)]** attribute. + +### Depend on Other Modules + +Todo. + +### Testing + +Todo. + +### common.props + +Follow the steps below: +1. Copy the [common.props](https://github.com/Syrna/FileManagement/blob/master/common.props) demo to your module. +1. Edit `Version`, `Description`, `PackageTags` and `PackageLicenseExpression`. (Don't follow the ABP framework's version.) + +### README.md + +Refer to the [README.md](https://github.com/Syrna/FileManagement/blob/master/README.md) demo. You can customize the structure, but in fact similar formats are more readable. + +### Packaging and Publishing + +Refer to the [GitHub Action demo](https://github.com/Syrna/FileManagement/tree/master/.github/workflows/publish.yml), configure your project publication jobs. The NuGet packages will be automatic built and published after you commit code to the **master** branch with a new module version. + +### Continuous Updating + +* Syrna modules always follow the latest version of ABP framework, so when a new version ABP released, you should upgrade your modules as soon as possible. +* Write down the roadmap in README.md with reference to this [demo](https://github.com/Syrna/FileManagement/blob/master/docs/README.md#road-map) and implement them when you have time and inspiration. +* Create a new GitHub release and announce all the **breaking changes** before publish new version pacakges to NuGet. + +## Contribute to Syrna + +Welcome to contribute to Syrna organization, you can publish new modules or improve existing modules for us. + +### Publish New Modules + +If you want to contribute a new module to Syrna, please create an issue [here](https://github.com/Syrna/SyrnaGuide/issues) to introduce your design and provide the link to your module Github repository. We will evaluate your design and review your code, if the module is well-designed and needed, we will add it to Syrna org. + +### Improve Existing Modules + +If you want to improve an existing module, please create a PR in the module Github repository, which we will review and merge if it is needed. diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..e148f54 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,218 @@ +# Syrna + +[![Discord online](https://badgen.net/discord/online-members/xyg8TrRa27?label=Discord)](https://discord.gg/xyg8TrRa27) + +We help to improve your development experience with the ABP framework. + +## ABP Framework + +[ABP Framework](https://github.com/abpframework/abp) [![GitHub stars](https://img.shields.io/github/stars/abpframework/abp?style=social)](https://www.github.com/abpframework/abp) is an open-source web application framework based on [ASP.NET Core](https://docs.microsoft.com/en-us/aspnet/core). All the products in Syrna organization are designed for the ABP framework. + +## AbpHelper + +AbpHelper provides code generation and more features to help you develop applications and modules with the ABP framework. + +* We provide [AbpHelper.GUI](https://github.com/Syrna/AbpHelper.GUI) [![GitHub stars](https://img.shields.io/github/stars/Syrna/AbpHelper.GUI?style=social)](https://www.github.com/Syrna/AbpHelper.GUI) to help you use it more visually. + +* You can also use [AbpHelper.CLI](https://github.com/Syrna/AbpHelper.CLI) [![GitHub stars](https://img.shields.io/github/stars/Syrna/AbpHelper.CLI?style=social)](https://www.github.com/Syrna/AbpHelper.CLI) directly if you are more used to command line. + +## Modules + +ABP is a modular application framework. We made a lot of useful and interesting modules, you can install them to your solution easily and use them for free. + +### Application Modules + +#### [Forum](https://github.com/Syrna/Forum) [![ABP version](https://img.shields.io/badge/dynamic/xml?style=flat-square&color=yellow&label=abp&query=%2F%2FProject%2FPropertyGroup%2FAbpVersion&url=https%3A%2F%2Fraw.githubusercontent.com%2FSyrna%2FForum%2Fmaster%2FDirectory.Build.props)](https://abp.io) [![NuGet](https://img.shields.io/nuget/v/Syrna.Forum.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Forum.Domain.Shared) [![NuGet Download](https://img.shields.io/nuget/dt/Syrna.Forum.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Forum.Domain.Shared) [![GitHub stars](https://img.shields.io/github/stars/Syrna/Forum?style=social)](https://www.github.com/Syrna/Forum) + +An abp forum application module. + +#### [Cms](https://github.com/Syrna/Cms) ![Backlog](https://img.shields.io/badge/-Backlog-lightgrey?style=flat-square) + +An abp CMS application module. + +#### [EShop](https://github.com/Syrna/EShop) [![ABP version](https://img.shields.io/badge/dynamic/xml?style=flat-square&color=yellow&label=abp&query=%2F%2FProject%2FPropertyGroup%2FAbpVersion&url=https%3A%2F%2Fraw.githubusercontent.com%2FSyrna%2FEShop%2Fmaster%2FDirectory.Build.props)](https://abp.io) [![NuGet](https://img.shields.io/nuget/v/Syrna.EShop.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.EShop.Domain.Shared) [![NuGet Download](https://img.shields.io/nuget/dt/Syrna.EShop.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.EShop.Domain.Shared) [![GitHub stars](https://img.shields.io/github/stars/Syrna/EShop?style=social)](https://www.github.com/Syrna/EShop) + +An abp application module group that provides basic e-shop service. + +#### [PaymentService](https://github.com/Syrna/PaymentService) [![ABP version](https://img.shields.io/badge/dynamic/xml?style=flat-square&color=yellow&label=abp&query=%2F%2FProject%2FPropertyGroup%2FAbpVersion&url=https%3A%2F%2Fraw.githubusercontent.com%2FSyrna%2FPaymentService%2Fmaster%2FDirectory.Build.props)](https://abp.io) [![NuGet](https://img.shields.io/nuget/v/Syrna.PaymentService.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.PaymentService.Domain.Shared) [![NuGet Download](https://img.shields.io/nuget/dt/Syrna.PaymentService.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.PaymentService.Domain.Shared) [![GitHub stars](https://img.shields.io/github/stars/Syrna/PaymentService?style=social)](https://www.github.com/Syrna/PaymentService) + +An abp application module that provides payment service. + +#### [NotificationService](https://github.com/Syrna/NotificationService) [![ABP version](https://img.shields.io/badge/dynamic/xml?style=flat-square&color=yellow&label=abp&query=%2F%2FProject%2FPropertyGroup%2FAbpVersion&url=https%3A%2F%2Fraw.githubusercontent.com%2FSyrna%2FNotificationService%2Fmaster%2FDirectory.Build.props)](https://abp.io) [![NuGet](https://img.shields.io/nuget/v/Syrna.NotificationService.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.NotificationService.Domain.Shared) [![NuGet Download](https://img.shields.io/nuget/dt/Syrna.NotificationService.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.NotificationService.Domain.Shared) [![GitHub stars](https://img.shields.io/github/stars/Syrna/NotificationService?style=social)](https://www.github.com/Syrna/NotificationService) + +An integrated user notification service Abp module, supporting email, SMS, PM, and more other methods. + +#### [BookingService](https://github.com/Syrna/BookingService) [![ABP version](https://img.shields.io/badge/dynamic/xml?style=flat-square&color=yellow&label=abp&query=%2F%2FProject%2FPropertyGroup%2FAbpVersion&url=https%3A%2F%2Fraw.githubusercontent.com%2FSyrna%2FBookingService%2Fmain%2FDirectory.Build.props)](https://abp.io) [![NuGet](https://img.shields.io/nuget/v/Syrna.BookingService.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.BookingService.Domain.Shared) [![NuGet Download](https://img.shields.io/nuget/dt/Syrna.BookingService.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.BookingService.Domain.Shared) [![GitHub stars](https://img.shields.io/github/stars/Syrna/BookingService?style=social)](https://www.github.com/Syrna/BookingService) + +An ABP application module that allows users to book time for people or assets. + +#### [DynamicForm](https://github.com/Syrna/DynamicForm) [![ABP version](https://img.shields.io/badge/dynamic/xml?style=flat-square&color=yellow&label=abp&query=%2F%2FProject%2FPropertyGroup%2FAbpVersion&url=https%3A%2F%2Fraw.githubusercontent.com%2FSyrna%2FDynamicForm%2Fmain%2FDirectory.Build.props)](https://abp.io) [![NuGet](https://img.shields.io/nuget/v/Syrna.DynamicForm.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.DynamicForm.Domain.Shared) [![NuGet Download](https://img.shields.io/nuget/dt/Syrna.DynamicForm.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.DynamicForm.Domain.Shared) [![GitHub stars](https://img.shields.io/github/stars/Syrna/DynamicForm?style=social)](https://www.github.com/Syrna/DynamicForm) + +An ABP module helps users to define and use dynamic forms at runtime. + +#### [ProcessManagement](https://github.com/Syrna/ProcessManagement) [![ABP version](https://img.shields.io/badge/dynamic/xml?style=flat-square&color=yellow&label=abp&query=%2F%2FProject%2FPropertyGroup%2FAbpVersion&url=https%3A%2F%2Fraw.githubusercontent.com%2FSyrna%2FProcessManagement%2Fmain%2FDirectory.Build.props)](https://abp.io) [![NuGet](https://img.shields.io/nuget/v/Syrna.ProcessManagement.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.ProcessManagement.Domain.Shared) [![NuGet Download](https://img.shields.io/nuget/dt/Syrna.ProcessManagement.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.ProcessManagement.Domain.Shared) [![GitHub stars](https://img.shields.io/github/stars/Syrna/ProcessManagement?style=social)](https://www.github.com/Syrna/ProcessManagement) + +An ABP module that helps define and track business processes. + +#### [SharedResources](https://github.com/Syrna/SharedResources) [![ABP version](https://img.shields.io/badge/dynamic/xml?style=flat-square&color=yellow&label=abp&query=%2F%2FProject%2FPropertyGroup%2FAbpVersion&url=https%3A%2F%2Fraw.githubusercontent.com%2FSyrna%2FSharedResources%2Fmaster%2FDirectory.Build.props)](https://abp.io) [![NuGet](https://img.shields.io/nuget/v/Syrna.SharedResources.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.SharedResources.Domain.Shared) [![NuGet Download](https://img.shields.io/nuget/dt/Syrna.SharedResources.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.SharedResources.Domain.Shared) [![GitHub stars](https://img.shields.io/github/stars/Syrna/SharedResources?style=social)](https://www.github.com/Syrna/SharedResources) + +An abp application module that allows users to share resources with each other. + +#### [GiftCardManagement](https://github.com/Syrna/GiftCardManagement) [![ABP version](https://img.shields.io/badge/dynamic/xml?style=flat-square&color=yellow&label=abp&query=%2F%2FProject%2FPropertyGroup%2FAbpVersion&url=https%3A%2F%2Fraw.githubusercontent.com%2FSyrna%2FGiftCardManagement%2Fmaster%2FDirectory.Build.props)](https://abp.io) [![NuGet](https://img.shields.io/nuget/v/Syrna.GiftCardManagement.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.GiftCardManagement.Domain.Shared) [![NuGet Download](https://img.shields.io/nuget/dt/Syrna.GiftCardManagement.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.GiftCardManagement.Domain.Shared) [![GitHub stars](https://img.shields.io/github/stars/Syrna/GiftCardManagement?style=social)](https://www.github.com/Syrna/GiftCardManagement) + +An abp application module where you can create gift cards and your app user can use them to exchange something. + +#### [FileManagement](https://github.com/Syrna/FileManagement) [![ABP version](https://img.shields.io/badge/dynamic/xml?style=flat-square&color=yellow&label=abp&query=%2F%2FProject%2FPropertyGroup%2FAbpVersion&url=https%3A%2F%2Fraw.githubusercontent.com%2FSyrna%2FFileManagement%2Fmaster%2FDirectory.Build.props)](https://abp.io) [![NuGet](https://img.shields.io/nuget/v/Syrna.FileManagement.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.FileManagement.Domain.Shared) [![NuGet Download](https://img.shields.io/nuget/dt/Syrna.FileManagement.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.FileManagement.Domain.Shared) [![GitHub stars](https://img.shields.io/github/stars/Syrna/FileManagement?style=social)](https://www.github.com/Syrna/FileManagement) + +An abp.io application module that allows users to upload and maintain files. + +#### [ReviewManagement](https://github.com/Syrna/ReviewManagement) [![ABP version](https://img.shields.io/badge/dynamic/xml?style=flat-square&color=yellow&label=abp&query=%2F%2FProject%2FPropertyGroup%2FAbpVersion&url=https%3A%2F%2Fraw.githubusercontent.com%2FSyrna%2FReviewManagement%2Fmain%2FDirectory.Build.props)](https://abp.io) [![NuGet](https://img.shields.io/nuget/v/Syrna.ReviewManagement.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.ReviewManagement.Domain.Shared) [![NuGet Download](https://img.shields.io/nuget/dt/Syrna.ReviewManagement.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.ReviewManagement.Domain.Shared) [![GitHub stars](https://img.shields.io/github/stars/Syrna/ReviewManagement?style=social)](https://www.github.com/Syrna/ReviewManagement) + +An abp application module that provides general user review service. For example, a user can review a product he has bought with text, pictures and star-rating. + +#### [PrivateMessaging](https://github.com/Syrna/PrivateMessaging) [![ABP version](https://img.shields.io/badge/dynamic/xml?style=flat-square&color=yellow&label=abp&query=%2F%2FProject%2FPropertyGroup%2FAbpVersion&url=https%3A%2F%2Fraw.githubusercontent.com%2FSyrna%2FPrivateMessaging%2Fmaster%2FDirectory.Build.props)](https://abp.io) [![NuGet](https://img.shields.io/nuget/v/Syrna.PrivateMessaging.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.PrivateMessaging.Domain.Shared) [![NuGet Download](https://img.shields.io/nuget/dt/Syrna.PrivateMessaging.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.PrivateMessaging.Domain.Shared) [![GitHub stars](https://img.shields.io/github/stars/Syrna/PrivateMessaging?style=social)](https://www.github.com/Syrna/PrivateMessaging) + +An abp application module that allows users to send private messages to each other. + +#### [InstantMessaging](https://github.com/Syrna/InstantMessaging) ![Backlog](https://img.shields.io/badge/-Backlog-lightgrey?style=flat-square) + +An abp application module that allows users to chat with each other instantly. + +#### [Elsa](https://github.com/Syrna/Elsa) [![ABP version](https://img.shields.io/badge/dynamic/xml?style=flat-square&color=yellow&label=abp&query=%2F%2FProject%2FPropertyGroup%2FAbpVersion&url=https%3A%2F%2Fraw.githubusercontent.com%2FSyrna%2FElsa%2Fmaster%2FDirectory.Build.props)](https://abp.io) [![NuGet](https://img.shields.io/nuget/v/Syrna.Elsa.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Elsa.Shared) [![NuGet Download](https://img.shields.io/nuget/dt/Syrna.Elsa.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Elsa.Shared) [![GitHub stars](https://img.shields.io/github/stars/Syrna/Elsa?style=social)](https://www.github.com/Syrna/Elsa) + +An Abp module integrates Elsa workflows and provides some preset Elsa activities for the ABP framework. + +#### [GoalManagement](https://github.com/Syrna/GoalManagement) ![Backlog](https://img.shields.io/badge/-Backlog-lightgrey?style=flat-square) + +An abp application module that allows setting goals and rewards users who achieve the goals. + +#### [CacheManagement](https://github.com/Syrna/CacheManagement) [![ABP version](https://img.shields.io/badge/dynamic/xml?style=flat-square&color=yellow&label=abp&query=%2F%2FProject%2FPropertyGroup%2FAbpVersion&url=https%3A%2F%2Fraw.githubusercontent.com%2FSyrna%2FCacheManagement%2Fmaster%2FDirectory.Build.props)](https://abp.io) [![NuGet](https://img.shields.io/nuget/v/Syrna.CacheManagement.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.CacheManagement.Domain.Shared) [![NuGet Download](https://img.shields.io/nuget/dt/Syrna.CacheManagement.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.CacheManagement.Domain.Shared) [![GitHub stars](https://img.shields.io/github/stars/Syrna/CacheManagement?style=social)](https://www.github.com/Syrna/CacheManagement) + +An abp application module helps administrators to manage the app cache data. + +#### [LoggingManagement](https://github.com/Syrna/LoggingManagement) [![ABP version](https://img.shields.io/badge/dynamic/xml?style=flat-square&color=yellow&label=abp&query=%2F%2FProject%2FPropertyGroup%2FAbpVersion&url=https%3A%2F%2Fraw.githubusercontent.com%2FSyrna%2FLoggingManagement%2Fmain%2FDirectory.Build.props)](https://abp.io) [![NuGet](https://img.shields.io/nuget/v/Syrna.LoggingManagement.Application.Contracts.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.LoggingManagement.Application.Contracts) [![NuGet Download](https://img.shields.io/nuget/dt/Syrna.LoggingManagement.Application.Contracts.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.LoggingManagement.Application.Contracts) [![GitHub stars](https://img.shields.io/github/stars/Syrna/LoggingManagement?style=social)](https://www.github.com/Syrna/LoggingManagement) + +An abp application module to help you query and manage your application logs. + +#### [WeChatManagement](https://github.com/Syrna/WeChatManagement) [![ABP version](https://img.shields.io/badge/dynamic/xml?style=flat-square&color=yellow&label=abp&query=%2F%2FProject%2FPropertyGroup%2FAbpVersion&url=https%3A%2F%2Fraw.githubusercontent.com%2FSyrna%2FWeChatManagement%2Fmaster%2FDirectory.Build.props)](https://abp.io) [![NuGet](https://img.shields.io/nuget/v/Syrna.WeChatManagement.Common.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.WeChatManagement.Common.Domain.Shared) [![NuGet Download](https://img.shields.io/nuget/dt/Syrna.WeChatManagement.Common.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.WeChatManagement.Common.Domain.Shared) [![GitHub stars](https://img.shields.io/github/stars/Syrna/WeChatManagement?style=social)](https://www.github.com/Syrna/WeChatManagement) + +基于Syrna.Abp.WeChat模块实现微信登录、微信用户信息存储、微信服务器管理等高级功能的Abp应用模块组 + +#### [UniappManagement](https://github.com/Syrna/UniappManagement) [![ABP version](https://img.shields.io/badge/dynamic/xml?style=flat-square&color=yellow&label=abp&query=%2F%2FProject%2FPropertyGroup%2FAbpVersion&url=https%3A%2F%2Fraw.githubusercontent.com%2FSyrna%2FUniappManagement%2Fmaster%2FDirectory.Build.props)](https://abp.io) [![NuGet](https://img.shields.io/nuget/v/Syrna.UniappManagement.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.UniappManagement.Domain.Shared) [![NuGet Download](https://img.shields.io/nuget/dt/Syrna.UniappManagement.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.UniappManagement.Domain.Shared) [![GitHub stars](https://img.shields.io/github/stars/Syrna/UniappManagement?style=social)](https://www.github.com/Syrna/UniappManagement) + +实现uni-app的应用版本管理、整包更新、热更新、差量热更新等功能的Abp应用模块 + +### Framework Modules + +#### [Abp.LoginUi](https://github.com/Syrna/Abp.LoginUi) [![ABP version](https://img.shields.io/badge/dynamic/xml?style=flat-square&color=yellow&label=abp&query=%2F%2FProject%2FPropertyGroup%2FAbpVersion&url=https%3A%2F%2Fraw.githubusercontent.com%2FSyrna%2FAbp.LoginUi%2Fmain%2FDirectory.Build.props)](https://abp.io) [![NuGet](https://img.shields.io/nuget/v/Syrna.Abp.LoginUi.Web.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.LoginUi.Web) [![NuGet Download](https://img.shields.io/nuget/dt/Syrna.Abp.LoginUi.Web.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.LoginUi.Web) [![GitHub stars](https://img.shields.io/github/stars/Syrna/Abp.LoginUi?style=social)](https://www.github.com/Syrna/Abp.LoginUi) + +An ABP module that provides enhanced login pages. + +#### [Abp.GraphQL](https://github.com/Syrna/Abp.GraphQL) [![ABP version](https://img.shields.io/badge/dynamic/xml?style=flat-square&color=yellow&label=abp&query=%2F%2FProject%2FPropertyGroup%2FAbpVersion&url=https%3A%2F%2Fraw.githubusercontent.com%2FSyrna%2FAbp.GraphQL%2Fmain%2FDirectory.Build.props)](https://abp.io) [![NuGet](https://img.shields.io/nuget/v/Syrna.Abp.GraphQL.Provider.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.GraphQL.Provider.Shared) [![NuGet Download](https://img.shields.io/nuget/dt/Syrna.Abp.GraphQL.Provider.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.GraphQL.Provider.Shared) [![GitHub stars](https://img.shields.io/github/stars/Syrna/Abp.GraphQL?style=social)](https://www.github.com/Syrna/Abp.GraphQL) + +An ABP module that allows using application services by GraphQL. It also accepted custom schemes and types you defined. + +#### [Abp.RelatedDtoLoader](https://github.com/Syrna/Abp.RelatedDtoLoader) [![ABP version](https://img.shields.io/badge/dynamic/xml?style=flat-square&color=yellow&label=abp&query=%2F%2FProject%2FPropertyGroup%2FAbpVersion&url=https%3A%2F%2Fraw.githubusercontent.com%2FSyrna%2FAbp.RelatedDtoLoader%2Fmaster%2FDirectory.Build.props)](https://abp.io) [![NuGet](https://img.shields.io/nuget/v/Syrna.Abp.RelatedDtoLoader.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.RelatedDtoLoader) [![NuGet Download](https://img.shields.io/nuget/dt/Syrna.Abp.RelatedDtoLoader.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.RelatedDtoLoader) [![GitHub stars](https://img.shields.io/github/stars/Syrna/Abp.RelatedDtoLoader?style=social)](https://www.github.com/Syrna/Abp.RelatedDtoLoader) + +An Abp module that help you automatically load related DTO (like ProductDto in OrderDto) under DDD. + +#### [Abp.AspNetCoreRateLimit](https://github.com/Syrna/Abp.AspNetCoreRateLimit) [![ABP version](https://img.shields.io/badge/dynamic/xml?style=flat-square&color=yellow&label=abp&query=%2F%2FProject%2FPropertyGroup%2FAbpVersion&url=https%3A%2F%2Fraw.githubusercontent.com%2FSyrna%2FAbp.AspNetCoreRateLimit%2Fmaster%2FDirectory.Build.props)](https://abp.io) [![NuGet](https://img.shields.io/nuget/v/Syrna.Abp.AspNetCoreRateLimit.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.AspNetCoreRateLimit) [![NuGet Download](https://img.shields.io/nuget/dt/Syrna.Abp.AspNetCoreRateLimit.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.AspNetCoreRateLimit) [![GitHub stars](https://img.shields.io/github/stars/Syrna/Abp.AspNetCoreRateLimit?style=social)](https://www.github.com/Syrna/Abp.AspNetCoreRateLimit) + +An Abp module helps you control how often your service is used. + +#### [Abp.Cqrs](https://github.com/Syrna/Abp.Cqrs) ![Backlog](https://img.shields.io/badge/-Backlog-lightgrey?style=flat-square) + +An Abp module to implement CQRS. + +#### [Abp.VerificationCode](https://github.com/Syrna/Abp.VerificationCode) [![ABP version](https://img.shields.io/badge/dynamic/xml?style=flat-square&color=yellow&label=abp&query=%2F%2FProject%2FPropertyGroup%2FAbpVersion&url=https%3A%2F%2Fraw.githubusercontent.com%2FSyrna%2FAbp.VerificationCode%2Fmaster%2FDirectory.Build.props)](https://abp.io) [![NuGet](https://img.shields.io/nuget/v/Syrna.Abp.VerificationCode.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.VerificationCode) [![NuGet Download](https://img.shields.io/nuget/dt/Syrna.Abp.VerificationCode.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.VerificationCode) [![GitHub stars](https://img.shields.io/github/stars/Syrna/Abp.VerificationCode?style=social)](https://www.github.com/Syrna/Abp.VerificationCode) + +An ABP module to generate and verify verification codes. + +#### [Abp.TagHelperPlus](https://github.com/Syrna/Abp.TagHelperPlus) [![ABP version](https://img.shields.io/badge/dynamic/xml?style=flat-square&color=yellow&label=abp&query=%2F%2FProject%2FPropertyGroup%2FAbpVersion&url=https%3A%2F%2Fraw.githubusercontent.com%2FSyrna%2FAbp.TagHelperPlus%2Fmaster%2FDirectory.Build.props)](https://abp.io) [![NuGet](https://img.shields.io/nuget/v/Syrna.Abp.TagHelperPlus.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.TagHelperPlus) [![NuGet Download](https://img.shields.io/nuget/dt/Syrna.Abp.TagHelperPlus.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.TagHelperPlus) [![GitHub stars](https://img.shields.io/github/stars/Syrna/Abp.TagHelperPlus?style=social)](https://www.github.com/Syrna/Abp.TagHelperPlus) + +An Abp MVC UI tag-helper enhancement module to enhance ABP built-in tag-helpers and provide new tag-helpers such as rich text editor, advanced selector, and more. + +#### [Abp.DataDictionary](https://github.com/Syrna/Abp.DataDictionary) [![ABP version](https://img.shields.io/badge/dynamic/xml?style=flat-square&color=yellow&label=abp&query=%2F%2FProject%2FPropertyGroup%2FAbpVersion&url=https%3A%2F%2Fraw.githubusercontent.com%2FSyrna%2FAbp.DataDictionary%2Fmaster%2FDirectory.Build.props)](https://abp.io) [![NuGet](https://img.shields.io/nuget/v/Syrna.Abp.DataDictionary.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.DataDictionary.Domain.Shared) [![NuGet Download](https://img.shields.io/nuget/dt/Syrna.Abp.DataDictionary.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.DataDictionary.Domain.Shared) [![GitHub stars](https://img.shields.io/github/stars/Syrna/Abp.DataDictionary?style=social)](https://www.github.com/Syrna/Abp.DataDictionary) + +Abp data dictionary module. + +#### [Abp.Elasticsearch](https://github.com/Syrna/Abp.Elasticsearch) ![Backlog](https://img.shields.io/badge/-Backlog-lightgrey?style=flat-square) + +Abp Elasticsearch module. + +#### [Abp.SettingUi](https://github.com/Syrna/Abp.SettingUi) [![ABP version](https://img.shields.io/badge/dynamic/xml?style=flat-square&color=yellow&label=abp&query=%2F%2FProject%2FPropertyGroup%2FAbpVersion&url=https%3A%2F%2Fraw.githubusercontent.com%2FSyrna%2FAbp.SettingUi%2Fmaster%2FDirectory.Build.props)](https://abp.io) [![NuGet](https://img.shields.io/nuget/v/Syrna.Abp.SettingUi.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.SettingUi.Domain.Shared) [![NuGet Download](https://img.shields.io/nuget/dt/Syrna.Abp.SettingUi.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.SettingUi.Domain.Shared) [![GitHub stars](https://img.shields.io/github/stars/Syrna/Abp.SettingUi?style=social)](https://www.github.com/Syrna/Abp.SettingUi) + +An ABP module used to manage ABP settings. + +#### [Abp.EventBus.Boxes.Dtm](https://github.com/Syrna/Abp.EventBus.Boxes.Dtm) [![ABP version](https://img.shields.io/badge/dynamic/xml?style=flat-square&color=yellow&label=abp&query=%2F%2FProject%2FPropertyGroup%2FAbpVersion&url=https%3A%2F%2Fraw.githubusercontent.com%2FSyrna%2FAbp.EventBus.Boxes.Dtm%2Fmain%2FDirectory.Build.props)](https://abp.io) [![NuGet](https://img.shields.io/nuget/v/Syrna.Abp.EventBus.Boxes.Dtm.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.EventBus.Boxes.Dtm) [![NuGet Download](https://img.shields.io/nuget/dt/Syrna.Abp.EventBus.Boxes.Dtm.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.EventBus.Boxes.Dtm) [![GitHub stars](https://img.shields.io/github/stars/Syrna/Abp.EventBus.Boxes.Dtm?style=social)](https://www.github.com/Syrna/Abp.EventBus.Boxes.Dtm) + +The DTM implementation module of ABP distributed event boxes. + +#### [Abp.EventBus.CAP](https://github.com/Syrna/Abp.EventBus.CAP) [![ABP version](https://img.shields.io/badge/dynamic/xml?style=flat-square&color=yellow&label=abp&query=%2F%2FProject%2FPropertyGroup%2FAbpVersion&url=https%3A%2F%2Fraw.githubusercontent.com%2FSyrna%2FAbp.EventBus.CAP%2Fmaster%2FDirectory.Build.props)](https://abp.io) [![CAP version](https://img.shields.io/badge/dynamic/xml?style=flat-square&color=yellow&label=cap&query=%2F%2FProject%2FPropertyGroup%2FCapPackageVersion&url=https%3A%2F%2Fraw.githubusercontent.com%2FSyrna%2FAbp.EventBus.CAP%2Fmaster%2FDirectory.Build.props)](https://cap.dotnetcore.xyz) [![NuGet](https://img.shields.io/nuget/v/Syrna.Abp.EventBus.CAP.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.EventBus.CAP) [![NuGet Download](https://img.shields.io/nuget/dt/Syrna.Abp.EventBus.CAP.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.EventBus.CAP) [![GitHub stars](https://img.shields.io/github/stars/Syrna/Abp.EventBus.CAP?style=social)](https://www.github.com/Syrna/Abp.EventBus.CAP) + +ABP vNext framework CAP EventBus module. + +#### [Abp.EntityUi](https://github.com/Syrna/Abp.EntityUi) [![ABP version](https://img.shields.io/badge/dynamic/xml?style=flat-square&color=yellow&label=abp&query=%2F%2FProject%2FPropertyGroup%2FAbpVersion&url=https%3A%2F%2Fraw.githubusercontent.com%2FSyrna%2FAbp.EntityUi%2Fmaster%2FDirectory.Build.props)](https://abp.io) [![NuGet](https://img.shields.io/nuget/v/Syrna.Abp.EntityUi.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.EntityUi.Domain.Shared) [![NuGet Download](https://img.shields.io/nuget/dt/Syrna.Abp.EntityUi.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.EntityUi.Domain.Shared) [![GitHub stars](https://img.shields.io/github/stars/Syrna/Abp.EntityUi?style=social)](https://www.github.com/Syrna/Abp.EntityUi) + +An abp module that dynamically generates management UI for entities in runtime. + +#### [Abp.DynamicQuery](https://github.com/Syrna/Abp.DynamicQuery) [![ABP version](https://img.shields.io/badge/dynamic/xml?style=flat-square&color=yellow&label=abp&query=%2F%2FProject%2FPropertyGroup%2FAbpVersion&url=https%3A%2F%2Fraw.githubusercontent.com%2FSyrna%2FAbp.DynamicQuery%2Fmaster%2FDirectory.Build.props)](https://abp.io) [![NuGet](https://img.shields.io/nuget/v/Syrna.Abp.DynamicQuery.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.DynamicQuery.Domain.Shared) [![NuGet Download](https://img.shields.io/nuget/dt/Syrna.Abp.DynamicQuery.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.DynamicQuery.Domain.Shared) [![GitHub stars](https://img.shields.io/github/stars/Syrna/Abp.DynamicQuery?style=social)](https://www.github.com/Syrna/Abp.DynamicQuery) + +An ABP module helps you quickly implement dynamic queries. + +#### [Abp.DynamicEntity](https://github.com/Syrna/Abp.DynamicEntity) [![ABP version](https://img.shields.io/badge/dynamic/xml?style=flat-square&color=yellow&label=abp&query=%2F%2FProject%2FPropertyGroup%2FAbpVersion&url=https%3A%2F%2Fraw.githubusercontent.com%2FSyrna%2FAbp.DynamicEntity%2Fmaster%2FDirectory.Build.props)](https://abp.io) [![NuGet](https://img.shields.io/nuget/v/Syrna.Abp.DynamicEntity.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.DynamicEntity.Domain.Shared) [![NuGet Download](https://img.shields.io/nuget/dt/Syrna.Abp.DynamicEntity.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.DynamicEntity.Domain.Shared) [![GitHub stars](https://img.shields.io/github/stars/Syrna/Abp.DynamicEntity?style=social)](https://www.github.com/Syrna/Abp.DynamicEntity) + +An ABP module that can dynamically create entities at runtime and perform CRUD operations like normal entities. + + +#### [Abp.DynamicMenu](https://github.com/Syrna/Abp.DynamicMenu) [![ABP version](https://img.shields.io/badge/dynamic/xml?style=flat-square&color=yellow&label=abp&query=%2F%2FProject%2FPropertyGroup%2FAbpVersion&url=https%3A%2F%2Fraw.githubusercontent.com%2FSyrna%2FAbp.DynamicMenu%2Fmaster%2FDirectory.Build.props)](https://abp.io) [![NuGet](https://img.shields.io/nuget/v/Syrna.Abp.DynamicMenu.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.DynamicMenu.Domain.Shared) [![NuGet Download](https://img.shields.io/nuget/dt/Syrna.Abp.DynamicMenu.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.DynamicMenu.Domain.Shared) [![GitHub stars](https://img.shields.io/github/stars/Syrna/Abp.DynamicMenu?style=social)](https://www.github.com/Syrna/Abp.DynamicMenu) + +An abp module that dynamically creates menu items for ABP UI projects in runtime. + +#### [Abp.DynamicPermission](https://github.com/Syrna/Abp.DynamicPermission) [![ABP version](https://img.shields.io/badge/dynamic/xml?style=flat-square&color=yellow&label=abp&query=%2F%2FProject%2FPropertyGroup%2FAbpVersion&url=https%3A%2F%2Fraw.githubusercontent.com%2FSyrna%2FAbp.DynamicPermission%2Fmaster%2FDirectory.Build.props)](https://abp.io) [![NuGet](https://img.shields.io/nuget/v/Syrna.Abp.DynamicPermission.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.DynamicPermission.Domain.Shared) [![NuGet Download](https://img.shields.io/nuget/dt/Syrna.Abp.DynamicPermission.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.DynamicPermission.Domain.Shared) [![GitHub stars](https://img.shields.io/github/stars/Syrna/Abp.DynamicPermission?style=social)](https://www.github.com/Syrna/Abp.DynamicPermission) + +An ABP module that allows you to define and grant dynamic permissions in runtime. + +#### [Abp.Trees](https://github.com/Syrna/Abp.Trees) [![ABP version](https://img.shields.io/badge/dynamic/xml?style=flat-square&color=yellow&label=abp&query=%2F%2FProject%2FPropertyGroup%2FAbpVersion&url=https%3A%2F%2Fraw.githubusercontent.com%2FSyrna%2FAbp.Trees%2Fmaster%2FDirectory.Build.props)](https://abp.io) [![NuGet](https://img.shields.io/nuget/v/Syrna.Abp.Trees.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.Trees.Domain.Shared) [![NuGet Download](https://img.shields.io/nuget/dt/Syrna.Abp.Trees.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.Trees.Domain.Shared) [![GitHub stars](https://img.shields.io/github/stars/Syrna/Abp.Trees?style=social)](https://www.github.com/Syrna/Abp.Trees) + +An abp module that provides standard tree structure entity implement. + +#### [Abp.Sms.TencentCloud](https://github.com/Syrna/Abp.Sms.TencentCloud) [![ABP version](https://img.shields.io/badge/dynamic/xml?style=flat-square&color=yellow&label=abp&query=%2F%2FProject%2FPropertyGroup%2FAbpVersion&url=https%3A%2F%2Fraw.githubusercontent.com%2FSyrna%2FAbp.Sms.TencentCloud%2Fmaster%2FDirectory.Build.props)](https://abp.io) [![NuGet](https://img.shields.io/nuget/v/Syrna.Abp.Sms.TencentCloud.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.Sms.TencentCloud) [![NuGet Download](https://img.shields.io/nuget/dt/Syrna.Abp.Sms.TencentCloud.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.Sms.TencentCloud) [![GitHub stars](https://img.shields.io/github/stars/Syrna/Abp.Sms.TencentCloud?style=social)](https://www.github.com/Syrna/Abp.Sms.TencentCloud) + +Abp TencentCloud SMS module. + +#### [Abp.BlobStoring.TencentCloud](https://github.com/Syrna/Abp.BlobStoring.TencentCloud) [![ABP version](https://img.shields.io/badge/dynamic/xml?style=flat-square&color=yellow&label=abp&query=%2F%2FProject%2FPropertyGroup%2FAbpVersion&url=https%3A%2F%2Fraw.githubusercontent.com%2FSyrna%2FAbp.BlobStoring.TencentCloud%2Fmaster%2FDirectory.Build.props)](https://abp.io) [![NuGet](https://img.shields.io/nuget/v/Syrna.Abp.BlobStoring.TencentCloud.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.BlobStoring.TencentCloud) [![NuGet Download](https://img.shields.io/nuget/dt/Syrna.Abp.BlobStoring.TencentCloud.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.BlobStoring.TencentCloud) [![GitHub stars](https://img.shields.io/github/stars/Syrna/Abp.BlobStoring.TencentCloud?style=social)](https://www.github.com/Syrna/Abp.BlobStoring.TencentCloud) + +TencentCloud implementation of Abp BLOB Storing. + +#### [Abp.PhoneNumberLogin](https://github.com/Syrna/Abp.PhoneNumberLogin) [![ABP version](https://img.shields.io/badge/dynamic/xml?style=flat-square&color=yellow&label=abp&query=%2F%2FProject%2FPropertyGroup%2FAbpVersion&url=https%3A%2F%2Fraw.githubusercontent.com%2FSyrna%2FAbp.PhoneNumberLogin%2Fmain%2FDirectory.Build.props)](https://abp.io) [![NuGet](https://img.shields.io/nuget/v/Syrna.Abp.PhoneNumberLogin.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.PhoneNumberLogin.Domain.Shared) [![NuGet Download](https://img.shields.io/nuget/dt/Syrna.Abp.PhoneNumberLogin.Domain.Shared.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.PhoneNumberLogin.Domain.Shared) [![GitHub stars](https://img.shields.io/github/stars/Syrna/Abp.PhoneNumberLogin?style=social)](https://www.github.com/Syrna/Abp.PhoneNumberLogin) + +An abp module to avoid duplicate user phone numbers being confirmed and providing phone number confirmation and phone number login features and more. + +#### [Abp.WeChat](https://github.com/Syrna/Abp.WeChat) [![ABP version](https://img.shields.io/badge/dynamic/xml?style=flat-square&color=yellow&label=abp&query=%2F%2FProject%2FPropertyGroup%2FAbpVersion&url=https%3A%2F%2Fraw.githubusercontent.com%2FSyrna%2FAbp.WeChat%2Fmaster%2FDirectory.Build.props)](https://abp.io) [![NuGet](https://img.shields.io/nuget/v/Syrna.Abp.WeChat.Common.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.WeChat.Common) [![NuGet Download](https://img.shields.io/nuget/dt/Syrna.Abp.WeChat.Common.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.WeChat.Common) [![GitHub stars](https://img.shields.io/github/stars/Syrna/Abp.WeChat?style=social)](https://www.github.com/Syrna/Abp.WeChat) + +Abp 微信 SDK 模块,包含对微信小程序、公众号、企业微信、开放平台、第三方平台等相关接口封装 + +#### [Abp.TencentCloud](https://github.com/Syrna/Abp.TencentCloud) [![ABP version](https://img.shields.io/badge/dynamic/xml?style=flat-square&color=yellow&label=abp&query=%2F%2FProject%2FPropertyGroup%2FAbpVersion&url=https%3A%2F%2Fraw.githubusercontent.com%2FSyrna%2FAbp.TencentCloud%2Fmaster%2FDirectory.Build.props)](https://abp.io) [![NuGet](https://img.shields.io/nuget/v/Syrna.Abp.TencentCloud.Common.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.TencentCloud.Common) [![NuGet Download](https://img.shields.io/nuget/dt/Syrna.Abp.TencentCloud.Common.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.TencentCloud.Common) [![GitHub stars](https://img.shields.io/github/stars/Syrna/Abp.TencentCloud?style=social)](https://www.github.com/Syrna/Abp.TencentCloud) + +专门为 ABP vNext 封装的腾讯云 SDK 模块 + +#### [Abp.Aliyun](https://github.com/Syrna/Abp.Aliyun) [![ABP version](https://img.shields.io/badge/dynamic/xml?style=flat-square&color=yellow&label=abp&query=%2F%2FProject%2FPropertyGroup%2FAbpVersion&url=https%3A%2F%2Fraw.githubusercontent.com%2FSyrna%2FAbp.Aliyun%2Fmaster%2FDirectory.Build.props)](https://abp.io) [![NuGet](https://img.shields.io/nuget/v/Syrna.Abp.Aliyun.Common.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.Aliyun.Common) [![NuGet Download](https://img.shields.io/nuget/dt/Syrna.Abp.Aliyun.Common.svg?style=flat-square)](https://www.nuget.org/packages/Syrna.Abp.Aliyun.Common) [![GitHub stars](https://img.shields.io/github/stars/Syrna/Abp.Aliyun?style=social)](https://www.github.com/Syrna/Abp.Aliyun) + +专门为 ABP vNext 封装的阿里云 SDK 模块 + +### UI Theme Modules + +Empty. + +## Applications + +ABP application startup template or installer with pre-built modules. + +### [EasyMall](https://github.com/Syrna/EasyMall) ![Backlog](https://img.shields.io/badge/-Backlog-lightgrey?style=flat-square) + +Quickly build an e-commerce application based on Syrna.EShop. + +## How To + +See ["How To" Guides](/docs/How-To.md).