Skip to content

モデル

Lase が提供する Eloquent モデルの一覧です。すべて CodebaseJp\Lase\Models 名前空間に属します。

コアモデル

Tenant

テナント(組織)を表すモデルです。

カラム説明
id主キー
public_id外部公開用 ID(プレフィックス: tnt_
codeサブドメインに使用されるユニークコード
nameテナント名
email連絡先メールアドレス
tel電話番号
contact_person担当者名
logo_pathロゴ画像パス
current_subscription_id現在のサブスクリプション ID

TIP

テナントオブジェクトはキャッシュ(tenant:{code}、TTL 60 分)に保存され、保存・削除時に自動でキャッシュが破棄されます。

User

テナントユーザーを表すモデルです。

カラム説明
id主キー
public_id外部公開用 ID(プレフィックス: usr_
name表示名
emailメールアドレス
statusステータス (UserStatus Enum)
deleted_atソフトデリート

AdminUser

管理画面にアクセスできる管理者ユーザーを表すモデルです。

カラム説明
id主キー
public_id外部公開用 ID
name表示名
emailメールアドレス
statusステータス (AdminUserStatus Enum)

TenantUser

テナントとユーザーの中間テーブルに対応するモデルです。テナントへの所属情報(ロール、ステータスなど)を保持します。

認証・招待

モデル説明
AdminUserInvitation管理者の招待レコード
TenantUserInvitationテナントユーザーの招待レコード
EmailChangeメールアドレス変更リクエスト

ロール・権限

モデル説明
AdminRole管理者ロール
AdminRolePermission管理者ロールの権限
AdminUserRole管理者とロールの紐付け
TenantRoleテナントロール
TenantRolePermissionテナントロールの権限
TenantUserRoleテナントユーザーとロールの紐付け

サブスクリプション・プラン

Plan はテナントをまたぐ共通カタログです(tenant_id を持ちません)。テナントに見せるプランは Plan::selectable(?Subscription $currentSubscription) スコープで絞ります。公開中のノーマルプランは常に対象で、トライアル契約中はトライアルプラン、スペシャルプラン契約中は契約中のプラン自体(非公開でも)が加わります。テナント API の一覧・詳細はどちらもこのスコープを通します。

Plan ──[1:N]── PlanFeature     (機能フラグ)
Plan ──[1:N]── PlanQuota       (利用上限)
Plan ──[N:M]── Option          (PlanOptionGroup を介して)

Subscription ──[N:1]── Plan
Subscription ──[N:M]── Option  (SubscriptionOption)
Subscription ──[1:N]── SubscriptionFeature
Subscription ──[1:N]── SubscriptionQuota
Subscription ──[1:N]── SubscriptionUsage

Tenant ──[1:1]── Subscription  (current_subscription_id)
Tenant ──[1:N]── GrantedFeature
Tenant ──[1:N]── GrantedQuota
Tenant ──[1:N]── GrantedUsage
モデル説明
Plan料金プラン
PlanFeatureプランの機能フラグ
PlanQuotaプランの利用上限
Optionオプション機能
OptionFeatureオプションの機能フラグ
OptionQuotaオプションの利用上限
Addonアドオン
AddonFeatureアドオンの機能フラグ
AddonQuotaアドオンの利用上限
Subscriptionサブスクリプション
SubscriptionFeatureサブスクリプションの機能フラグ
SubscriptionQuotaサブスクリプションの利用上限
SubscriptionUsageサブスクリプションの利用量
TenantAddonテナントのアドオン紐付け
GrantedFeatureテナントに直接付与された機能フラグ(テーブル: granted_features
GrantedQuotaテナントに直接付与された利用上限(テーブル: granted_quotas
GrantedUsageテナントの利用量(テーブル: granted_usages

統計・利用量

モデル説明
DailyUsage日次利用量
MonthlyUsage月次利用量

コンテンツ

モデル説明
Announcementお知らせ
AdminImage管理者がアップロードした画像
AdminMail管理者が作成したメール
AdminMailDeliveryメール配信記録
Inquiryお問い合わせ
BlockedDomain禁止ドメイン
BlockedTenantCodeテナントコードとして使用不可の予約語(テーブル: blocked_tenant_codes、初期データはマイグレーションで投入)
ActivityLog操作ログ

Concerns (Trait)

BelongsToTenant

テナントに属するモデル(tenant_id を持つモデル)に付与します。テナントのコンテキスト配下では、自テナントのレコードだけを対象にするグローバルスコープ(tenant)が適用されます。

php
class Subscription extends Model
{
    use HasFactory, HasUlids, SoftDeletes, BelongsToTenant;
}

コンテキストの有無は IdentifyTenant が現在のテナントを解決したかどうかで決まります。

実行文脈スコープ
テナント API(routes/api/tenant.php適用される
管理画面・公開ページ適用されない(IdentifyTenant を通らないため)
コンソール・キュー適用されない(HTTP リクエストがないため)

これにより、ルートモデルバインディングが他テナントのレコードを解決しなくなります404 になります)。テナント API で ID を受け取るエンドポイントの多くはこの経路を通るため、テナント境界の一次防御として機能します。

意図的にテナントをまたいで参照する場合は、標準のグローバルスコープの外し方を使います。

php
Subscription::withoutGlobalScope('tenant')->findOrFail($id);

特定のテナントを明示して絞る場合は forTenant() を使います(スコープの有無に関わらず動作します)。

php
Subscription::forTenant($tenantId)->get();

WARNING

tenant_id を持っていても、テナントに属さないモデルには付与しません。Usertenant_id_to_be_deleted は移行前の残骸)、AdminMail(送信先テナントを持つ管理側のエンティティ)、MCP の OAuth 認可コード・トークン(認可サーバーがテナントのコンテキスト外で参照する)が該当します。

HasPublicId

public_id カラムを持つモデルに付与します。作成時に自動で {prefix}_{nanoid} 形式の ID が生成されます。

php
protected string $publicIdPrefix = 'tnt_';