From 6146171e5ff918b6ad9bd7b4a799fcc84de4294a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 30 Nov 2020 15:48:19 +0300 Subject: [PATCH 1/5] Update Data-Access.md --- docs/en/Data-Access.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/docs/en/Data-Access.md b/docs/en/Data-Access.md index a37f77eb65..7ba85956b9 100644 --- a/docs/en/Data-Access.md +++ b/docs/en/Data-Access.md @@ -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) \ No newline at end of file +* [Connection Strings](Connection-Strings.md) +* [Data Seeding](Data-Seeding.md) +* [Data Filtering](Data-Filtering.md) \ No newline at end of file From 09c6ff973bf56ffbe7f21f537d10632e9bd0fbb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 30 Nov 2020 15:48:29 +0300 Subject: [PATCH 2/5] Revised nav menu --- docs/en/docs-nav.json | 430 +++++++++++++++++++++--------------------- 1 file changed, 215 insertions(+), 215 deletions(-) diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index c776cb34c8..1eb4089c4b 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -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,6 +93,10 @@ "path": "Tutorials/Part-10.md" } ] + }, + { + "text": "Community Articles", + "path": "https://community.abp.io/" } ] }, @@ -98,23 +127,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 +148,6 @@ } ] }, - { - "text": "Virtual File System", - "path": "Virtual-File-System.md" - }, { "text": "Localization", "path": "Localization.md" @@ -176,21 +184,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 +199,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 +362,86 @@ ] }, { - "text": "Multi Tenancy", - "path": "Multi-Tenancy.md" - }, - { - "text": "Module Development", + "text": "Architecture", "items": [ { - "text": "Basics", - "path": "Module-Development-Basics.md" - }, - { - "text": "Plug-In Modules" - }, - { - "text": "Best Practices", - "path": "Best-Practices/Index.md" - } - ] - }, - { - "text": "Domain Driven Design", - "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": "Repositories", - "path": "Repositories.md" + "text": "Basics", + "path": "Module-Development-Basics.md" }, { - "text": "Domain Services", - "path": "Domain-Services.md" + "text": "Plug-In Modules" }, { - "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": "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": "Data Transfer Objects", - "path": "Data-Transfer-Objects.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": "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 +845,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 +896,67 @@ ] }, { - "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": "Application Modules", + "path": "Modules/Index.md" }, { - "text": "Startup Templates", + "text": "Release Information", "items": [ { - "text": "Overall", - "path": "Startup-Templates/Index.md" + "text": "Upgrading", + "path": "Upgrading.md" }, { - "text": "Application", - "path": "Startup-Templates/Application.md" + "text": "Official Packages", + "path": "https://abp.io/packages" }, { - "text": "Module", - "path": "Startup-Templates/Module.md" + "text": "Preview Releases", + "path": "Previews.md" }, { - "text": "Console", - "path": "Startup-Templates/Console.md" + "text": "Nightly Builds", + "path": "Nightly-Builds.md" }, { - "text": "WPF", - "path": "Startup-Templates/WPF.md" + "text": "Road Map", + "path": "Road-Map.md" } ] }, { - "text": "Samples", + "text": "Reference", "items": [ { - "text": "All Samples", - "path": "Samples/Index.md" + "text": "CLI", + "path": "CLI.md" }, { - "text": "Microservice Demo", - "path": "Samples/Microservice-Demo.md" + "text": "API Documentation", + "path": "{ApiDocumentationUrl}" } ] }, - { - "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": "Contribution Guide", "path": "Contribution/Index.md" - }, - { - "text": "API Documentation", - "path": "{ApiDocumentationUrl}" - }, - { - "text": "Official Packages", - "path": "https://abp.io/packages" } ] } From 6341e7e067f9645fec918095ee7e12fa10ceca93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 30 Nov 2020 15:57:49 +0300 Subject: [PATCH 3/5] Move Social-External-Logins document into the account module --- .../Authentication/Social-External-Logins.md | 31 +--------------- docs/en/Modules/Account.md | 37 ++++++++++++++++++- 2 files changed, 37 insertions(+), 31 deletions(-) diff --git a/docs/en/Authentication/Social-External-Logins.md b/docs/en/Authentication/Social-External-Logins.md index 309d4977a5..e80e53d4bd 100644 --- a/docs/en/Authentication/Social-External-Logins.md +++ b/docs/en/Authentication/Social-External-Logins.md @@ -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. \ No newline at end of file +> This document has been moved. See the [Account Module](../Modules/Account.md) documentation. \ No newline at end of file diff --git a/docs/en/Modules/Account.md b/docs/en/Modules/Account.md index 6901b38f59..94cdb7af95 100644 --- a/docs/en/Modules/Account.md +++ b/docs/en/Modules/Account.md @@ -1,3 +1,38 @@ # Account Module -TODO \ No newline at end of file +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. \ No newline at end of file From f1bdb81898e7bbdf7fc4cbe3806b7e088598dc65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 30 Nov 2020 16:33:32 +0300 Subject: [PATCH 4/5] Reorganized the module documents. --- docs/en/Modules/Client-Simulation.md | 3 ++ docs/en/Modules/Cms-Kit.md | 3 ++ docs/en/Modules/Identity.md | 50 +++++++++++++++++++- docs/en/Modules/Index.md | 26 ++++++----- docs/en/Modules/Organization-Units.md | 47 ------------------- docs/en/Modules/Users.md | 3 ++ docs/en/docs-nav.json | 67 ++++++++++++++++++++++++++- 7 files changed, 138 insertions(+), 61 deletions(-) create mode 100644 docs/en/Modules/Client-Simulation.md create mode 100644 docs/en/Modules/Cms-Kit.md delete mode 100644 docs/en/Modules/Organization-Units.md create mode 100644 docs/en/Modules/Users.md diff --git a/docs/en/Modules/Client-Simulation.md b/docs/en/Modules/Client-Simulation.md new file mode 100644 index 0000000000..bc5d38e814 --- /dev/null +++ b/docs/en/Modules/Client-Simulation.md @@ -0,0 +1,3 @@ +# Client Simulation Module + +TODO \ No newline at end of file diff --git a/docs/en/Modules/Cms-Kit.md b/docs/en/Modules/Cms-Kit.md new file mode 100644 index 0000000000..e13f1e585b --- /dev/null +++ b/docs/en/Modules/Cms-Kit.md @@ -0,0 +1,3 @@ +# CMS Kit Module + +TODO \ No newline at end of file diff --git a/docs/en/Modules/Identity.md b/docs/en/Modules/Identity.md index b38f59c03b..a88087eaa8 100644 --- a/docs/en/Modules/Identity.md +++ b/docs/en/Modules/Identity.md @@ -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(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. \ No newline at end of file diff --git a/docs/en/Modules/Index.md b/docs/en/Modules/Index.md index ae17c15c8a..9d0199f4c3 100644 --- a/docs/en/Modules/Index.md +++ b/docs/en/Modules/Index.md @@ -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. \ No newline at end of file +[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. \ No newline at end of file diff --git a/docs/en/Modules/Organization-Units.md b/docs/en/Modules/Organization-Units.md deleted file mode 100644 index b27e038528..0000000000 --- a/docs/en/Modules/Organization-Units.md +++ /dev/null @@ -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. diff --git a/docs/en/Modules/Users.md b/docs/en/Modules/Users.md new file mode 100644 index 0000000000..1cb0f4b701 --- /dev/null +++ b/docs/en/Modules/Users.md @@ -0,0 +1,3 @@ +# Users Module + +TODO \ No newline at end of file diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 1eb4089c4b..58f0c55a0c 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -914,7 +914,72 @@ }, { "text": "Application Modules", - "path": "Modules/Index.md" + "items": [ + { + "text": "Overall", + "path": "Modules/Index.md" + }, + { + "text": "Account", + "path": "Modules/Account.md" + }, + { + "text": "Audit Logging", + "path": "Modules/Audit-Logging.md" + }, + { + "text": "Background Jobs", + "path": "Modules/Background-Jobs.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": "Release Information", From 520677699e25f91ed4bab644bd319e947005e858 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 30 Nov 2020 16:38:49 +0300 Subject: [PATCH 5/5] Update docs-nav.json --- docs/en/docs-nav.json | 41 ++++++++++++++++++----------------------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 58f0c55a0c..99a2829636 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -97,29 +97,6 @@ { "text": "Community Articles", "path": "https://community.abp.io/" - } - ] - }, - { - "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": "Migrating from the ASP.NET Boilerplate", @@ -374,6 +351,24 @@ { "text": "Plug-In Modules" }, + { + "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": "Best Practices", "path": "Best-Practices/Index.md"