Merge branch 'rel-4.0' into dev

pull/6402/head
Halil İbrahim Kalkan 4 years ago
commit f755b00b5f

@ -1,32 +1,3 @@
# Social/External Logins
The [Account Module](../Modules/Account.md) has already configured to handle social or external logins out of the box. You can follow the ASP.NET Core documentation to add a social/external login provider to your application.
## Example: Facebook Authentication
Follow the [ASP.NET Core Facebook integration document](https://docs.microsoft.com/en-us/aspnet/core/security/authentication/social/facebook-logins) to support the Facebook login for your application.
#### Add the NuGet Package
Add the [Microsoft.AspNetCore.Authentication.Facebook](https://www.nuget.org/packages/Microsoft.AspNetCore.Authentication.Facebook) package to your project. Based on your architecture, this can be `.Web`, `.IdentityServer` (for tiered setup) or `.Host` project.
#### Configure the Provider
Use the `.AddFacebook(...)` extension method in the `ConfigureServices` method of your [module](../Module-Development-Basics.md), to configure the client:
````csharp
context.Services.AddAuthentication()
.AddFacebook(facebook =>
{
facebook.AppId = "...";
facebook.AppSecret = "...";
facebook.Scope.Add("email");
facebook.Scope.Add("public_profile");
});
````
> It would be a better practice to use the `appsettings.json` or the ASP.NET Core User Secrets system to store your credentials, instead of a hard-coded value like that. Follow the [Microsoft's document](https://docs.microsoft.com/en-us/aspnet/core/security/authentication/social/facebook-logins) to learn the user secrets usage.
## Angular UI
Beginning from the v3.1, the Angular UI uses authorization code flow (as a best practice) to authenticate the user by redirecting to the MVC UI login page. So, even if you are using the Angular UI, social/external login integration is same as explained above and it will work out of the box.
> This document has been moved. See the [Account Module](../Modules/Account.md) documentation.

@ -1,15 +1,13 @@
# Data Access
## Database Providers
ABP framework was designed as database agnostic. It can work any type of data source by the help of the [repository](Repositories.md) and [unit of work](Unit-Of-Work.md) abstractions. However, currently the following providers are implemented:
ABP framework was designed as database agnostic. It can work any type of data source by the help of the [repository](Repositories.md) and [unit of work](Unit-Of-Work.md) abstractions. Currently, the following providers are implemented as official:
* [Entity Framework Core](Entity-Framework-Core.md) (works with [various DBMS and providers](https://docs.microsoft.com/en-us/ef/core/providers/).)
* [MongoDB](MongoDB.md)
* [Dapper](Dapper.md)
More providers will be added in the future.
## See Also
* [Connection Strings](Connection-Strings.md)
* [Connection Strings](Connection-Strings.md)
* [Data Seeding](Data-Seeding.md)
* [Data Filtering](Data-Filtering.md)

@ -1,3 +1,38 @@
# Account Module
TODO
This module provides necessary UI pages/components to make the user login and register to the application.
> This document is incomplete.
## Social/External Logins
The [Account Module](../Modules/Account.md) has already configured to handle social or external logins out of the box. You can follow the ASP.NET Core documentation to add a social/external login provider to your application.
### Example: Facebook Authentication
Follow the [ASP.NET Core Facebook integration document](https://docs.microsoft.com/en-us/aspnet/core/security/authentication/social/facebook-logins) to support the Facebook login for your application.
#### Add the NuGet Package
Add the [Microsoft.AspNetCore.Authentication.Facebook](https://www.nuget.org/packages/Microsoft.AspNetCore.Authentication.Facebook) package to your project. Based on your architecture, this can be `.Web`, `.IdentityServer` (for tiered setup) or `.Host` project.
#### Configure the Provider
Use the `.AddFacebook(...)` extension method in the `ConfigureServices` method of your [module](../Module-Development-Basics.md), to configure the client:
````csharp
context.Services.AddAuthentication()
.AddFacebook(facebook =>
{
facebook.AppId = "...";
facebook.AppSecret = "...";
facebook.Scope.Add("email");
facebook.Scope.Add("public_profile");
});
````
> It would be a better practice to use the `appsettings.json` or the ASP.NET Core User Secrets system to store your credentials, instead of a hard-coded value like that. Follow the [Microsoft's document](https://docs.microsoft.com/en-us/aspnet/core/security/authentication/social/facebook-logins) to learn the user secrets usage.
### Other UI Types
Beginning from the v3.1, the [Angular UI](../UI/Angular/Quick-Start.md) uses authorization code flow (as a best practice) to authenticate the user by redirecting to the MVC UI login page. So, even if you are using the Angular UI, social/external login integration is same as explained above and it will work out of the box. As similar, The [Blazor UI](../UI/Blazor/Overall.md) also uses the MVC UI to logic.

@ -0,0 +1,3 @@
# Client Simulation Module
TODO

@ -0,0 +1,3 @@
# CMS Kit Module
TODO

@ -2,7 +2,7 @@
Identity module is used to manage [organization units](Organization-Units.md), roles, users and their permissions, based on the Microsoft Identity library.
**See [the source code](https://github.com/abpframework/abp/tree/dev/modules/identity). Documentation will come soon...**
> **See [the source code](https://github.com/abpframework/abp/tree/dev/modules/identity). Documentation will come soon...**
## Identity Security Log
@ -27,3 +27,51 @@ Configure<AbpSecurityLogOptions>(options =>
options.ApplicationName = "AbpSecurityTest";
});
```
## Organization Unit Management
Organization units (OU) is a part of **Identity Module** and can be used to **hierarchically group users and entities**.
### OrganizationUnit Entity
An OU is represented by the **OrganizationUnit** entity. The fundamental properties of this entity are:
- **TenantId**: Tenant's Id of this OU. Can be null for host OUs.
- **ParentId**: Parent OU's Id. Can be null if this is a root OU.
- **Code**: A hierarchical string code that is unique for a tenant.
- **DisplayName**: Shown name of the OU.
The OrganizationUnit entity's primary key (Id) is a **Guid** type and it derives from the [**FullAuditedAggregateRoot**](../Entities.md) class.
#### Organization Tree
Since an OU can have a parent, all OUs of a tenant are in a **tree** structure. There are some rules for this tree;
- There can be more than one root (where the `ParentId` is `null`).
- There is a limit for the first-level children count of an OU (because of the fixed OU Code unit length explained below).
#### OU Code
OU code is automatically generated and maintained by the OrganizationUnit Manager. It's a string that looks something like this:
"**00001.00042.00005**"
This code can be used to easily query the database for all the children of an OU (recursively). There are some rules for this code:
- It must be **unique** for a [tenant](../Multi-Tenancy.md).
- All the children of the same OU have codes that **start with the parent OU's code**.
- It's **fixed length** and based on the level of the OU in the tree, as shown in the sample.
- While the OU code is unique, it can be **changeable** if you move an OU.
- You must reference an OU by Id, not Code.
### OrganizationUnit Manager
The **OrganizationUnitManager** class can be [injected](../Dependency-Injection.md) and used to manage OUs. Common use cases are:
- Create, Update or Delete an OU
- Move an OU in the OU tree.
- Getting information about the OU tree and its items.
#### Multi-Tenancy
The `OrganizationUnitManager` is designed to work for a **single tenant** at a time. It works for the **current tenant** by default.

@ -1,6 +1,6 @@
# Application Modules
ABP is a **modular application framework** which consists of dozens of **nuget packages**. It also provides a complete infrastructure to build your own application modules which may have entities, services, database integration, APIs, UI components and so on.
ABP is a **modular application framework** which consists of dozens of **NuGet & NPM packages**. It also provides a complete infrastructure to build your own application modules which may have entities, services, database integration, APIs, UI components and so on.
There are **two types of modules.** They don't have any structural difference but categorized by functionality and purpose:
@ -9,24 +9,26 @@ There are **two types of modules.** They don't have any structural difference bu
## Open Source Application Modules
There are some **free and open source** application modules developed and maintained by the ABP community:
There are some **free and open source** application modules developed and maintained as a part of the ABP Framework.
* **Account**: Provides UI for the account management and allows user to login/register to the application.
* [**Account**](Account.md): Provides UI for the account management and allows user to login/register to the application.
* [**Audit Logging**](Audit-Logging.md): Persists audit logs to a database.
* **Background Jobs**: Persist background jobs when using the default background job manager.
* **Blogging**: Used to create fancy blogs. ABP's [own blog](https://blog.abp.io/) already using this module.
* [**Docs**](Docs.md): Used to create technical documentation pages. ABP's [own documentation](https://docs.abp.io) already using this module.
* **Feature Management**: Used to persist and manage the [features](../Features.md).
* [**Background Jobs**](Background-Jobs.md): Persist background jobs when using the default background job manager.
* [**Blogging**](Blogging.md): Used to create fancy blogs. ABP's [own blog](https://blog.abp.io/) already using this module.
* [**Client Simulation**](Client-Simulation.md): A simple web UI to stress test HTTP APIs by simulating concurrent clients.
* [**CMS Kit**](Cms-Kit.md): A set of reusable *Content Management System* features.
* [**Docs**](Docs.md): Used to create technical documentation website. ABP's [own documentation](https://docs.abp.io) already using this module.
* [**Feature Management**](Feature-Management.md): Used to persist and manage the [features](../Features.md).
* **[Identity](Identity.md)**: Manages organization units, roles, users and their permissions, based on the Microsoft Identity library.
* **IdentityServer**: Integrates to IdentityServer4.
* **Permission Management**: Used to persist permissions.
* [**IdentityServer**](IdentityServer.md): Integrates to IdentityServer4.
* [**Permission Management**](Permission-Management.md): Used to persist permissions.
* **[Setting Management](Setting-Management.md)**: Used to persist and manage the [settings](../Settings.md).
* **Tenant Management**: Manages tenants for a [multi-tenant](../Multi-Tenancy.md) application.
* **Users**: Abstract users, so other modules can depend on this module instead of the Identity module.
* [**Tenant Management**](Tenant-Management.md): Manages tenants for a [multi-tenant](../Multi-Tenancy.md) application.
* [**Users**](Users.md): Abstract users, so other modules can depend on this module instead of the Identity module.
* [**Virtual File Explorer**](Virtual-File-Explorer.md): Provided a simple UI to view files in [virtual file system](../Virtual-File-System.md).
See [the GitHub repository](https://github.com/abpframework/abp/tree/master/modules) for source code of all modules.
## Commercial Application Modules
[ABP Commercial](https://commercial.abp.io/) license provides additional pre-built application modules on top of the ABP framework. See the [module list](https://commercial.abp.io/modules) provided by the ABP Commercial.
[ABP Commercial](https://commercial.abp.io/) license provides **additional pre-built application modules** on top of the ABP framework. See the [module list](https://commercial.abp.io/modules) provided by the ABP Commercial.

@ -1,47 +0,0 @@
# Organization Unit Management
Organization units (OU) is a part of **Identity Module** and can be used to **hierarchically group users and entities**.
### OrganizationUnit Entity
An OU is represented by the **OrganizationUnit** entity. The fundamental properties of this entity are:
- **TenantId**: Tenant's Id of this OU. Can be null for host OUs.
- **ParentId**: Parent OU's Id. Can be null if this is a root OU.
- **Code**: A hierarchical string code that is unique for a tenant.
- **DisplayName**: Shown name of the OU.
The OrganizationUnit entity's primary key (Id) is a **Guid** type and it derives from the [**FullAuditedAggregateRoot**](../Entities.md) class.
#### Organization Tree
Since an OU can have a parent, all OUs of a tenant are in a **tree** structure. There are some rules for this tree;
- There can be more than one root (where the `ParentId` is `null`).
- There is a limit for the first-level children count of an OU (because of the fixed OU Code unit length explained below).
#### OU Code
OU code is automatically generated and maintained by the OrganizationUnit Manager. It's a string that looks something like this:
"**00001.00042.00005**"
This code can be used to easily query the database for all the children of an OU (recursively). There are some rules for this code:
- It must be **unique** for a [tenant](../Multi-Tenancy.md).
- All the children of the same OU have codes that **start with the parent OU's code**.
- It's **fixed length** and based on the level of the OU in the tree, as shown in the sample.
- While the OU code is unique, it can be **changeable** if you move an OU.
- You must reference an OU by Id, not Code.
### OrganizationUnit Manager
The **OrganizationUnitManager** class can be [injected](../Dependency-Injection.md) and used to manage OUs. Common use cases are:
- Create, Update or Delete an OU
- Move an OU in the OU tree.
- Getting information about the OU tree and its items.
#### Multi-Tenancy
The `OrganizationUnitManager` is designed to work for a **single tenant** at a time. It works for the **current tenant** by default.

@ -0,0 +1,3 @@
# Users Module
TODO

@ -21,6 +21,31 @@
}
]
},
{
"text": "Startup Templates",
"items": [
{
"text": "Overall",
"path": "Startup-Templates/Index.md"
},
{
"text": "Application",
"path": "Startup-Templates/Application.md"
},
{
"text": "Module",
"path": "Startup-Templates/Module.md"
},
{
"text": "Console",
"path": "Startup-Templates/Console.md"
},
{
"text": "WPF",
"path": "Startup-Templates/WPF.md"
}
]
},
{
"text": "Tutorials",
"items": [
@ -68,29 +93,10 @@
"path": "Tutorials/Part-10.md"
}
]
}
]
},
{
"text": "Guides",
"items": [
},
{
"text": "Customizing the Application Modules",
"path": "Customizing-Application-Modules-Guide.md",
"items": [
{
"text": "Extending Entities",
"path": "Customizing-Application-Modules-Extending-Entities.md"
},
{
"text": "Overriding Services",
"path": "Customizing-Application-Modules-Overriding-Services.md"
},
{
"text": "Overriding the User Interface",
"path": "Customizing-Application-Modules-Overriding-User-Interface.md"
}
]
"text": "Community Articles",
"path": "https://community.abp.io/"
},
{
"text": "Migrating from the ASP.NET Boilerplate",
@ -98,23 +104,6 @@
}
]
},
{
"text": "CLI",
"path": "CLI.md"
},
{
"text": "Authentication & Security",
"items": [
{
"text": "Social/External Logins",
"path": "Authentication/Social-External-Logins.md"
},
{
"text": "CSRF/XSRF & Anti Forgery",
"path": "CSRF-Anti-Forgery.md"
}
]
},
{
"text": "Fundamentals",
"items": [
@ -136,10 +125,6 @@
}
]
},
{
"text": "Virtual File System",
"path": "Virtual-File-System.md"
},
{
"text": "Localization",
"path": "Localization.md"
@ -176,21 +161,13 @@
"text": "Logging",
"path": "Logging.md"
},
{
"text": "Audit Logging",
"path": "Audit-Logging.md"
},
{
"text": "Settings",
"path": "Settings.md"
},
{
"text": "Features",
"path": "Features.md"
},
{
"text": "Data Filtering",
"path": "Data-Filtering.md"
"text": "Connection Strings",
"path": "Connection-Strings.md"
},
{
"text": "Object Extensions",
@ -199,39 +176,91 @@
]
},
{
"text": "Event Bus",
"text": "Infrastructure",
"items": [
{
"text": "Overall",
"path": "Event-Bus.md"
"text": "Background Jobs",
"path": "Background-Jobs.md",
"items": [
{
"text": "Hangfire Integration",
"path": "Background-Jobs-Hangfire.md"
},
{
"text": "RabbitMQ Integration",
"path": "Background-Jobs-RabbitMq.md"
},
{
"text": "Quartz Integration",
"path": "Background-Jobs-Quartz.md"
}
]
},
{
"text": "Local Event Bus",
"path": "Local-Event-Bus.md"
"text": "Background Workers",
"path": "Background-Workers.md",
"items": [
{
"text": "Quartz Integration",
"path": "Background-Workers-Quartz.md"
}
]
},
{
"text": "Distributed Event Bus",
"path": "Distributed-Event-Bus.md",
"text": "Event Bus",
"items": [
{
"text": "RabbitMQ Integration",
"path": "Distributed-Event-Bus-RabbitMQ-Integration.md"
"text": "Overall",
"path": "Event-Bus.md"
},
{
"text": "Kafka Integration",
"path": "Distributed-Event-Bus-Kafka-Integration.md"
"text": "Local Event Bus",
"path": "Local-Event-Bus.md"
},
{
"text": "Rebus Integration",
"path": "Distributed-Event-Bus-Rebus-Integration.md"
"text": "Distributed Event Bus",
"path": "Distributed-Event-Bus.md",
"items": [
{
"text": "RabbitMQ Integration",
"path": "Distributed-Event-Bus-RabbitMQ-Integration.md"
},
{
"text": "Kafka Integration",
"path": "Distributed-Event-Bus-Kafka-Integration.md"
},
{
"text": "Rebus Integration",
"path": "Distributed-Event-Bus-Rebus-Integration.md"
}
]
}
]
}
]
},
{
"text": "Services",
"items": [
},
{
"text": "Data Seeding",
"path": "Data-Seeding.md"
},
{
"text": "Virtual File System",
"path": "Virtual-File-System.md"
},
{
"text": "CSRF/XSRF & Anti Forgery",
"path": "CSRF-Anti-Forgery.md"
},
{
"text": "Audit Logging",
"path": "Audit-Logging.md"
},
{
"text": "Features",
"path": "Features.md"
},
{
"text": "Data Filtering",
"path": "Data-Filtering.md"
},
{
"text": "Current User",
"path": "CurrentUser.md"
@ -310,77 +339,104 @@
]
},
{
"text": "Multi Tenancy",
"path": "Multi-Tenancy.md"
},
{
"text": "Module Development",
"items": [
{
"text": "Basics",
"path": "Module-Development-Basics.md"
},
{
"text": "Plug-In Modules"
},
{
"text": "Best Practices",
"path": "Best-Practices/Index.md"
}
]
},
{
"text": "Domain Driven Design",
"text": "Architecture",
"items": [
{
"text": "Overall",
"path": "Domain-Driven-Design.md"
},
{
"text": "Domain Layer",
"text": "Modularity",
"items": [
{
"text": "Entities & Aggregate Roots",
"path": "Entities.md"
},
{
"text": "Value Objects",
"path": "Value-Objects.md"
"text": "Basics",
"path": "Module-Development-Basics.md"
},
{
"text": "Repositories",
"path": "Repositories.md"
"text": "Plug-In Modules"
},
{
"text": "Domain Services",
"path": "Domain-Services.md"
"text": "Customizing the Application Modules",
"path": "Customizing-Application-Modules-Guide.md",
"items": [
{
"text": "Extending Entities",
"path": "Customizing-Application-Modules-Extending-Entities.md"
},
{
"text": "Overriding Services",
"path": "Customizing-Application-Modules-Overriding-Services.md"
},
{
"text": "Overriding the User Interface",
"path": "Customizing-Application-Modules-Overriding-User-Interface.md"
}
]
},
{
"text": "Specifications",
"path": "Specifications.md"
"text": "Best Practices",
"path": "Best-Practices/Index.md"
}
]
},
{
"text": "Application Layer",
"text": "Domain Driven Design",
"items": [
{
"text": "Application Services",
"path": "Application-Services.md"
"text": "Overall",
"path": "Domain-Driven-Design.md"
},
{
"text": "Data Transfer Objects",
"path": "Data-Transfer-Objects.md"
"text": "Domain Layer",
"items": [
{
"text": "Entities & Aggregate Roots",
"path": "Entities.md"
},
{
"text": "Value Objects",
"path": "Value-Objects.md"
},
{
"text": "Repositories",
"path": "Repositories.md"
},
{
"text": "Domain Services",
"path": "Domain-Services.md"
},
{
"text": "Specifications",
"path": "Specifications.md"
}
]
},
{
"text": "Unit Of Work",
"path": "Unit-Of-Work.md"
"text": "Application Layer",
"items": [
{
"text": "Application Services",
"path": "Application-Services.md"
},
{
"text": "Data Transfer Objects",
"path": "Data-Transfer-Objects.md"
},
{
"text": "Unit Of Work",
"path": "Unit-Of-Work.md"
}
]
},
{
"text": "Guide: Implementing DDD",
"path": "Domain-Driven-Design-Implementation-Guide.md"
}
]
},
{
"text": "Guide: Implementing DDD",
"path": "Domain-Driven-Design-Implementation-Guide.md"
"text": "Multi Tenancy",
"path": "Multi-Tenancy.md"
},
{
"text": "Microservices",
"path": "Microservice-Architecture.md"
}
]
},
@ -784,57 +840,44 @@
"path": "Data-Access.md"
},
{
"text": "Connection Strings",
"path": "Connection-Strings.md"
},
{
"text": "Database Providers",
"text": "Entity Framework Core",
"path": "Entity-Framework-Core.md",
"items": [
{
"text": "Entity Framework Core",
"path": "Entity-Framework-Core.md",
"text": "Database Migrations",
"path": "Entity-Framework-Core-Migrations.md"
},
{
"text": "Switch DBMS",
"path": "Entity-Framework-Core-Other-DBMS.md",
"items": [
{
"text": "Database Migrations",
"path": "Entity-Framework-Core-Migrations.md"
},
{
"text": "Switch DBMS",
"path": "Entity-Framework-Core-Other-DBMS.md",
"items": [
{
"text": "To MySQL",
"path": "Entity-Framework-Core-MySQL.md"
},
{
"text": "To PostgreSQL",
"path": "Entity-Framework-Core-PostgreSQL.md"
},
{
"text": "To Oracle",
"path": "Entity-Framework-Core-Oracle.md"
},
{
"text": "To SQLite",
"path": "Entity-Framework-Core-SQLite.md"
}
]
"text": "To MySQL",
"path": "Entity-Framework-Core-MySQL.md"
},
{
"text": "To PostgreSQL",
"path": "Entity-Framework-Core-PostgreSQL.md"
},
{
"text": "To Oracle",
"path": "Entity-Framework-Core-Oracle.md"
},
{
"text": "To SQLite",
"path": "Entity-Framework-Core-SQLite.md"
}
]
},
{
"text": "MongoDB",
"path": "MongoDB.md"
},
{
"text": "Dapper",
"path": "Dapper.md"
}
]
},
{
"text": "Data Seeding",
"path": "Data-Seeding.md"
"text": "MongoDB",
"path": "MongoDB.md"
},
{
"text": "Dapper",
"path": "Dapper.md"
}
]
},
@ -848,115 +891,132 @@
]
},
{
"text": "Background",
"text": "Testing",
"path": "Testing.md"
},
{
"text": "Samples",
"items": [
{
"text": "Background Jobs",
"path": "Background-Jobs.md",
"items": [
{
"text": "Hangfire Integration",
"path": "Background-Jobs-Hangfire.md"
},
{
"text": "RabbitMQ Integration",
"path": "Background-Jobs-RabbitMq.md"
},
{
"text": "Quartz Integration",
"path": "Background-Jobs-Quartz.md"
}
]
"text": "All Samples",
"path": "Samples/Index.md"
},
{
"text": "Background Workers",
"path": "Background-Workers.md",
"items": [
{
"text": "Quartz Integration",
"path": "Background-Workers-Quartz.md"
}
]
"text": "Microservice Demo",
"path": "Samples/Microservice-Demo.md"
}
]
},
{
"text": "Testing",
"path": "Testing.md"
},
{
"text": "Startup Templates",
"text": "Application Modules",
"items": [
{
"text": "Overall",
"path": "Startup-Templates/Index.md"
"path": "Modules/Index.md"
},
{
"text": "Application",
"path": "Startup-Templates/Application.md"
"text": "Account",
"path": "Modules/Account.md"
},
{
"text": "Module",
"path": "Startup-Templates/Module.md"
"text": "Audit Logging",
"path": "Modules/Audit-Logging.md"
},
{
"text": "Console",
"path": "Startup-Templates/Console.md"
"text": "Background Jobs",
"path": "Modules/Background-Jobs.md"
},
{
"text": "WPF",
"path": "Startup-Templates/WPF.md"
"text": "Blogging",
"path": "Modules/Blogging.md"
},
{
"text": "Client Simulation",
"path": "Modules/Client-Simulation.md"
},
{
"text": "CMS Kit",
"path": "Modules/Cms-Kit.md"
},
{
"text": "Docs",
"path": "Modules/Docs.md"
},
{
"text": "Feature Management",
"path": "Modules/Feature-Management.md"
},
{
"text": "Identity",
"path": "Modules/Identity.md"
},
{
"text": "IdentityServer",
"path": "Modules/IdentityServer.md"
},
{
"text": "Permission Management",
"path": "Modules/Permission-Management.md"
},
{
"text": "Setting Management",
"path": "Modules/Setting-Management.md"
},
{
"text": "Tenant Management",
"path": "Modules/Tenant-Management.md"
},
{
"text": "Users",
"path": "Modules/Users.md"
},
{
"text": "Virtual File Explorer",
"path": "Modules/Virtual-File-Explorer.md"
}
]
},
{
"text": "Samples",
"text": "Release Information",
"items": [
{
"text": "All Samples",
"path": "Samples/Index.md"
"text": "Upgrading",
"path": "Upgrading.md"
},
{
"text": "Microservice Demo",
"path": "Samples/Microservice-Demo.md"
"text": "Official Packages",
"path": "https://abp.io/packages"
},
{
"text": "Preview Releases",
"path": "Previews.md"
},
{
"text": "Nightly Builds",
"path": "Nightly-Builds.md"
},
{
"text": "Road Map",
"path": "Road-Map.md"
}
]
},
{
"text": "Application Modules",
"path": "Modules/Index.md"
},
{
"text": "Microservice Architecture",
"path": "Microservice-Architecture.md"
},
{
"text": "Preview Releases",
"path": "Previews.md"
},
{
"text": "Nightly Builds",
"path": "Nightly-Builds.md"
},
{
"text": "Road Map",
"path": "Road-Map.md"
},
{
"text": "Upgrading",
"path": "Upgrading.md"
"text": "Reference",
"items": [
{
"text": "CLI",
"path": "CLI.md"
},
{
"text": "API Documentation",
"path": "{ApiDocumentationUrl}"
}
]
},
{
"text": "Contribution Guide",
"path": "Contribution/Index.md"
},
{
"text": "API Documentation",
"path": "{ApiDocumentationUrl}"
},
{
"text": "Official Packages",
"path": "https://abp.io/packages"
}
]
}

Loading…
Cancel
Save