From ea41ce85db0c020665e6462fa7e9a862e4e54dee Mon Sep 17 00:00:00 2001 From: Gao Sun Date: Sun, 19 Nov 2023 23:27:38 +0800 Subject: [PATCH] docs: init organization docs --- docs/docs/recipes/organizations/README.mdx | 33 +++++++ .../assets/organization-example.webp | Bin 0 -> 19874 bytes .../assets/organization-members.webp | Bin 0 -> 7132 bytes .../assets/organization-permission.webp | Bin 0 -> 5416 bytes .../assets/organization-role.webp | Bin 0 -> 11902 bytes .../organizations/configure-organizations.mdx | 67 ++++++++++++++ .../organizations/impact-on-end-users.mdx | 11 +++ .../organizations/understand-how-it-works.mdx | 83 ++++++++++++++++++ src/components/Availability/index.module.scss | 10 +++ src/components/Availability/index.tsx | 57 ++++++++++++ 10 files changed, 261 insertions(+) create mode 100644 docs/docs/recipes/organizations/README.mdx create mode 100644 docs/docs/recipes/organizations/assets/organization-example.webp create mode 100644 docs/docs/recipes/organizations/assets/organization-members.webp create mode 100644 docs/docs/recipes/organizations/assets/organization-permission.webp create mode 100644 docs/docs/recipes/organizations/assets/organization-role.webp create mode 100644 docs/docs/recipes/organizations/configure-organizations.mdx create mode 100644 docs/docs/recipes/organizations/impact-on-end-users.mdx create mode 100644 docs/docs/recipes/organizations/understand-how-it-works.mdx create mode 100644 src/components/Availability/index.module.scss create mode 100644 src/components/Availability/index.tsx diff --git a/docs/docs/recipes/organizations/README.mdx b/docs/docs/recipes/organizations/README.mdx new file mode 100644 index 00000000000..618c7199ff5 --- /dev/null +++ b/docs/docs/recipes/organizations/README.mdx @@ -0,0 +1,33 @@ +--- +sidebar_position: 7.1 +--- + +import Availability from '@components/Availability'; + +# 🏢 Organizations (Multi-tenancy) + + + +Organization is particularly effective in business-to-business (B2B) apps. In addtion to individual consumers, business clients can also consist of teams, organizations, or entire companies. Logto introduces the entity of an organization as a foundational element for authentication and authorization in B2B products, for example, SaaS. + +Even if your product is not B2B, organization can still be useful for collaboration features, such as sharing resources with other users. + +With this fundamental element, you can build the must-have features for multi-tenancy apps, such as: + +- A product that can be used by multiple organizations. +- Organization member provision on an invitation or just-in-time basis. +- Access controls that defined by roles assigned to members within an organization. +- Single Sign-On (SSO) authentication experience. + +The term "organization" is also used in other forms, such as "workspace", "team", "company", etc. In Logto, we use "organization" as the generic term to represent the concept of multi-tenancy. + +## Before we start + +Hold on, you may heard of some products use the term "multi-tenancy" to represent the identity isolation: each tenant has its own set of users, permissions, and data. + +It may be counterintuitive, but in fact, "multi-tenancy" indicates the contrary: multiple tenants are sharing resources in a single instance. For example, in Notion (a popular collaboration tool): + +- You can create and join multiple workspaces with one account, instead of sign up for each workspace with different accounts. +- For each workspace, Notion defines a **same set** of access levels: "Worksapce owner" and "member", while you may expect different access levels for different workspaces. + +For more information, see our [blog post about tenancy models](https://blog.logto.io/tenancy-models/). diff --git a/docs/docs/recipes/organizations/assets/organization-example.webp b/docs/docs/recipes/organizations/assets/organization-example.webp new file mode 100644 index 0000000000000000000000000000000000000000..2d0cc1ff51f477a105e78f67ee2ead987914920f GIT binary patch literal 19874 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�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 literal 0 HcmV?d00001 diff --git a/docs/docs/recipes/organizations/assets/organization-members.webp b/docs/docs/recipes/organizations/assets/organization-members.webp new file mode 100644 index 0000000000000000000000000000000000000000..90ae8ac5c5bc50dbc8682bd9800bb79df2e26abe GIT binary patch literal 7132 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 literal 0 HcmV?d00001 diff --git a/docs/docs/recipes/organizations/assets/organization-permission.webp b/docs/docs/recipes/organizations/assets/organization-permission.webp new file mode 100644 index 0000000000000000000000000000000000000000..b4dc731ba1baa63c07943e7650fcd25e6388bb85 GIT binary patch literal 5416 zcmcInWlS87lU>~17GJEez!s<2VlBn36sNc@?i6<~?ogaUp-6#6iaW)vuvq!w&@NEi z*=zE@T<&ro?!(gBH`3>>t0-eQnE)EX4AwKLL@lFO zAKj!%uYAx7v&*3V{)^AYAi?_T2pGWLUgXnDr+i|y{3C6vl@X#GeDA27*Yjl2cita7 z$$qz*ob`62$H3!}i&?)ho47aaND+;DT@^>P`-QpkjjBx`T&P2pHj_2U=V6{Bhg=6=w zsHSHjKmkRuNfH~vd0%pPo%oa%GVzr9c#b&P4Y3KadlZ@oxsqAyRJ?&a`d*Tln~lk2 zgakcx+&kP>jxc^g6(?dRsb{lwF?VX1oiMNZ-{8Zg z%KtIv-%IV;iifk~Cpt~@OnC%P{T=+ij1L`FY&G%GeEQ$O{m`9K>i8oR!_Klli+$b3 zsRKqJGC5Vx!>Nn3S>N?$|JnE~-gk5*S1%Ephl?H76y3`HytHF^FqWZ<^G-G?5e4e7 z9@8`3<{+xHBV>r7rN}6?t?6Y4Dw*rKjjBp z+++K&y9VGR+_Q2zV zuUsPJ)$21OE5B*Ye~oSG8+sb~2ucyC#;q2j5n39i7_N$bB=)O$5y<14EUe0!nJoo7 zA#MD%sLyt#zrDtz_s~=x0?Rem0IGGd(hOSbz*>ZuF($SQ8On0eL^JS9Zhl0WIn1D& zJ@Yw_{LIFH$?|qTc1Y2?LbI)52YWBz3bja`8Pys~CYgoc3JA+8bjG0CD5Oe;^*iLO7M_)PK0LZOiy2PlWpFrTTtXfB(|uH#*tn z6dN0N4V582j&@YOXU&%Zw-+Bhs|h;+i|)i?G#vS-Du}p6zx7pJgAwCBWBF4ZEiwY* z;^AWE$?NoUvU!4F_0-^1D9xoDL%FIerlXEUs)cKn5U=&jQ%MOM$f>DSf#rUmiMr|Z z2H;XPoF}G(jk89oHEZ&ObpCSlWrF`NXAJUWKH1&&sH~n&sb~MkmeL=Q2+qFi*)GWE zdj+9deG-fKK=Gf}FV=`N;dI}FOo@AbQ(f7Yg)+Pr`WB1p|ARaKCj|VjO>);{0Z*vU zY5?@#zf@5uH75W@Gaez;C~xTBi-Q&!mhlQ*Aj2y3q1^);kc=#2;0CV=ski$MX6Z*| z(1AgPmIqx!U|TKw3fwNNB&`z?2DQaEO){rJ+}uv|lC8|Ou?E5TJxd5~uLi8oj4m^o zSie2TG}w#4bimM}m_r4f#6gisokmOs%bQH;B|H|LmN*?xZ_w93jU@V7$5C%?efijA6HI94z|R!?d7VY?&b5UN22*|&oSst+BU=kyM3wRo%m=ep`{d_2f#rR!LyqX+HMdE{LB8H(bTE zmShU;8dQSwfB|txkByHNu7}HHF89G1kIuIz+NMim_crP{w^MD@=;(3qL|sL8nMvAb z`I{41zDPQ3F^=QB8*ronn*~ENOgOed^^7iY%Q8g<61Y8ACbk+ht`zqT@DV+snF?k3 zs-|S!1U`1c^*}5Yt!B`i4Jr7eX187=u1r#Lccq!f0$IUKQMRVHU4*She3+q#v9=z9 zdzof)m+v|ZK$`h-2B}@CkdZ~0T*z6?p|7oR-{`;@!aTmC%>bn#X?1jHQL?=0LRzEeBf8z zQpHli{Zhr-E^W|835+H*;QDh0obtXKmⅅ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 Q?El>RuYoCSMG64?U$PoufdBvi literal 0 HcmV?d00001 diff --git a/docs/docs/recipes/organizations/configure-organizations.mdx b/docs/docs/recipes/organizations/configure-organizations.mdx new file mode 100644 index 00000000000..205e7531c0e --- /dev/null +++ b/docs/docs/recipes/organizations/configure-organizations.mdx @@ -0,0 +1,67 @@ +--- +sidebar_position: 2 +--- + +# Configure organizations + +## Configure via Console + +We'll go through the process of configuring the organizations feature via Logto Console (https://cloud.logto.io/). + +### Start setting up your organization feature + +When you activate the organization feature, you'll be guided through essential settings like setting up organization permissions, roles, and creating your first organization. You will gain a clearer understanding of how organizations function within Logto. After the initial setup, you can add members, assign roles within the organization, or refine your organization template. + +In the organization list, you can create an organization and configure its details. On the organization details page, you can: + +1. Modify the organization's name and description. +2. Add members and assign them organization roles. +3. Remove a user's membership in the organization. +4. Delete the organization. +5. Access a guide to understand more about organizations and the organization template. + +### Adding members and assigning organization roles + +Users can hold one or more roles. When adding members to an organization, you have the option to assign roles to multiple users at once. If you leave this assignment blank, the added users will not receive any roles. + +In the user management section, on the user detail page, you can see which organizations the users belong to and what organization roles they have. + +### Configure organization template + +The organization template consists of permissions and roles, which can be edited freely; any changes will affect users with those roles across all organizations. + +## Configure via Management API + +Everything you can do in Console can also be done through Management API. This includes, but not limited to: + +1. Create, delete, or edit an organization. +2. Add users to the organization. +3. Remove users from the organization. +4. Manage organization template: + +- Add, delete, or edit organization roles. +- Add, delete, or edit organization permissions. + +5. Assign or remove user's organization roles. + +For a complete list of capabilities, please refer to our [API references](https://openapi.logto.io/group/endpoint-organizations). + +### Example: Develop a platform or interface that enables your clients to manage identities within their organization + +A common scenario for your product involves having both admins and members. They will manage resources and identities at different levels. + +| Role | Permissions | +| ------ | --------------------------------------------------------------- | +| Admin | Able to invite users to and remove users from the organization. | +| Member | Only able to invite users to the organization. | + +So we can define the following organization template: + +- Organization permissions: `invite:users`, `remove:users`. +- Organization roles: + - `admin` with permissions `invite:users` and `remove:users`. + - `member` with permission `remove:users`. + +You can use `POST /organization-scopes` in Management API to create the organization permissions first, then use `POST /organization-roles` to create roles. + +After organization template is set, you may also create two APIs in your service that call Management API under the hood for inviting and removing users in a specific organization. The APIs in your service should check organizaiton acces token to ensure the user has the right access. See Organization RBAC for details. diff --git a/docs/docs/recipes/organizations/impact-on-end-users.mdx b/docs/docs/recipes/organizations/impact-on-end-users.mdx new file mode 100644 index 00000000000..d7bcdb5371c --- /dev/null +++ b/docs/docs/recipes/organizations/impact-on-end-users.mdx @@ -0,0 +1,11 @@ +--- +sidebar_position: 3 +--- + +# Impact on end-user sign-in experience + +Currently, there's no impact to the end-user sign-in experience since Logto decouples authentication and authorization. For exmaple, Enterprise SSO (single sign-on) is based on email domains, not organizations. + +As the user signs in, they can get the access to all organizations with membership. For detailed information, please refer to Organization RBAC. + +We may add advanced features for organizations that change the sign-in experience in the future. Please diff --git a/docs/docs/recipes/organizations/understand-how-it-works.mdx b/docs/docs/recipes/organizations/understand-how-it-works.mdx new file mode 100644 index 00000000000..9756f00af30 --- /dev/null +++ b/docs/docs/recipes/organizations/understand-how-it-works.mdx @@ -0,0 +1,83 @@ +--- +sidebar_position: 1 +--- + +import organizationExmaple from './assets/organization-example.webp'; +import organizationMembers from './assets/organization-members.webp'; +import organizationPermission from './assets/organization-permission.webp'; +import organizationRole from './assets/organization-role.webp'; + +# Understand how organizations work + +## Organization + +Organization consists of a group of users (identities). It can represent the teams, business customers, and partner companies who can access to your application. + +The introduction of an organization as an entity is important, as it not only groups users but also provides a context for tenant isolation in multi-tenant apps. To learn more about tenant isolation, check out our multi-tenant application best practice. + +## Organization member + +In Logto, a user who has the membership of an organization is referred to as an organization member (i.e. member) within that organization's context. + +Organization member + +## Organization permission + +Organization permission refers to the authorization to perform an action in the context of organization. An organization permission should be represented as a meaningful string, also serving as the name and unique identifier. + +For example, `edit:resource`. + +Organization permission + +Organization permissions are not meaningful without the context of an organization. For example, `edit:resource` in the context of organization `org1` is different from `edit:resource` in the context of organization `org2`. + +## Organization role + +Organization role is a grouping of organization permissions that can be assigned to users. The permissions must come from the predefined organization permissions. + +Organization role + +Organization roles are not meaningful without the context of an organization. For example, `admin` in the context of organization `org1` is different from `admin` in the context of organization `org2`. + +## Organization template + +Organization template refers to a collection of organization permissions and roles that apply to every organization. + +Think of a typical collaboration app, and they naturally share the same access control “template” that defines access levels and what users can do in the organization. We call it "organization template” in Logto. + +Let’s take an example to understand how everything connects: + +**John**, **Sarah** are in different organizations with different roles in the context of different organizations. + +Organization example with template + +From this diagram, here are some info you need to know: + +1. **John** is affiliated with two organizations, using the email "john@email.com" as his unique identifier. He holds the position of `admin` in `Organization A` and is a `guest` in `Organization B`. +2. **Sarah** is associated with a single organization and uses the email "sarah@email.com" as her unique identifier. She is the `admin` of `Organization B`. +3. The roles of `Admin`, `Member`, and `Guest` are designated within organizations and these roles are consistent across various organizations. +4. Additional roles can be created within the organization template settings. These newly created roles will be applied and shared across all organizations. + +:::note +đź’ˇ In Logto, the organization template serves as an access control model tailored for organizations. While it's based on the RBAC (role-based access control) model, it differs from the API resource RBAC feature. + +When you need to design roles and permissions specific to an organization, use the organization template (organization RBAC). + +You can use both organization RBAC and API resource RBAC in Logto, allowing a more robust approach to meet your specific business and product requirements. For details on API resource RBAC, refer to [this section](https://docs.logto.io/docs/recipes/rbac/). +::: + +## Managing identities in organizations + +The organization template in Logto is intended to secure isolated resources at the organizational level, ensuring users in different roles have the right access. + +You may notice that the organization template doesn’t define identity management, such as which role can invite or remove users in an organization, since it varis for different products and business needs. + +While we are working on a productized solution for organization idenitty management, you can use the Management API to tailor a solution. For detailed guidance on using the management API for this, please refer to this section. diff --git a/src/components/Availability/index.module.scss b/src/components/Availability/index.module.scss new file mode 100644 index 00000000000..a7db70d38c3 --- /dev/null +++ b/src/components/Availability/index.module.scss @@ -0,0 +1,10 @@ +.availability { + display: flex; + align-items: center; + gap: 8px; + margin: 12px 0; + + img { + border-radius: 0; + } +} diff --git a/src/components/Availability/index.tsx b/src/components/Availability/index.tsx new file mode 100644 index 00000000000..e22d4de8a17 --- /dev/null +++ b/src/components/Availability/index.tsx @@ -0,0 +1,57 @@ +import styles from './index.module.scss'; + +/** A type that represents a semantic version for new features (major.minor). */ +type MinorVersion = { + major: number; + minor: number; +}; + +/** A type that represents the feature is coming soon. */ +type ComingSoon = 'comingSoon'; + +type Props = { + /** Whether the feature is available in Logto Cloud. */ + cloud: boolean | ComingSoon; + /** + * Whether the feature is available in Logto OSS. If it is a `MinorVersion`, + * it means the feature is available in Logto OSS since the specified version. + */ + oss: boolean | ComingSoon | MinorVersion; +}; + +const getDisplayText = (status: boolean | ComingSoon | MinorVersion) => { + if (status === 'comingSoon') { + return 'coming soon-blue'; + } + + if (typeof status === 'boolean') { + return status ? 'Yes-green' : 'N/A-gray'; + } + + return `v${status.major}.${status.minor}-green`; +}; + +/** + * A component that shows the availability of the feature in Logto Cloud and Logto OSS. + * Open source availability can have a version number. + */ +const Availability = ({ cloud, oss }: Props) => { + return ( +
+ {cloud && ( + Cloud availability + )} + {oss && ( + OSS availability + )} +
+ ); +}; + +export default Availability;