diff --git a/.github/scripts/update_versions.py b/.github/scripts/update_versions.py new file mode 100644 index 0000000000..843e80a3a6 --- /dev/null +++ b/.github/scripts/update_versions.py @@ -0,0 +1,52 @@ +import os +import json +from github import Github + +def update_latest_versions(): + version = os.environ["GITHUB_REF"].split("/")[-1] + + if "rc" in version: + return False + + with open("latest-versions.json", "r") as f: + latest_versions = json.load(f) + + latest_versions[0]["version"] = version + + with open("latest-versions.json", "w") as f: + json.dump(latest_versions, f, indent=2) + + return True + +def create_pr(): + g = Github(os.environ["GITHUB_TOKEN"]) + repo = g.get_repo("abpframework/abp") + + branch_name = f"update-latest-versions-{os.environ['GITHUB_REF'].split('/')[-1]}" + base = repo.get_branch("dev") + repo.create_git_ref(ref=f"refs/heads/{branch_name}", sha=base.commit.sha) + + # Get the current latest-versions.json file and its sha + contents = repo.get_contents("latest-versions.json", ref="dev") + file_sha = contents.sha + + # Update the file in the repo + repo.update_file( + path="latest-versions.json", + message=f"Update latest-versions.json to version {os.environ['GITHUB_REF'].split('/')[-1]}", + content=open("latest-versions.json", "r").read().encode("utf-8"), + sha=file_sha, + branch=branch_name, + ) + + pr = repo.create_pull(title="Update latest-versions.json", + body="Automated PR to update the latest-versions.json file.", + head=branch_name, base="dev") + + pr.create_review_request(reviewers=["ebicoglu", "gizemmutukurt", "skoc10"]) + +if __name__ == "__dev__": + should_create_pr = update_latest_versions() + if should_create_pr: + create_pr() + diff --git a/.github/workflows/update-versions.yml b/.github/workflows/update-versions.yml new file mode 100644 index 0000000000..386b6858b9 --- /dev/null +++ b/.github/workflows/update-versions.yml @@ -0,0 +1,33 @@ +name: Update Latest Versions + +on: + release: + types: + - published + +permissions: + contents: write + pull-requests: write + +jobs: + update-versions: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: 3.x + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install PyGithub + + - name: Update latest-versions.json and create PR + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + python .github/scripts/update_versions.py diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json index 9f4fe44349..4543ac1509 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json @@ -455,8 +455,11 @@ "InterestedLicenseType": "Interested License Type", "MoveWaitList": "Move to wait list", "CommunityLinkTitle": "Open on the community website", - "CommunityLink": "Community Link", + "CommunityLink": "Community link", "ReloadFromSource": "Reload From the Source", - "ReloadFromSourceConfirmationMessage": "This post will be refreshed from \"{0}\". Do you want to continue?" + "ReloadFromSourceConfirmationMessage": "This post will be refreshed from \"{0}\". Do you want to continue?", + "UnitPrice": "Unit Price", + "OverallDiscountAmount": "Overall Discount Amount", + "DiscountAmount": "Discount Amount" } } diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en-GB.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en-GB.json index 442384bd0a..2ad2dc0584 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en-GB.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en-GB.json @@ -26,7 +26,7 @@ "ContributionGuide": "Contribution Guide", "Blog": "Blog", "Commercial": "Commercial", - "MyAccount": "My account", + "MyAccount": "My Account", "Permission:License": "License", "Permission:UserInfo": "User info", "SeeDocuments": "See Documents", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json index 783582d7be..b363220bb4 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json @@ -43,9 +43,9 @@ "ContributionGuide": "Contribution Guide", "Blog": "Blog", "Commercial": "Commercial", - "MyAccount": "My account", + "MyAccount": "My Account", "Permission:License": "License", - "Permission:UserInfo": "Usere info", + "Permission:UserInfo": "User info", "SeeDocuments": "See Documents", "Samples": "Samples", "Framework": "Framework", @@ -210,6 +210,7 @@ "Icon": "Icon", "RecentActivities": "Recent Activities", "SpringCampaign": "Welcome
Spring Sale!", - "SpringCampaign2": "Limited
Time Offer!
" + "SpringCampaign2": "Limited
Time Offer!
", + "AboutUs": "About Us" } } diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hans.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hans.json index af0190dcbb..89f156c473 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hans.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hans.json @@ -208,6 +208,7 @@ "Icon": "图标", "RecentActivities": "最近的活动", "SpringCampaign": "欢迎
春季促销!", - "SpringCampaign2": "限时优惠!
" + "SpringCampaign2": "限时优惠!
", + "AboutUs": "关于我们" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hant.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hant.json index f55f4a7f85..09296689b1 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hant.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hant.json @@ -41,6 +41,7 @@ "TrialLicensePeriodExpireToday": "您的試用許可期將於今天到期。", "PurchaseNow": "現在買!", "WelcomeFallCampaign": "欢迎秋季活动!", - "GiveAwayForNewPurchases": "新购买将赠送应用程序开发课堂培训!" + "GiveAwayForNewPurchases": "新购买将赠送应用程序开发课堂培训!", + "AboutUs": "關於我們" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json index b388a4e71b..fa6c683071 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json @@ -247,7 +247,7 @@ "FastEasy": "Fast & Easy", "AbpSuiteExplanation3": "ABP Suite allows you to easily create CRUD pages. You just need to define your entity and its properties, let the rest to ABP Suite for you! ABP Suite generates all the necessary code for your CRUD page in a few seconds. It supports Angular, MVC and Blazor user interfaces.", "RichOptions": "Rich Options", - "AbpSuiteExplanation4": "ABP Suite supports multiple UI options like Razor Pages and Angular.It also supports multiple databases like MongoDB and all databases supported by EntityFramework Core (MS SQL Server, Oracle, MySql, PostgreSQL and more).", + "AbpSuiteExplanation4": "ABP Suite supports multiple UI options like Razor Pages and Angular.It also supports multiple databases like MongoDB and all databases supported by EntityFramework Core (MS SQL Server, Oracle, MySql, PostgreSQL, and other providers...).", "AbpSuiteExplanation5": "Good thing is that, you don't have to worry about those options. ABP Suite understands your project type and generates the code for your project and places the generated code in correct place in your project.", "SourceCode": "Source Code", "AbpSuiteExplanation6": "ABP Suite generates the source code for you! It doesn't generate magic files to generate the web page. ABP Suite generates the source code for Entity, Repository, Application Service, Code First Migration, JavaScript/TypeScript and CSHTML/HTML and necessary Interfaces as well. ABP Suite also generates the code according to the Best Practices of software development, so you don't have to worry about the generated code's quality.", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json index 24d07c54bf..5fa2120cce 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json @@ -187,6 +187,7 @@ "IConsentToMedium": "I consent to the publication of this post at https://medium.com/volosoft.", "SearchResultsFor": "Search results for \"{0}\"", "SeeMoreVideos": "See more videos", - "DiscordPageTitle": "ABP Discord Community" + "DiscordPageTitle": "ABP Discord Community", + "ViewVideo": "View Video" } } diff --git a/common.props b/common.props index 82232bc214..e034286ee6 100644 --- a/common.props +++ b/common.props @@ -1,7 +1,7 @@ latest - 7.2.0-rc.2 + 7.3.0 $(NoWarn);CS1591;CS0436 https://abp.io/assets/abp_nupkg.png https://abp.io/ diff --git a/docs/cs/CLI.md b/docs/cs/CLI.md index 7782b29a91..f77c3ad969 100644 --- a/docs/cs/CLI.md +++ b/docs/cs/CLI.md @@ -45,9 +45,9 @@ abp new Acme.BookStore * `mvc`: ASP.NET Core MVC. Pro tuto šablonu jsou dostupné dodatečné možnosti: * `--tiered`: Vytvoří stupňovité řešení, kde jsou vrstvy Web a Http API fyzicky odděleny. Pokud není uvedeno, tak vytvoří vrstvené řešení, které je méně složité a vhodné pro většinu scénářů. * `angular`: Angular. Pro tuto šablonu jsou dostupné dodatečné možnosti: - * `--separate-auth-server`: Oddělí identity server aplikaci od API host aplikace. Pokud není uvedeno, bude na straně serveru jediný koncový bod. + * `--separate-auth-server`: Oddělí Auth Server aplikaci od API host aplikace. Pokud není uvedeno, bude na straně serveru jediný koncový bod. * `none`: Bez UI. Pro tuto šablonu jsou dostupné dodatečné možnosti: - * `--separate-auth-server`: Oddělí identity server aplikaci od API host aplikace. Pokud není uvedeno, bude na straně serveru jediný koncový bod. + * `--separate-auth-server`: Oddělí Auth Server aplikaci od API host aplikace. Pokud není uvedeno, bude na straně serveru jediný koncový bod. * `--database-provider` nebo `-d`: Určuje poskytovatele databáze. Výchozí poskytovatel je `ef`. Dostupní poskytovatelé: * `ef`: Entity Framework Core. * `mongodb`: MongoDB. diff --git a/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/abp-framework.png b/docs/en/Blog-Posts/2023-04-03-What-is-ABP-Framework/images/abp-framework.png similarity index 100% rename from docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/abp-framework.png rename to docs/en/Blog-Posts/2023-04-03-What-is-ABP-Framework/images/abp-framework.png diff --git a/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/abp-suite.png b/docs/en/Blog-Posts/2023-04-03-What-is-ABP-Framework/images/abp-suite.png similarity index 100% rename from docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/abp-suite.png rename to docs/en/Blog-Posts/2023-04-03-What-is-ABP-Framework/images/abp-suite.png diff --git a/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/architecture-layers.png b/docs/en/Blog-Posts/2023-04-03-What-is-ABP-Framework/images/architecture-layers.png similarity index 100% rename from docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/architecture-layers.png rename to docs/en/Blog-Posts/2023-04-03-What-is-ABP-Framework/images/architecture-layers.png diff --git a/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/conclusion.png b/docs/en/Blog-Posts/2023-04-03-What-is-ABP-Framework/images/conclusion.png similarity index 100% rename from docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/conclusion.png rename to docs/en/Blog-Posts/2023-04-03-What-is-ABP-Framework/images/conclusion.png diff --git a/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/cover.png b/docs/en/Blog-Posts/2023-04-03-What-is-ABP-Framework/images/cover.png similarity index 100% rename from docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/cover.png rename to docs/en/Blog-Posts/2023-04-03-What-is-ABP-Framework/images/cover.png diff --git a/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/csharp-microservice-framework.png b/docs/en/Blog-Posts/2023-04-03-What-is-ABP-Framework/images/csharp-microservice-framework.png similarity index 100% rename from docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/csharp-microservice-framework.png rename to docs/en/Blog-Posts/2023-04-03-What-is-ABP-Framework/images/csharp-microservice-framework.png diff --git a/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/ddd.png b/docs/en/Blog-Posts/2023-04-03-What-is-ABP-Framework/images/ddd.png similarity index 100% rename from docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/ddd.png rename to docs/en/Blog-Posts/2023-04-03-What-is-ABP-Framework/images/ddd.png diff --git a/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/essential-features.png b/docs/en/Blog-Posts/2023-04-03-What-is-ABP-Framework/images/essential-features.png similarity index 100% rename from docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/essential-features.png rename to docs/en/Blog-Posts/2023-04-03-What-is-ABP-Framework/images/essential-features.png diff --git a/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/essentials.png b/docs/en/Blog-Posts/2023-04-03-What-is-ABP-Framework/images/essentials.png similarity index 100% rename from docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/essentials.png rename to docs/en/Blog-Posts/2023-04-03-What-is-ABP-Framework/images/essentials.png diff --git a/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/modular.png b/docs/en/Blog-Posts/2023-04-03-What-is-ABP-Framework/images/modular.png similarity index 100% rename from docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/modular.png rename to docs/en/Blog-Posts/2023-04-03-What-is-ABP-Framework/images/modular.png diff --git a/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/pre-built-modules.png b/docs/en/Blog-Posts/2023-04-03-What-is-ABP-Framework/images/pre-built-modules.png similarity index 100% rename from docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/pre-built-modules.png rename to docs/en/Blog-Posts/2023-04-03-What-is-ABP-Framework/images/pre-built-modules.png diff --git a/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/the-abp-platform.png b/docs/en/Blog-Posts/2023-04-03-What-is-ABP-Framework/images/the-abp-platform.png similarity index 100% rename from docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/the-abp-platform.png rename to docs/en/Blog-Posts/2023-04-03-What-is-ABP-Framework/images/the-abp-platform.png diff --git a/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/post.md b/docs/en/Blog-Posts/2023-04-03-What-is-ABP-Framework/post.md similarity index 100% rename from docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/post.md rename to docs/en/Blog-Posts/2023-04-03-What-is-ABP-Framework/post.md diff --git a/docs/en/Community-Articles/2023-04-11-Top-10-NET-Core-Libraries-Every-Developer-Should-Know/Top 10 .NET Core Libraries Every Developer Should Know.md b/docs/en/Blog-Posts/2023-04-11-Top-10-NET-Core-Libraries-Every-Developer-Should-Know/Top 10 .NET Core Libraries Every Developer Should Know.md similarity index 89% rename from docs/en/Community-Articles/2023-04-11-Top-10-NET-Core-Libraries-Every-Developer-Should-Know/Top 10 .NET Core Libraries Every Developer Should Know.md rename to docs/en/Blog-Posts/2023-04-11-Top-10-NET-Core-Libraries-Every-Developer-Should-Know/Top 10 .NET Core Libraries Every Developer Should Know.md index 417a5266f7..be037f30c5 100644 --- a/docs/en/Community-Articles/2023-04-11-Top-10-NET-Core-Libraries-Every-Developer-Should-Know/Top 10 .NET Core Libraries Every Developer Should Know.md +++ b/docs/en/Blog-Posts/2023-04-11-Top-10-NET-Core-Libraries-Every-Developer-Should-Know/Top 10 .NET Core Libraries Every Developer Should Know.md @@ -58,3 +58,22 @@ Here you can see them in table with the GitHub stars, GitHub release counts, rec In conclusion, these 10 .NET Core libraries are essential tools for any .NET Core developer. They offer a wide range of functionality, from handling errors to mocking for unit testing and simplifying object mapping. Whether you're working on a large-scale enterprise application or a small project, these libraries can help you build more reliable, efficient, and effective applications. + +--- + + +### What is ABP Framework? +ABP Framework offers an opinionated architecture to build enterprise software solutions with best practices on top of the .NET and the ASP.NET Core platforms. It provides the fundamental infrastructure, production-ready startup templates, modules, themes, tooling, guides and documentation to implement that architecture properly and automate the details and repetitive work as much as possible. + +If you are starting a new ASP.NET Core project, try [abp.io](https://abp.io) now... + + **IT IS FREE AND OPEN-SOURCE!** + +--- + +> Alper Ebicoglu 🧑🏽‍💻 ABP Framework Core Team Member\ +> Follow me for the latest news about .NET and software development:\ +> 📌 [twitter.com/alperebicoglu](https://twitter.com/alperebicoglu)\ +> 📌 [github.com/ebicoglu](https://github.com/ebicoglu)\ +> 📌 [linkedin.com/in/ebicoglu](https://www.linkedin.com/in/ebicoglu)\ +> 📌 [medium.com/@alperonline](https://medium.com/@alperonline) diff --git a/docs/en/Community-Articles/2023-04-11-Top-10-NET-Core-Libraries-Every-Developer-Should-Know/cover1.png b/docs/en/Blog-Posts/2023-04-11-Top-10-NET-Core-Libraries-Every-Developer-Should-Know/cover1.png similarity index 100% rename from docs/en/Community-Articles/2023-04-11-Top-10-NET-Core-Libraries-Every-Developer-Should-Know/cover1.png rename to docs/en/Blog-Posts/2023-04-11-Top-10-NET-Core-Libraries-Every-Developer-Should-Know/cover1.png diff --git a/docs/en/Community-Articles/2023-04-11-Top-10-NET-Core-Libraries-Every-Developer-Should-Know/cover2.png b/docs/en/Blog-Posts/2023-04-11-Top-10-NET-Core-Libraries-Every-Developer-Should-Know/cover2.png similarity index 100% rename from docs/en/Community-Articles/2023-04-11-Top-10-NET-Core-Libraries-Every-Developer-Should-Know/cover2.png rename to docs/en/Blog-Posts/2023-04-11-Top-10-NET-Core-Libraries-Every-Developer-Should-Know/cover2.png diff --git a/docs/en/Community-Articles/2023-04-11-Top-10-NET-Core-Libraries-Every-Developer-Should-Know/essential-10-net-libraries-every-developer-must-know.png b/docs/en/Blog-Posts/2023-04-11-Top-10-NET-Core-Libraries-Every-Developer-Should-Know/essential-10-net-libraries-every-developer-must-know.png similarity index 100% rename from docs/en/Community-Articles/2023-04-11-Top-10-NET-Core-Libraries-Every-Developer-Should-Know/essential-10-net-libraries-every-developer-must-know.png rename to docs/en/Blog-Posts/2023-04-11-Top-10-NET-Core-Libraries-Every-Developer-Should-Know/essential-10-net-libraries-every-developer-must-know.png diff --git a/docs/en/Blog-Posts/2023-04-12 v7_2_Preview/POST.md b/docs/en/Blog-Posts/2023-04-12 v7_2_Preview/POST.md new file mode 100644 index 0000000000..d71628f3b8 --- /dev/null +++ b/docs/en/Blog-Posts/2023-04-12 v7_2_Preview/POST.md @@ -0,0 +1,211 @@ +# ABP.IO Platform 7.2 RC Has Been Released + +Today, we are happy to release the [ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) version **7.2 RC** (Release Candidate). This blog post introduces the new features and important changes in this new version. + +Try this version and provide feedback for a more stable version of ABP v7.2! Thanks to all of you. + +## Get Started with the 7.2 RC + +Follow the steps below to try version 7.2.0 RC today: + +1) **Upgrade** the ABP CLI to version `7.2.0-rc.1` using a command line terminal: + +````bash +dotnet tool update Volo.Abp.Cli -g --version 7.2.0-rc.1 +```` + +**or install** it if you haven't before: + +````bash +dotnet tool install Volo.Abp.Cli -g --version 7.2.0-rc.1 +```` + +2) Create a **new application** with the `--preview` option: + +````bash +abp new BookStore --preview +```` + +See the [ABP CLI documentation](https://docs.abp.io/en/abp/latest/CLI) for all the available options. + +> You can also use the [Get Started](https://abp.io/get-started) page to generate a CLI command to create a new application. + +You can use any IDE that supports .NET 7.x, like [Visual Studio 2022](https://visualstudio.microsoft.com/downloads/). + +## Migration Guides + +There are breaking changes in this version that may affect your application. +Please see the following migration documents, if you are upgrading from v7.1: + +* [ABP Framework 7.1 to 7.2 Migration Guide](https://docs.abp.io/en/abp/7.2/Migration-Guides/Abp-7_2) +* [ABP Commercial 7.1 to 7.2 Migration Guide](https://docs.abp.io/en/commercial/7.2/migration-guides/v7_2) + + +## What's New with ABP Framework 7.2? + +In this section, I will introduce some major features released in this version. Here is a brief list of the titles that will be explained in the next sections: + +* Grouping of Navigation Menu Items +* Introducing the `BlazorWebAssemblyCurrentApplicationConfigurationCacheResetService` +* CMS Kit Comments: Don't Allow External URLs +* Angular UI New Components +* Others + +### Grouping of Navigation Menu Items + +Some applications may need to group their main menus to tidy up their menu structure. For example, you may want to group ABP's menu items, which came from modules in a group named *Admin*. + +In this version, you can allow to define groups and associate menu items with a group. Then your theme can render your menu items within the specified groups. + +**Example:** + +```csharp +private async Task ConfigureMainMenuAsync(MenuConfigurationContext context) +{ + //Creating a new group + context.Menu.AddGroup("Dashboards", l["Dashboards"]); + + //Setting the group name for menu items + context.Menu + .AddItem(new ApplicationMenuItem("Home", l["Menu:Home"], groupName: "Dashboards") + .AddItem(new ApplicationMenuItem("Home", l["Menu:Dashboard"], groupName: "Dashboards"); +} +``` + +> **Note**: Currently, only the [LeptonX Theme](https://leptontheme.com/) renders groups for menu items. See the "LeptonX - Render Groups for Menu Items" section below for a demonstration. + +### Introducing the `BlazorWebAssemblyCurrentApplicationConfigurationCacheResetService` + +In this version, we have introduced the `BlazorWebAssemblyCurrentApplicationConfigurationCacheResetService` service to re-initialize application configurations. This service can be helpful, if you want to reset the application configurations after changing some configurations through your code. For example, you might have changed the values of some settings and might want to be able to get the new settings without the need to refresh the page. For this purpose, the `BlazorWebAssemblyCurrentApplicationConfigurationCacheResetService.ResetAsync()` method can be used to re-initialize the application configurations and cache the updated configurations for further usages. + +> For more information, please see [https://github.com/abpframework/abp/issues/15887](https://github.com/abpframework/abp/issues/15887). + +### CMS Kit Comments: Disallowing External URLs + +CMS Kit provides a [comment system](https://docs.abp.io/en/abp/7.2/Modules/Cms-Kit/Comments) to add the comment feature to any kind of resource, like blog posts for an example. The CMS Kit comment section is good for visitor comments and can improve your interaction with your application users. + +Sometimes, malicious users (or bots) can submit advertisement links into the comment sections. With this version, you can specify *allowed external URLs* for a specific comment section and disallow any other external URLs. You just need to configure the `CmsKitCommentOptions` as follows: + +```csharp +Configure(options => +{ + options.AllowedExternalUrls = new Dictionary> + { + { + "Product", + new List + { + "https://abp.io/" + } + } + }; +}); +``` + +If you don't specify any allowed external URLs for a specific comment section, all external URLs are allowed to be used in comments. For more information, please refer to the [CMS Kit: Comments documentation](https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Comments). + +### New Components for Angular UI + +In this version, we have created some useful UI components for Angular UI, which are `abp-checkbox`, `abp-form-input`, and `abp-card`. Instead of using the related HTML elements and specifying bootstrap classes, from this version on, you can use these components. + +You can see the following examples for the usage of the `abp-card` component: + +```html + + +
...
+
+
+``` + +> See the [Card Component documentation](https://docs.abp.io/en/abp/7.2/UI/Angular/Card-Component) for more information. + +### Others + +* OpenIddict registered custom scopes have been added to the openid-configuration endpoint (`/.well-known/openid-configuration`) automatically. See [#16141](https://github.com/abpframework/abp/issues/16141) for more information. +* Two new tag-helpers have been added to MVC UI, which are `abp-date-picker` and `abp-date-range-picker`. See [#15806](https://github.com/abpframework/abp/pull/15806) for more information. +* Filtering/searching has been improved in the Docs Module and unified under a single *Search* section. See [#15787](https://github.com/abpframework/abp/issues/15787) for more information. + +## What's New with ABP Commercial 7.2? + +We've also worked on [ABP Commercial](https://commercial.abp.io/) to align the features and changes made in the ABP Framework. The following sections introduce a few new features coming with ABP Commercial 7.2. + +### Authority Delegation + +Authority Delegation is a way of delegating the responsibility of the current user to a different user(s) for a limited time. Thus, a user can be switched to the delegated users' account and perform actions on their behalf. + +This version introduces support for the **Authority Delegation** in the [Account Module](https://docs.abp.io/en/commercial/latest/modules/account). You can check the following gif for a demonstration: + +![authority delegation](authority-delegation.gif) + +### Force Password Change at Next Logon + +It's a typical need to force users to change their password after their first successful login. Especially, if you as admin create a new user (*from the Users page of the Identity Pro module*, for example) with an easy initial password or a randomly generated password. The user should change his/her password with a more secure password that only they know. + +In this version, the "Forcing Password Change at Next Logon" feature has been added for this kind of purpose. Now, it's possible to force a user to change their password on the next login. + +The admin only needs to check the *Should change password on next login* option, while creating a new user: + +![force password change](force-password-change.png) + +After the first successful login, a password change page will open and force the user to change their password: + +![password change form](password-change-form.png) + +Then, the user starts using their account with a secure password that only they know. + +### Periodic Password Changes (Password Aging) + +**Password aging** is a mechanism to force users to periodically change their passwords. It allows you to specify a max number of days that a password can be used before it has to be changed. + +![password aging](password-aging.png) + +You can force this behavior in the "Password renewing settings" section of the Settings page as can be seen in the image above. Then, after the specified time has passed, users will have to renew their passwords. + +### LeptonX - Render Groups for Menu Items + +As mentioned in the *Grouping of Navigation Menu Items* section above, the [LeptonX Theme](https://leptontheme.com/) renders groups for menu items: + +![leptonx-group-menu-render](leptonx-group-render.png) + +### Suite: Show Properties on Create/Update/List Pages + +In this version, ABP Suite allows you to choose whether a property is visible/invisible on the create/update modals and list page. It also allows you to set specific properties to *readonly* on the update modals. + +![suite property](suite-property.png) + +## Community News + +### ABP - DOTNET CONF'23 + +![abp-conf](abp-conf.png) + +As the ABP team, we've organized 10+ [online events](https://community.abp.io/events) and gained a good experience with software talks. We are organizing ABP Dotnet Conference 2023, a full-featured software conference, in May. You can visit [https://abp.io/conference](https://abp.io/conference) to see speakers, talks, schedules, and other details. + +**Less than a month left until the event**! Don't forget to take your seat and buy an early bird ticket from [https://kommunity.com/volosoft/events/1st-abp-conference-96db1a54](https://kommunity.com/volosoft/events/1st-abp-conference-96db1a54)! + +### New ABP Community Posts + +There are exciting articles contributed by the ABP community as always. I will highlight some of them here: + +* [What’s New in .NET 8 🧐 ? Discover ALL .NET 8 Features](https://community.abp.io/posts/whats-new-in-.net-8-discover-all-.net-8-features-llcmrdre) by [Alper Ebicoglu](https://twitter.com/alperebicoglu). +* [Converting Create/Edit Modal to Page - Blazor](https://community.abp.io/posts/converting-createedit-modal-to-page-blazor-eexdex8y) by [Enis Necipoglu](https://twitter.com/EnisNecipoglu). +* [Using Dapper with the ABP Framework](https://community.abp.io/posts/using-dapper-with-the-abp-framework-shp74p2l) by [Halil Ibrahim Kalkan](https://twitter.com/hibrahimkalkan). +* [ABP React Template](https://community.abp.io/posts/abp-react-template-33pjmran) by [Anto Subash](https://twitter.com/antosubash). +* [How to Export Data to Excel Files with ASP.NET Core Minimal API](https://community.abp.io/posts/how-to-export-data-to-excel-files-with-asp.net-core-minimal-api-79o45u3s) by [Berkan Sasmaz](https://twitter.com/berkansasmazz). + +Thanks to the ABP Community for all the content they have published. You can also [post your ABP-related (text or video) content](https://community.abp.io/articles/submit) to the ABP Community. + +### New ABP Blog Posts + +There are also some exciting blog posts written by the ABP team. You can see the following list for some of those articles: + +* [ABP Framework: Open Source Web Application Development Framework](https://blog.abp.io/abp/open-source-web-application-development-framework) by [Alper Ebicoglu](https://twitter.com/alperebicoglu). +* [ABP Framework: The Ultimate .NET Web Framework for Rapid Application Development](https://blog.abp.io/abp/ultimate-net-web-framework-for-rapid-application-development) by [Alper Ebicoglu](https://twitter.com/alperebicoglu). +* [Top 10 .NET Core Libraries Every Developer Should Know 🔥](https://blog.abp.io/abp/Top-10-.NET-Core-Libraries-Every-Developer-Should-Know) by [Alper Ebicoglu](https://twitter.com/alperebicoglu) + +## Conclusion + +This version comes with some new features and a lot of enhancements to the existing features. You can see the [Road Map](https://docs.abp.io/en/abp/7.2/Road-Map) documentation to learn about the release schedule and planned features for the next releases. Please try ABP v7.2 RC and provide feedback to help us release a more stable version. + +Thanks for being a part of this community! diff --git a/docs/en/Blog-Posts/2023-04-12 v7_2_Preview/abp-conf.png b/docs/en/Blog-Posts/2023-04-12 v7_2_Preview/abp-conf.png new file mode 100644 index 0000000000..889ddbdc0a Binary files /dev/null and b/docs/en/Blog-Posts/2023-04-12 v7_2_Preview/abp-conf.png differ diff --git a/docs/en/Blog-Posts/2023-04-12 v7_2_Preview/authority-delegation.gif b/docs/en/Blog-Posts/2023-04-12 v7_2_Preview/authority-delegation.gif new file mode 100644 index 0000000000..c09f428798 Binary files /dev/null and b/docs/en/Blog-Posts/2023-04-12 v7_2_Preview/authority-delegation.gif differ diff --git a/docs/en/Blog-Posts/2023-04-12 v7_2_Preview/cover-image.png b/docs/en/Blog-Posts/2023-04-12 v7_2_Preview/cover-image.png new file mode 100644 index 0000000000..59b45f9ec5 Binary files /dev/null and b/docs/en/Blog-Posts/2023-04-12 v7_2_Preview/cover-image.png differ diff --git a/docs/en/Blog-Posts/2023-04-12 v7_2_Preview/force-password-change.png b/docs/en/Blog-Posts/2023-04-12 v7_2_Preview/force-password-change.png new file mode 100644 index 0000000000..c515f0acc3 Binary files /dev/null and b/docs/en/Blog-Posts/2023-04-12 v7_2_Preview/force-password-change.png differ diff --git a/docs/en/Blog-Posts/2023-04-12 v7_2_Preview/leptonx-group-render.png b/docs/en/Blog-Posts/2023-04-12 v7_2_Preview/leptonx-group-render.png new file mode 100644 index 0000000000..51c8ce7531 Binary files /dev/null and b/docs/en/Blog-Posts/2023-04-12 v7_2_Preview/leptonx-group-render.png differ diff --git a/docs/en/Blog-Posts/2023-04-12 v7_2_Preview/password-aging.png b/docs/en/Blog-Posts/2023-04-12 v7_2_Preview/password-aging.png new file mode 100644 index 0000000000..002cdd5cd2 Binary files /dev/null and b/docs/en/Blog-Posts/2023-04-12 v7_2_Preview/password-aging.png differ diff --git a/docs/en/Blog-Posts/2023-04-12 v7_2_Preview/password-change-form.png b/docs/en/Blog-Posts/2023-04-12 v7_2_Preview/password-change-form.png new file mode 100644 index 0000000000..6aa5ab26b7 Binary files /dev/null and b/docs/en/Blog-Posts/2023-04-12 v7_2_Preview/password-change-form.png differ diff --git a/docs/en/Blog-Posts/2023-04-12 v7_2_Preview/suite-property.png b/docs/en/Blog-Posts/2023-04-12 v7_2_Preview/suite-property.png new file mode 100644 index 0000000000..9fd094f93d Binary files /dev/null and b/docs/en/Blog-Posts/2023-04-12 v7_2_Preview/suite-property.png differ diff --git a/docs/en/Blog-Posts/2023-04-17-How-to-Optimize-Your-ASP.NET-Application-for-Improved-Performance/post.md b/docs/en/Blog-Posts/2023-04-17-How-to-Optimize-Your-ASP.NET-Application-for-Improved-Performance/post.md new file mode 100644 index 0000000000..261621933a --- /dev/null +++ b/docs/en/Blog-Posts/2023-04-17-How-to-Optimize-Your-ASP.NET-Application-for-Improved-Performance/post.md @@ -0,0 +1,118 @@ +# 💻 How to Optimize Your ASP.NET Application for Improved Performance 🚀 + +If you want your ASP.NET application to perform well, you need to optimize it for speed, responsiveness, and user experience. Performance optimization is critical for factors like fast page load times, improved response efficiency, and happy users. In this article, I'll provide several tips and tricks to help you optimize performance in ASP.NET Core. + +## 🚀 Use Response Compression in Your ASP.NET Application +You can use ASP.NET Core's built-in response compression middleware to compress the response data and reduce the amount of data that needs to be transferred over the network. To use response compression, add the following code to your application's Startup.cs file: + +```csharp +services.AddResponseCompression(options => +{ + options.EnableForHttps = true; +}); + +app.UseResponseCompression(); +``` + +## 🖼️ Optimize Images in Your ASP.NET Application: + +Images can be a major contributor to page bloat and slow load times. Here are some tips to optimize images: + +🖌️ Use a tool like ImageOptim or Kraken.io to compress and optimize images. + +🖼️ Specify the width and height of images in HTML so the browser can allocate space for them before they load. + +📝 Use alt attributes to provide descriptive text for images, which can improve accessibility and also help with SEO. + +📜 Use lazy loading for images that are below the fold, meaning they're not visible on the initial screen view. You can use libraries like Vanilla LazyLoad to implement lazy loading. + +📱 Use responsive images to serve different image sizes to different devices. This can improve page load times by reducing the size of images that are displayed on smaller devices. + +💻 Example: + +```html + + + + Image + +``` + +```javascript +var lazyLoadInstance = new LazyLoad(); +``` + +## 🧱 Optimize HTML in Your ASP.NET Application: + +The structure and organization of HTML can affect the page speed. Here are some tips to optimize HTML: + +📝 Use the heading tags (h1, h2, h3, etc.) in a logical and sequential order. + +🔩 Use the "defer" attribute for script tags that don't need to be executed immediately. This can improve the page load times by delaying the execution of scripts until after the page has rendered. + +🔩 Use the "async" attribute for script tags that can be executed asynchronously. This can further improve the page load times by allowing scripts to be downloaded and executed simultaneously. + +🧱 Use semantic HTML elements (like nav, section, and article) to provide additional structure and meaning to the page. + +## 🎨 Optimize CSS and JavaScript in Your ASP.NET Application: + +CSS and JavaScript files can be a major contributor to the page load times. Here are some tips to optimize CSS and JavaScript in your ASP.NET application: + +🔨 Minify and concatenate CSS and JavaScript files to reduce their size. + +🔩 Use the "defer" or "async" attributes for script tags to delay or asynchronously load scripts. + +## 🔡 Use system fonts in Your ASP.NET Application: + +Loading custom fonts can be slow and increase page load times. Using system fonts can improve page speed by allowing the browser to use fonts that are already installed on the user's device. + +## 🖼️ Use Placeholders and Progress Indicators in Your ASP.NET Application: + +To improve the perceived performance of your website, you can use placeholders and progress indicators for slow-loading sections of your page. You can use JavaScript to load these sections after the initial page load. + +💻 Example: + +```html + +
+

Loading...

+
+``` + +```javascript +const placeholder = document.querySelector('#placeholder'); + fetch(placeholder.dataset.url) + .then(response => response.text()) + .then(html => placeholder.innerHTML = html); +``` + +## 🔗 Use the Appropriate Link Text and ARIA Labels: + +When using links, use appropriate link texts that accurately describe the content of the linked page. This can improve the accessibility and also help with SEO. + +ARIA labels should also be used to provide additional context for links. This can also improve the accessibility and help with SEO. + +💻 Example: + +```html +Example +Another Example +``` + +## 🌐 Optimize the Third-party Resources in Your ASP.NET Application: + +Third-party resources like social media widgets and advertising scripts can slow down the page load times. Here are some tips to optimize third-party resources: + +🔩 Use asynchronous scripts when possible. + +🔍 Only load third-party resources that are necessary for the page. + +By following these optimization techniques, you can significantly improve the page speed of your ASP.NET Core web application. + +## What is ABP Framework? + +ABP Framework offers an opinionated architecture to build enterprise software solutions with ASP.NET Core best practices on top of the .NET and the ASP.NET Core platforms. It provides the fundamental web application infrastructure, production-ready dotnet startup templates, modules, asp.net core ui themes, tooling, guides and documentation to implement that ASP.NET core architecture properly and automate the details and repetitive work as much as possible. + +If you are starting a new ASP.NET Core project, try [abp.io](https://abp.io/) now... + +**IT IS FREE AND OPEN-SOURCE!** \ No newline at end of file diff --git a/docs/en/CLI-New-Command-Samples.md b/docs/en/CLI-New-Command-Samples.md index 26d098c98e..d2c63cfec2 100644 --- a/docs/en/CLI-New-Command-Samples.md +++ b/docs/en/CLI-New-Command-Samples.md @@ -12,7 +12,7 @@ The following commands are for creating Angular UI projects: abp new Acme.BookStore -u angular --mobile none --database-provider ef -csf ```` -* **Entity Framework Core**, default app template, **separate Identity Server**, creates the project in a new folder: +* **Entity Framework Core**, default app template, **separate Auth Server**, creates the project in a new folder: ```bash abp new Acme.BookStore -t app -u angular -m none --separate-auth-server --database-provider ef -csf @@ -30,7 +30,7 @@ The following commands are for creating Angular UI projects: abp new Acme.BookStore -u angular --database-provider mongodb --output-folder C:\MyProjects\Acme.BookStore ``` -* **MongoDB**, default app template, no mobile app, **separate Identity Server**, creates the project in a new folder: +* **MongoDB**, default app template, no mobile app, **separate Auth Server**, creates the project in a new folder: ```bash abp new Acme.BookStore -t app -u angular -m none --separate-auth-server --database-provider mongodb -csf @@ -83,7 +83,7 @@ The following commands are for creating Blazor projects: abp new Acme.BookStore -t app -u blazor --mobile none ``` -* **Entity Framework Core**, **separate Identity Server**, mobile app included: +* **Entity Framework Core**, **separate Auth Server**, mobile app included: ```bash abp new Acme.BookStore -u blazor --separate-auth-server @@ -105,7 +105,7 @@ The following commands are for creating Blazor projects: abp new Acme.BookStore -t app -u blazor-server --mobile none ``` -* **Entity Framework Core**, **separate Identity Server**, **separate API Host**, mobile app included: +* **Entity Framework Core**, **separate Auth Server**, **separate API Host**, mobile app included: ```bash abp new Acme.BookStore -u blazor-server --tiered @@ -121,7 +121,7 @@ The following commands are for creating Blazor projects: In the default app template, there is always a frontend project. In this option there is no frontend project. It has a `HttpApi.Host` project to serve your HTTP WebAPIs. It's appropriate if you want to create a WebAPI service. -* **Entity Framework Core**, separate Identity Server, creates the project in a new folder: +* **Entity Framework Core**, separate Auth Server, creates the project in a new folder: ```bash abp new Acme.BookStore -u none --separate-auth-server -csf diff --git a/docs/en/CLI.md b/docs/en/CLI.md index 49b5ca830b..22be84f72c 100644 --- a/docs/en/CLI.md +++ b/docs/en/CLI.md @@ -41,6 +41,7 @@ Here, is the list of all available commands before explaining their details: * **`switch-to-preview`**: Switches to the latest preview version of the ABP Framework. * **`switch-to-nightly`**: Switches to the latest [nightly builds](Nightly-Builds.md) of the ABP related packages on a solution. * **`switch-to-stable`**: Switches to the latest stable versions of the ABP related packages on a solution. +* **`switch-to-local`**: Changes NuGet package references on a solution to local project references. * **`translate`**: Simplifies to translate localization files when you have multiple JSON [localization](Localization.md) files in a source control repository. * **`login`**: Authenticates on your computer with your [abp.io](https://abp.io/) username and password. * **`login-info`**: Shows the current user's login information. @@ -113,15 +114,15 @@ For more samples, go to [ABP CLI Create Solution Samples](CLI-New-Command-Sample * `mvc`: ASP.NET Core MVC. There are some additional options for this template: * `--tiered`: Creates a tiered solution where Web and Http API layers are physically separated. If not specified, it creates a layered solution which is less complex and suitable for most scenarios. * `angular`: Angular UI. There are some additional options for this template: - * `--separate-auth-server`: The Identity Server project comes as a separate project and runs at a different endpoint. It separates the Identity Server from the API Host application. If not specified, you will have a single endpoint in the server side. + * `--separate-auth-server`: The Auth Server project comes as a separate project and runs at a different endpoint. It separates the Auth Server from the API Host application. If not specified, you will have a single endpoint in the server side. * `--pwa`: Specifies the project as Progressive Web Application. * `blazor`: Blazor UI. There are some additional options for this template: - * `--separate-auth-server`The Identity Server project comes as a separate project and runs at a different endpoint. It separates the Identity Server from the API Host application. If not specified, you will have a single endpoint in the server side. + * `--separate-auth-server`The Auth Server project comes as a separate project and runs at a different endpoint. It separates the Auth Server from the API Host application. If not specified, you will have a single endpoint in the server side. * `--pwa`: Specifies the project as Progressive Web Application. * `blazor-server`: Blazor Server UI. There are some additional options for this template: - * `--tiered`: The Identity Server and the API Host project comes as separate projects and run at different endpoints. It has 3 startup projects: *HttpApi.Host*, *AuthServer* and *Blazor* and and each runs on different endpoints. If not specified, you will have a single endpoint for your web project. + * `--tiered`: The Auth Server and the API Host project comes as separate projects and run at different endpoints. It has 3 startup projects: *HttpApi.Host*, *AuthServer* and *Blazor* and and each runs on different endpoints. If not specified, you will have a single endpoint for your web project. * `none`: Without UI. No front-end layer will be created. There are some additional options for this template: - * `--separate-auth-server`: The Identity Server project comes as a separate project and runs at a different endpoint. It separates the Identity Server from the API Host application. If not specified, you will have a single endpoint in the server side. + * `--separate-auth-server`: The Auth Server project comes as a separate project and runs at a different endpoint. It separates the Auth Server from the API Host application. If not specified, you will have a single endpoint in the server side. * `--mobile` or `-m`: Specifies the mobile application framework. If not specified, no mobile application will be created. Available options: * `react-native`: React Native. * `maui`: MAUI. This mobile option is only available for ABP Commercial. @@ -453,6 +454,27 @@ abp switch-to-stable [options] * `--solution-directory` or `-sd`: Specifies the directory. The solution should be in that directory or in any of its sub directories. If not specified, default is the current directory. +### switch-to-local + +Changes all NuGet package references to local project references for all the .csproj files in the specified folder (and all its subfolders with any deep). It is not limited to ABP Framework or Module packages. + +Usage: + +````bash +abp switch-to-local [options] +```` +#### Options + +* `--solution` or `-s`: Specifies the solution directory. The solution should be in that directory or in any of its sub directories. If not specified, default is the current directory. + +* `--paths` or `-p`: Specifies the local paths that the projects are inside. You can use `|` character to separate the paths. + +Example: + +````bash +abp switch-to-local --paths "D:\Github\abp|D:\Github\my-repo" +```` + ### translate Simplifies to translate [localization](Localization.md) files when you have multiple JSON [localization](Localization.md) files in a source control repository. diff --git a/docs/en/Community-Articles/2020-08-07-Passwordless-Authentication/POST.md b/docs/en/Community-Articles/2020-08-07-Passwordless-Authentication/POST.md index d14901a2ba..8a34caf2db 100644 --- a/docs/en/Community-Articles/2020-08-07-Passwordless-Authentication/POST.md +++ b/docs/en/Community-Articles/2020-08-07-Passwordless-Authentication/POST.md @@ -241,3 +241,24 @@ That's all! We created a passwordless login with 7 steps. ## Source Code The completed sample is available on [GitHub repository](https://github.com/abpframework/abp-samples/tree/master/PasswordlessAuthentication). + +〰️〰️〰️ + +Happy Coding 🤗 + +--- + +I'm Alper Ebicoglu 🧑🏽‍💻 ABP Framework Core Team Member + +Follow me for the latest news about .NET and software development: + +📌 [twitter.com/alperebicoglu](https://twitter.com/alperebicoglu) + +📌 [github.com/ebicoglu](https://github.com/ebicoglu) + +📌 [linkedin.com/in/ebicoglu](https://www.linkedin.com/in/ebicoglu) + +📌 [medium.com/@alperonline](https://medium.com/@alperonline) + + +--- diff --git a/docs/en/Community-Articles/2022-10-27-Dotnet7-Upgrade/Upgrade-Your-Existing-Projects-to-Dotnet7.md b/docs/en/Community-Articles/2022-10-27-Dotnet7-Upgrade/Upgrade-Your-Existing-Projects-to-Dotnet7.md index 26aa115e3b..ed9e72d043 100644 --- a/docs/en/Community-Articles/2022-10-27-Dotnet7-Upgrade/Upgrade-Your-Existing-Projects-to-Dotnet7.md +++ b/docs/en/Community-Articles/2022-10-27-Dotnet7-Upgrade/Upgrade-Your-Existing-Projects-to-Dotnet7.md @@ -258,8 +258,19 @@ Not all the changes are here, but you can check out the following PR of the .NET * [github.com/abpframework/abp/pull/13626/files](https://github.com/abpframework/abp/pull/13626/files) -... -Happy coding with .NET 7 🤗 +〰️〰️〰️ -... +Happy Coding 🤗 + +--- + +> I'm Alper Ebicoglu 🧑🏽‍💻 ABP Framework Core Team Member +> Follow me for the latest news about .NET and software development: +> 📌 [twitter.com/alperebicoglu](https://twitter.com/alperebicoglu) +> +> 📌 [github.com/ebicoglu](https://github.com/ebicoglu) +> +> 📌 [linkedin.com/in/ebicoglu](https://www.linkedin.com/in/ebicoglu) +> +> 📌 [medium.com/@alperonline](https://medium.com/@alperonline)https://medium.com/@alperonline)\ diff --git a/docs/en/Community-Articles/2023-03-27-What-is-new-in-NET8/post.md b/docs/en/Community-Articles/2023-03-27-What-is-new-in-NET8/post.md index 5ae3ff2ce0..665ad251e3 100644 --- a/docs/en/Community-Articles/2023-03-27-What-is-new-in-NET8/post.md +++ b/docs/en/Community-Articles/2023-03-27-What-is-new-in-NET8/post.md @@ -220,7 +220,17 @@ Become a pioneer and try the new features of .NET 8 now. Adapt it to your project or start a new .NET 8 project. [Claim your copy of .NET 8](https://dotnet.microsoft.com/next) today 🏎️ ! + + 〰️〰️〰️ Happy Coding ⌨️ +--- + +> I'm Alper Ebicoglu 🧑🏽‍💻 ABP Framework Core Team Member +> Follow me for the latest news about .NET and software development: +> 📌 [twitter.com/alperebicoglu](https://twitter.com/alperebicoglu) +> 📌 [github.com/ebicoglu](https://github.com/ebicoglu) +> 📌 [linkedin.com/in/ebicoglu](https://www.linkedin.com/in/ebicoglu) +> 📌 [medium.com/@alperonline](https://medium.com/@alperonline) diff --git a/docs/en/Community-Articles/2023-04-15-Converting-Create-Edit-Modal-To-Page/POST.md b/docs/en/Community-Articles/2023-04-15-Converting-Create-Edit-Modal-To-Page/POST.md new file mode 100644 index 0000000000..a8f1aeadfa --- /dev/null +++ b/docs/en/Community-Articles/2023-04-15-Converting-Create-Edit-Modal-To-Page/POST.md @@ -0,0 +1,325 @@ +# Convert Create/Edit Modals to Page + +In this document we will explain how to convert the BookStore's Books create & edit modals to regular Angular component pages. + +## Before + +![bookstore-crud-before](images/old.gif) + +## After + +![bookstore-crud-after](images/new.gif) + +# BooksComponent + +This is the main component of the books management. The create & update operations are done in this page. So we'll remove the create & update operations from this page and move a separate angular component for each operation. Each component will be a page. + +- Remove the Create & Update modal on template + + ![remove-modal](images/books-remove-modals.png) + +- Modify the **NewBook** button with a link to the **CreateBookComponent** page. + + ```html + + ``` + +- Modify the **Edit** button with a link to the **EditBookComponent** page. + + ```html + + ``` + +- Remove all unused methods and variables in the `BookComponent` except the **book** variable, the **ngOnInit** and **delete** methods. + + + ![bookstore-remove-unsued](images/books-remove-unused.png) + +- Also we can clear unncessary imports + + ![bookstore-remove-unsued-imports](images/books-remove-unused-imports.png) + + + +# CreateBookComponent Page + +Create a new component by the name `create-book` in your project. +```bash + yarn ng g c book/create-book --skip-tests --style=none +``` + +- `create-book.component.html` + +```html +
+
+
+
+ * + +
+ +
+ * + +
+ +
+ * + +
+ +
+ * + +
+ +
+ * + +
+ +
+ + + +
+
+
+
+``` + +- `create-book.component.ts` + +```ts +import { Component, inject } from '@angular/core'; +import { Router } from '@angular/router'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { map } from 'rxjs'; +import { NgbDateNativeAdapter, NgbDateAdapter } from '@ng-bootstrap/ng-bootstrap'; +import { BookService, bookTypeOptions } from '@proxy/books'; + +const { required } = Validators; + +@Component({ + selector: 'app-create-book', + templateUrl: './create-book.component.html', + providers: [{ provide: NgbDateAdapter, useClass: NgbDateNativeAdapter }], +}) +export class CreateBookComponent { + //inject() function came with Angular v14, detail: https://angular.io/api/core/inject + private readonly router = inject(Router); + private readonly fb = inject(FormBuilder); + private readonly bookService = inject(BookService); + + form: FormGroup; + authors$ = this.bookService.getAuthorLookup().pipe(map(({ items }) => items)); + bookTypes = bookTypeOptions; + + private buildForm() { + this.form = this.fb.group({ + authorId: [null, required], + name: [null, required], + type: [null, required], + publishDate: [undefined, required], + price: [null, required], + }); + } + + constructor() { + this.buildForm(); + } + + save() { + if (this.form.invalid) return; + + this.bookService.create(this.form.value).subscribe(() => { + this.router.navigate(['/books']); + }); + } +} +``` + +# EditBookComponent Page + +Create a new component by the name **edit-book** in your project. + +```bash + yarn ng g c book/edit-book --skip-tests --style=none +``` + +- `edit-book.component.html` + +```html +
+
+
+
+ * + +
+ +
+ * + +
+ +
+ * + +
+ +
+ * + +
+ +
+ * + +
+ +
+ + + +
+
+
+
+``` + +- `edit-book.component.ts` + +```ts +import { Component, inject } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { filter, map, switchMap, tap } from 'rxjs'; +import { NgbDateNativeAdapter, NgbDateAdapter } from '@ng-bootstrap/ng-bootstrap'; +import { BookDto, BookService, bookTypeOptions } from '@proxy/books'; + +const { required } = Validators; + +@Component({ + selector: 'app-edit-book', + templateUrl: './edit-book.component.html', + providers: [{ provide: NgbDateAdapter, useClass: NgbDateNativeAdapter }], +}) +export class EditBookComponent { + //inject() function came with Angular v14, detail: https://angular.io/api/core/inject + private readonly router = inject(Router); + private readonly activatedRoute = inject(ActivatedRoute); + private readonly fb = inject(FormBuilder); + private readonly bookService = inject(BookService); + + id: string; + form: FormGroup; + authors$ = this.bookService.getAuthorLookup().pipe(map(({ items }) => items)); + bookTypes = bookTypeOptions; + + private buildForm(book: BookDto): void { + this.form = this.fb.group({ + authorId: [book.authorId, required], + name: [book.name, required], + type: [book.type, required], + publishDate: [new Date(book.publishDate), required], + price: [book.price, required], + }); + } + + constructor() { + this.activatedRoute.params + .pipe( + filter(params => params.id), + tap(({ id }) => (this.id = id)), + switchMap(({ id }) => this.bookService.get(id)), + tap(book => this.buildForm(book)) + ) + .subscribe(); + } + + save(): void { + if (this.form.invalid) return; + + this.bookService.update(this.id, this.form.value).subscribe(() => { + this.router.navigate(['/books']); + }); + } +} +``` + +# Update BookRoutingModule +Finally add 2 items to the routes array in the `book-routing.module.ts` +```ts +import { CreateBookComponent } from './create-book/create-book.component'; +import { EditBookComponent } from './edit-book/edit-book.component'; + +const routes: Routes = [ + { path: '', component: BookComponent, canActivate: [AuthGuard, PermissionGuard] }, + { path: 'create', component: CreateBookComponent }, + { path: 'edit/:id', component: EditBookComponent }, +]; +``` + + +You can check the following commit for more details: https://github.com/abpframework/abp-samples/commit/351ad5e093036702edbb15169968935496afea0e diff --git a/docs/en/Community-Articles/2023-04-15-Converting-Create-Edit-Modal-To-Page/images/books-remove-modals.png b/docs/en/Community-Articles/2023-04-15-Converting-Create-Edit-Modal-To-Page/images/books-remove-modals.png new file mode 100644 index 0000000000..4396819fcd Binary files /dev/null and b/docs/en/Community-Articles/2023-04-15-Converting-Create-Edit-Modal-To-Page/images/books-remove-modals.png differ diff --git a/docs/en/Community-Articles/2023-04-15-Converting-Create-Edit-Modal-To-Page/images/books-remove-unused-imports.png b/docs/en/Community-Articles/2023-04-15-Converting-Create-Edit-Modal-To-Page/images/books-remove-unused-imports.png new file mode 100644 index 0000000000..198db3f243 Binary files /dev/null and b/docs/en/Community-Articles/2023-04-15-Converting-Create-Edit-Modal-To-Page/images/books-remove-unused-imports.png differ diff --git a/docs/en/Community-Articles/2023-04-15-Converting-Create-Edit-Modal-To-Page/images/books-remove-unused.png b/docs/en/Community-Articles/2023-04-15-Converting-Create-Edit-Modal-To-Page/images/books-remove-unused.png new file mode 100644 index 0000000000..f95c90c44d Binary files /dev/null and b/docs/en/Community-Articles/2023-04-15-Converting-Create-Edit-Modal-To-Page/images/books-remove-unused.png differ diff --git a/docs/en/Community-Articles/2023-04-15-Converting-Create-Edit-Modal-To-Page/images/new.gif b/docs/en/Community-Articles/2023-04-15-Converting-Create-Edit-Modal-To-Page/images/new.gif new file mode 100644 index 0000000000..a2e15e9c8d Binary files /dev/null and b/docs/en/Community-Articles/2023-04-15-Converting-Create-Edit-Modal-To-Page/images/new.gif differ diff --git a/docs/en/Community-Articles/2023-04-15-Converting-Create-Edit-Modal-To-Page/images/old.gif b/docs/en/Community-Articles/2023-04-15-Converting-Create-Edit-Modal-To-Page/images/old.gif new file mode 100644 index 0000000000..499af9f28c Binary files /dev/null and b/docs/en/Community-Articles/2023-04-15-Converting-Create-Edit-Modal-To-Page/images/old.gif differ diff --git a/docs/en/Customizing-Application-Modules-Overriding-User-Interface.md b/docs/en/Customizing-Application-Modules-Overriding-User-Interface.md index 321ed2befd..b6ad7b05c2 100644 --- a/docs/en/Customizing-Application-Modules-Overriding-User-Interface.md +++ b/docs/en/Customizing-Application-Modules-Overriding-User-Interface.md @@ -3,4 +3,5 @@ You may want to override a page, a component, a JavaScript, CSS or an image file of your depended module. Overriding the UI completely depends on the UI framework you're using. Select the UI framework to continue: * [ASP.NET Core (MVC / Razor Pages)](UI/AspNetCore/Customization-User-Interface.md) -* [Angular](UI/Angular/Customization-User-Interface.md) \ No newline at end of file +* [Angular](UI/Angular/Customization-User-Interface.md) +* [Blazor](UI/Blazor/Customization-Overriding-Components.md) \ No newline at end of file diff --git a/docs/en/Distributed-Event-Bus-Kafka-Integration.md b/docs/en/Distributed-Event-Bus-Kafka-Integration.md index 57a90c4b83..82e658f48d 100644 --- a/docs/en/Distributed-Event-Bus-Kafka-Integration.md +++ b/docs/en/Distributed-Event-Bus-Kafka-Integration.md @@ -110,7 +110,7 @@ You can use any of the [ClientConfig](https://docs.confluent.io/current/clients/ ### The Options Classes -`AbpRabbitMqOptions` and `AbpRabbitMqEventBusOptions` classes can be used to configure the connection strings and event bus options for the RabbitMQ. +`AbpKafkaOptions` and `AbpKafkaEventBusOptions` classes can be used to configure the connection strings and event bus options for the Kafka. You can configure this options inside the `ConfigureServices` of your [module](Module-Development-Basics.md). diff --git a/docs/en/Entity-Framework-Core-Other-DBMS.md b/docs/en/Entity-Framework-Core-Other-DBMS.md index bb14f2b906..93c3a6276f 100644 --- a/docs/en/Entity-Framework-Core-Other-DBMS.md +++ b/docs/en/Entity-Framework-Core-Other-DBMS.md @@ -83,7 +83,7 @@ You typically will change the `appsettings.json` inside the `.DbMigrator` and `. MySQL DBMS has some slight differences than the SQL Server. Some module database mapping configuration (especially the field lengths) causes problems with MySQL. For example, some of the the [IdentityServer module](Modules/IdentityServer.md) tables has such problems and it provides an option to configure the fields based on your DBMS. -The module may provide some built-in solutions. You can configure it via `ModelBuilder`. eg: `Identity Server` module. +The module may provide some built-in solutions. You can configure it via `ModelBuilder`. eg: `Auth Server` module. ```csharp builder.ConfigureIdentityServer(options => diff --git a/docs/en/Getting-Started-Create-Solution-Single-Layer.md b/docs/en/Getting-Started-Create-Solution-Single-Layer.md new file mode 100644 index 0000000000..d6ed14600d --- /dev/null +++ b/docs/en/Getting-Started-Create-Solution-Single-Layer.md @@ -0,0 +1,52 @@ +# Getting Started + +````json +//[doc-params] +{ + "UI": ["MVC", "Blazor", "BlazorServer", "NG"], + "DB": ["EF", "Mongo"] +} +```` + +> This document assumes that you prefer to use **{{ UI_Value }}** as the UI framework and **{{ DB_Value }}** as the database provider. For other options, please change the preference on top of this document. + +## Create a New Project + +We will use the ABP CLI to create a new ABP project. + +> You can also use the ABP CLI Command Generator on the [ABP Framework website](https://abp.io/get-started) by easily selecting all options from the page. + +Use the `new` command of the ABP CLI to create a new project: + +````shell +abp new Acme.BookStore -t app-nolayers{{if UI == "NG"}} -u angular{{else if UI == "Blazor"}} -u blazor{{else if UI == "BlazorServer"}} -u blazor-server{{end}}{{if DB == "Mongo"}} -d mongodb{{end}} +```` + +*You can use different level of namespaces; e.g. BookStore, Acme.BookStore or Acme.Retail.BookStore.* + +> [ABP CLI document](./CLI.md) covers all of the available commands and options. + +## The Solution Structure + +The solution structure is based on the [Single-Layer Startup Template](Startup-Templates/Application-Single-Layer.md) where everything is in one project instead of the [Domain Driven Design](Domain-Driven-Design.md). You can check its [documentation](Startup-Templates/Application-Single-Layer.md) for more details. + +{{ if DB == "Mongo" }} + +## MongoDB Transactions + +The [startup template](Startup-templates/Index.md) **disables** transactions in the `.MongoDB` project by default. If your MongoDB server supports transactions, you can enable it in the *YourProjectModule* class's `ConfigureMongoDB` method: + + ```csharp +Configure(options => +{ + options.TransactionBehavior = UnitOfWorkTransactionBehavior.Enabled; //or UnitOfWorkTransactionBehavior.Auto +}); + ``` + +> Or you can delete that code since `Auto` is already the default behavior. + +{{ end }} + +## Next Step + +* [Running the solution](Getting-Started-Running-Solution-Single-Layer.md) \ No newline at end of file diff --git a/docs/en/Getting-Started-Create-Solution.md b/docs/en/Getting-Started-Create-Solution.md index 8b508ff348..650d3163a0 100644 --- a/docs/en/Getting-Started-Create-Solution.md +++ b/docs/en/Getting-Started-Create-Solution.md @@ -33,7 +33,7 @@ abp new Acme.BookStore{{if UI == "NG"}} -u angular{{else if UI == "Blazor"}} -u {{ else }} -* `--separate-auth-server` argument is used to separate the identity server application from the API host application. If not specified, you will have a single endpoint on the server. +* `--separate-auth-server` argument is used to separate the Auth Server application from the API host application. If not specified, you will have a single endpoint on the server. {{ end }} diff --git a/docs/en/Getting-Started-Overall.md b/docs/en/Getting-Started-Overall.md new file mode 100644 index 0000000000..ef88f5f4b5 --- /dev/null +++ b/docs/en/Getting-Started-Overall.md @@ -0,0 +1,8 @@ +# Getting Started: Overall + +## Select the Solution Architecture + +This tutorial has multiple versions. Please select the one that fits you the best: + +* **[Single-Layer Solution](Getting-Started-Single-Layered.md)**: Creates a single-project solution. Recommended for building an application with a **simpler and easy to understand** architecture. +* **[Layered Solution Architecture](Getting-Started.md)**: A fully layered (multiple projects) solution based on [Domain Driven Design](Domain-Driven-Design.md) practices. Recommended for long-term projects that need a **maintainable and extensible** codebase. diff --git a/docs/en/Getting-Started-Running-Solution-Single-Layer.md b/docs/en/Getting-Started-Running-Solution-Single-Layer.md new file mode 100644 index 0000000000..cef80c7807 --- /dev/null +++ b/docs/en/Getting-Started-Running-Solution-Single-Layer.md @@ -0,0 +1,98 @@ +# Getting Started + +````json +//[doc-params] +{ + "UI": ["MVC", "Blazor", "BlazorServer", "NG"], + "DB": ["EF", "Mongo"] +} +```` + +> This document assumes that you prefer to use **{{ UI_Value }}** as the UI framework and **{{ DB_Value }}** as the database provider. For other options, please change the preference on top of this document. + +## Create the Database + +### Connection String + +Check the **connection string** in the `appsettings.json` file under the `YourProject` project. + +{{ if DB == "EF" }} + +````json +"ConnectionStrings": { + "Default": "Server=(LocalDb)\MSSQLLocalDB;Database=BookStore;Trusted_Connection=True" +} +```` + +> **About the Connection Strings and Database Management Systems** +> +> The solution is configured to use **Entity Framework Core** with **MS SQL Server** by default. However, if you've selected another DBMS using the `-dbms` parameter on the ABP CLI `new` command (like `-dbms MySQL`), the connection string might be different for you. +> +> EF Core supports [various](https://docs.microsoft.com/en-us/ef/core/providers/) database providers and you can use any supported DBMS. See [the Entity Framework integration document](Entity-Framework-Core.md) to learn how to [switch to another DBMS](Entity-Framework-Core-Other-DBMS.md) if you need later. + +{{ else if DB == "Mongo" }} + +````json +"ConnectionStrings": { + "Default": "mongodb://localhost:27017/BookStore" +} +```` + +The solution is configured to use **MongoDB** in your local computer, so you need to have a MongoDB server instance up and running or change the connection string to another MongoDB server. + +{{ end }} + +### Seed Initial Data + +Before running the application, you need to create the database and seed the initial data. To do that, you can run the following command in the directory of your project (in the same folder of the `.csproj` file): + +```bash +dotnet run --migrate-database +``` + + + +## Run the Application + +{{if UI=="MVC" || UI=="BlazorServer"}} + +Running the application is pretty straight-forward, you can run the application with any IDE that supports .NET or by running the `dotnet run` CLI command in the directory of your project: + +{{else if UI=="Blazor"}} + +Running the application is pretty straight-forward, you just need to run the `TodoApp.Host` application with any IDE that supports .NET or by running the `dotnet run` CLI command in the directory of your project. + +> **Note:** The `host` application hosts and serves the `blazor` application. Therefore, you should run the `host` application only. + +After the application runs, open the application in your default browser. + +{{else if UI=="NG"}} + +The solution has two main applications: + +* `TodoApp` (in the .NET solution) hosts the server-side HTTP API, so the Angular application can consume it. (server-side application) +* `angular` folder contains the Angular application. (client-side application) + +Firstly, run the `TodoApp` project in your favorite IDE (or run the `dotnet run` CLI command on your project directory) to see the server-side HTTP API on [Swagger UI](https://swagger.io/tools/swagger-ui/). + +![swagger-ui](images/swagger-ui.png) + +You can explore and test your HTTP API with this UI. If it works, then we can run the Angular client application. + +You can run the application using the following (or `yarn start`) command: + +````bash +npm start +```` + +This command takes time, but eventually runs and opens the application in your default browser. + +{{end}} + +After running the project, the index page should be seen as below: + +![single-layer-index-page](images/single-layer-index-page.png) + +Enter **admin** as the username and **1q2w3E*** as the password to login to the application. The application is up and running. You can start developing your application based on this startup template. + +![bookstore-login-2](images/bookstore-login-2.png) \ No newline at end of file diff --git a/docs/en/Getting-Started-Setup-Environment-Single-Layer.md b/docs/en/Getting-Started-Setup-Environment-Single-Layer.md new file mode 100644 index 0000000000..f7c2b5702b --- /dev/null +++ b/docs/en/Getting-Started-Setup-Environment-Single-Layer.md @@ -0,0 +1,49 @@ +# Getting Started + +````json +//[doc-params] +{ + "UI": ["MVC", "Blazor", "BlazorServer", "NG"], + "DB": ["EF", "Mongo"] +} +```` + +> This document assumes that you prefer to use **{{ UI_Value }}** as the UI framework and **{{ DB_Value }}** as the database provider. For other options, please change the preference on top of this document. + +## Setup Your Development Environment + +First things first! Let's setup your development environment before creating the project. + +### Pre-Requirements + +The following tools should be installed on your development machine: + +* An IDE (e.g. [Visual Studio](https://visualstudio.microsoft.com/vs/)) that supports [.NET 7.0+](https://dotnet.microsoft.com/download/dotnet) development. + {{ if UI != "Blazor" }} +* [Node v16 or v18](https://nodejs.org/) +* [Yarn v1.20+ (not v2)](https://classic.yarnpkg.com/en/docs/install) [1](#f-yarn) or npm v6+ (already installed with Node) + {{ end }} + +{{ if UI != "Blazor" }} + +1 _Yarn v2 works differently and is not supported._ [↩](#a-yarn) + +{{ end }} + +### Install the ABP CLI + +[ABP CLI](./CLI.md) is a command line interface that is used to automate some common tasks for ABP based solutions. First, you need to install the ABP CLI using the following command: + +````shell +dotnet tool install -g Volo.Abp.Cli +```` + +If you've already installed, you can update it using the following command: + +````shell +dotnet tool update -g Volo.Abp.Cli +```` + +## Next Step + +* [Creating a new solution](Getting-Started-Create-Solution-Single-Layer.md) \ No newline at end of file diff --git a/docs/en/Getting-Started-Single-Layered.md b/docs/en/Getting-Started-Single-Layered.md new file mode 100644 index 0000000000..5ccad79649 --- /dev/null +++ b/docs/en/Getting-Started-Single-Layered.md @@ -0,0 +1,17 @@ +# Getting Started + +````json +//[doc-params] +{ + "UI": ["MVC", "Blazor", "BlazorServer", "NG"], + "DB": ["EF", "Mongo"] +} +```` + +> This document assumes that you prefer to use **{{ UI_Value }}** as the UI framework and **{{ DB_Value }}** as the database provider. For other options, please change the preference on top of this document. + +This tutorial explains how to **create and run** a new Single-Layered web application using the ABP Framework. Follow the steps below: + +1. [Setup your development environment](Getting-Started-Setup-Environment-Single-Layer.md) +2. [Creating a new solution](Getting-Started-Create-Solution-Single-Layer.md) +3. [Running the solution](Getting-Started-Running-Solution-Single-Layer.md) diff --git a/docs/en/Index.md b/docs/en/Index.md index c4b876fabb..ac8213a90f 100644 --- a/docs/en/Index.md +++ b/docs/en/Index.md @@ -12,13 +12,13 @@ ABP Framework offers an **opinionated architecture** to build enterprise softwar ABP Framework can work with any UI framework, while the following frameworks are supported out of the box: - +ui options ### Database Provider Options ABP Framework can work with any database provider, while the following providers are supported out of the box: - +database options ## Exploring the Documentation diff --git a/docs/en/Migration-Guides/Abp-6_0.md b/docs/en/Migration-Guides/Abp-6_0.md index f589bca2cd..21eb6023b8 100644 --- a/docs/en/Migration-Guides/Abp-6_0.md +++ b/docs/en/Migration-Guides/Abp-6_0.md @@ -14,9 +14,9 @@ If you have customized the `MultiTenancyMiddlewareErrorPageBuilder` of the `AbpM LeptonX Lite is now being introduced and you can follow the guides below to migrate your existing applications: -- [Migrating to LeptonX MVC UI](../themes/LeptonXLite/AspNetCore.md) -- [Migrating to LeptonX Angular UI](../themes/LeptonXLite/angular.md) -- [Migrating to LeptonX Blazor UI](../themes/LeptonXLite/blazor.md) +- [Migrating to LeptonX MVC UI](../Themes/LeptonXLite/AspNetCore.md) +- [Migrating to LeptonX Angular UI](../Themes/LeptonXLite/Angular.md) +- [Migrating to LeptonX Blazor UI](../Themes/LeptonXLite/Blazor.md) ## Migrating to OpenIddict diff --git a/docs/en/PlugIn-Modules.md b/docs/en/PlugIn-Modules.md index 5c0cdacfd3..cbcc380de2 100644 --- a/docs/en/PlugIn-Modules.md +++ b/docs/en/PlugIn-Modules.md @@ -120,6 +120,8 @@ Build the project, open the build folder, find the `MyPlugIn.dll`: Copy `MyPlugIn.dll` into the plug-in folder (`D:\Temp\MyPlugIns` for this example). +> Please delete the `MyPlugIn.deps.json` file if you use `build folder` folder as `PlugInSources`. + If you have configured the main application like described above (see Basic Usage section), you should see the `MyService has been initialized` log in the application startup. ## Example: Creating a Plug-In With Razor Pages @@ -227,4 +229,4 @@ If your module uses a relational database and [Entity Framework Core](Entity-Fra 1. The Plugin may check if the database tables does exists and create the tables on the application startup or migrate them if the plug-in has been updated and requires some schema changes. You can use EF Core's migration API to do that. 2. You can improve the `DbMigrator` application to find migrations of the plug-ins and execute them. -There may be other solutions. For example, if your DB admin doesn't allow you to change the database schema in the application code, you may need to manually send a SQL file to the database admin to apply it to the database. \ No newline at end of file +There may be other solutions. For example, if your DB admin doesn't allow you to change the database schema in the application code, you may need to manually send a SQL file to the database admin to apply it to the database. diff --git a/docs/en/Themes/LeptonXLite/Blazor.md b/docs/en/Themes/LeptonXLite/Blazor.md index 80207fdff2..bcf6efb4d6 100644 --- a/docs/en/Themes/LeptonXLite/Blazor.md +++ b/docs/en/Themes/LeptonXLite/Blazor.md @@ -18,7 +18,7 @@ LeptonX Lite has implementation for the ABP Framework Blazor WebAssembly & Blazo This theme is **already installed** when you create a new solution using the startup templates. If you are using any other template, you can install this theme by following the steps below: {{if UI == "Blazor"}} -- Complete the [MVC Razor Pages Installation](AspNetCore.md#installation) for the **HttpApi.Host** application first. _If the solution is tiered/micro-service, complete the MVC steps for all MVC applications such as **HttpApi.Host** and if identity server is separated, install to the **OpenIddict**_. +- Complete the [MVC Razor Pages Installation](AspNetCore.md#installation) for the **HttpApi.Host** application first. _If the solution is tiered/micro-service, complete the MVC steps for all MVC applications such as **HttpApi.Host** and if Auth Server is separated, install to the **OpenIddict**_. - Add **Volo.Abp.AspNetCore.Components.WebAssembly.LeptonXLiteTheme** package to your **Blazor WebAssembly** application with the following command: diff --git a/docs/en/Tutorials/Part-7.md b/docs/en/Tutorials/Part-7.md index 82f01bf963..41264789cc 100644 --- a/docs/en/Tutorials/Part-7.md +++ b/docs/en/Tutorials/Part-7.md @@ -90,7 +90,7 @@ You can apply changes to the database using the following command, in the same c dotnet ef database update ```` -> If you are using Visual Studio, you may want to use the `Add-Migration Created_Book_Entity` and `Update-Database` commands in the *Package Manager Console (PMC)*. In this case, ensure that `Acme.BookStore.EntityFrameworkCore` is the startup project in Visual Studio and `Acme.BookStore.EntityFrameworkCore` is the *Default Project* in PMC. +> If you are using Visual Studio, you may want to use the `Add-Migration Added_Authors` and `Update-Database` commands in the *Package Manager Console (PMC)*. In this case, ensure that `Acme.BookStore.EntityFrameworkCore` is the startup project in Visual Studio and `Acme.BookStore.EntityFrameworkCore` is the *Default Project* in PMC. {{else if DB=="Mongo"}} diff --git a/docs/en/Tutorials/Part-9.md b/docs/en/Tutorials/Part-9.md index ba67e2d258..d67e20a8e0 100644 --- a/docs/en/Tutorials/Part-9.md +++ b/docs/en/Tutorials/Part-9.md @@ -238,7 +238,7 @@ context.Menu.AddItem( "BooksStore.Authors", l["Menu:Authors"], url: "/Authors" - ).RequirePermissions(BookStorePermissions.Books.Default) + ).RequirePermissions(BookStorePermissions.Authors.Default) ) ); ```` diff --git a/docs/en/UI/Angular/Basic-Theme.md b/docs/en/UI/Angular/Basic-Theme.md index 6b9ffcfeb1..651be9b637 100644 --- a/docs/en/UI/Angular/Basic-Theme.md +++ b/docs/en/UI/Angular/Basic-Theme.md @@ -72,7 +72,7 @@ Or, you can download the [source code](https://github.com/abpframework/abp/blob/ "prefix": "abp", "architect": { "build": { - "builder": "@angular-devkit/build-ng-packagr:build", + "builder": "@angular-devkit/build-angular:ng-packagr", "options": { "tsConfig": "projects/theme-basic/tsconfig.lib.json", "project": "projects/theme-basic/ng-package.json" diff --git a/docs/en/UI/AspNetCore/Security-Headers.md b/docs/en/UI/AspNetCore/Security-Headers.md new file mode 100644 index 0000000000..8322644b1d --- /dev/null +++ b/docs/en/UI/AspNetCore/Security-Headers.md @@ -0,0 +1,45 @@ +# Security Headers + +ABP Framework allows you to add frequently used security headers into your application. The following security headers will be added as response headers to your application if you use the `UseAbpSecurityHeaders` middleware: + +* `X-Content-Type-Options`: Tells the browser to not try and guess what a mime-type of a resource might be, and to just take what mime-type the server has returned. +* `X-XSS-Protection`: This is a feature of Internet Explorer, Chrome, and Safari that stops pages from loading when they detect reflected cross-site scripting (XSS) attacks. +* `X-Frame-Options`: This header can be used to indicate whether or not a browser should be allowed to render a page in a `