Issue:
feat(users): support tenant level users

- Add api to create tenant_admin
- Create org by tenant level user
- Support tenant entity: tenant level roles/permission 

Resolution:
<think>
PR Context:
- Title: feat(users): add support for tenant level users
- Merged: 2024-12-06T13:19:57Z
- Files changed: 22 files
- Commits: 15 commits

Implementation approach:
## Type of Change
<!-- Put an `x` in the boxes that apply -->

- [ ] Bugfix
- [x] New feature
- [ ] Enhancement
- [ ] Refactoring
- [ ] Dependency updates
- [ ] Documentation
- [ ] CI/CD

## Description
- Add api to create tenant users
- Add api to create orgs
- Support tenant level entity for the user hierarchy

A tenant level user should see dashboard as seen by the org admin. He will be pinned to one org, merchant and profile. And he can switch between any org in the given ten
</think>

To implement this, you'll need to modify:


**Detailed Implementation:**


**Commit 1:** feat(users): add support for tenant level users (#6708)
Co-authored-by: hyperswitch-bot[bot] <148525
Files to modify:


**crates/api_models/src/events/user.rs**
  Modify existing code

**crates/api_models/src/user.rs**
  Add:
    - struct: pub::CreateTenantUserRequest
    - struct: pub::UserOrgMerchantCreateRequest

**crates/common_enums/src/enums.rs**
  Modify existing code

**crates/common_utils/src/consts.rs**
  Modify existing code

**crates/diesel_models/src/query/merchant_account.rs**
  Add:
    - function: pub::list_all_merchant_accounts

**crates/router/src/analytics.rs**
  Modify existing code

**crates/router/src/consts/user.rs**
  Modify existing code

**crates/router/src/core/user.rs**
  Add:
    - function: pub::create_tenant_user
    - function: pub::create_org_merchant_for_user

**crates/router/src/core/user_role.rs**
  Modify existing code

**crates/router/src/core/user_role/role.rs**
  Modify existing code

**crates/router/src/db/kafka_store.rs**
  Add:
    - function: private::list_merchant_and_org_ids

**crates/router/src/db/merchant_account.rs**
  Add:
    - function: private::list_merchant_and_org_ids
    - function: private::list_merchant_and_org_ids

**crates/router/src/routes/app.rs**
  Modify existing code

**crates/router/src/routes/lock_utils.rs**
  Modify existing code

**crates/router/src/routes/user.rs**
  Add:
    - function: pub::create_tenant_user
    - function: pub::user_org_create

**crates/router/src/services/authorization/permissions.rs**
  Modify existing code

**crates/router/src/services/authorization/roles/predefined_roles.rs**
  Modify existing code

**crates/router/src/types/domain/user.rs**
  Add:
    - function: private::from
    - function: private::foreign_from
    - function: private::from
    - function: private::try_from
    - function: private::from
    - struct: pub::MerchantAccountIdentifier
    - struct: pub::TenantLevel
    - impl: impl From<(user_api::CreateTenantUserRequest, MerchantAccountIdentifier)> for NewUserOrganization
    - impl: impl ForeignFrom<api_models::user::UserOrgMerchantCreateRequest> for diesel_models::organization::OrganizationNew
    - impl: impl From<(user_api::CreateTenantUserRequest, MerchantAccountIdentifier)> for NewUserMerchant
    - impl: impl TryFrom<(user_api::CreateTenantUserRequest, MerchantAccountIdentifier)> for NewUser
    - impl: impl From<TenantLevel> for EntityInfo

**crates/router/src/types/domain/user/decision_manager.rs**
  Modify existing code

**crates/router/src/utils/user.rs**
  Add:
    - function: pub::create_merchant_account_request_for_org

**crates/router/src/utils/user_role.rs**
  Add:
    - function: pub::get_single_org_id

**crates/router_env/src/logger/types.rs**
  Modify existing code