Add tenant-aware user-engine behavior
This commit is contained in:
parent
c1b02b8bba
commit
2f9272f39d
8 changed files with 533 additions and 20 deletions
|
|
@ -15,9 +15,11 @@ from user_engine.domain import (
|
|||
AuthorizationRequest,
|
||||
Catalog,
|
||||
ExternalIdentity,
|
||||
Membership,
|
||||
OutboxEvent,
|
||||
ProfileScope,
|
||||
ProfileValue,
|
||||
TenantAccount,
|
||||
User,
|
||||
)
|
||||
|
||||
|
|
@ -37,6 +39,8 @@ class InMemoryUserEngineStore:
|
|||
users: dict[str, User] = field(default_factory=dict)
|
||||
accounts: dict[str, Account] = field(default_factory=dict)
|
||||
identities: dict[tuple[str, str], ExternalIdentity] = field(default_factory=dict)
|
||||
tenant_accounts: dict[tuple[str, str], TenantAccount] = field(default_factory=dict)
|
||||
memberships: dict[str, Membership] = field(default_factory=dict)
|
||||
applications: dict[str, Application] = field(default_factory=dict)
|
||||
bindings: dict[str, ApplicationBinding] = field(default_factory=dict)
|
||||
catalogs: dict[str, Catalog] = field(default_factory=dict)
|
||||
|
|
@ -63,6 +67,12 @@ class InMemoryUserEngineStore:
|
|||
def save_identity(self, identity: ExternalIdentity) -> None:
|
||||
self.identities[identity.identity_key] = identity
|
||||
|
||||
def save_tenant_account(self, account: TenantAccount) -> None:
|
||||
self.tenant_accounts[(account.tenant, account.user_id)] = account
|
||||
|
||||
def save_membership(self, membership: Membership) -> None:
|
||||
self.memberships[membership.membership_id] = membership
|
||||
|
||||
def save_application(self, application: Application) -> None:
|
||||
self.applications[application.application_id] = application
|
||||
|
||||
|
|
@ -83,6 +93,26 @@ class InMemoryUserEngineStore:
|
|||
def user_account(self, user_id: str) -> Account | None:
|
||||
return self.accounts.get(user_id)
|
||||
|
||||
def tenant_account(self, tenant: str, user_id: str) -> TenantAccount | None:
|
||||
return self.tenant_accounts.get((tenant, user_id))
|
||||
|
||||
def memberships_for_user(
|
||||
self, user_id: str, *, tenant: str | None = None
|
||||
) -> tuple[Membership, ...]:
|
||||
return tuple(
|
||||
membership
|
||||
for membership in self.memberships.values()
|
||||
if membership.user_id == user_id
|
||||
and (tenant is None or membership.tenant == tenant)
|
||||
)
|
||||
|
||||
def memberships_for_tenant(self, tenant: str) -> tuple[Membership, ...]:
|
||||
return tuple(
|
||||
membership
|
||||
for membership in self.memberships.values()
|
||||
if membership.tenant == tenant
|
||||
)
|
||||
|
||||
def values_for_user(self, user_id: str) -> tuple[ProfileValue, ...]:
|
||||
return tuple(
|
||||
value for value in self.profile_values.values() if value.user_id == user_id
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue