Enum
Lase が提供する PHP Enum の一覧です。すべて CodebaseJp\Lase\Enums 名前空間に属します。
拡張メソッド
各 Enum には、ケースに対応する値を返すメソッドが定義されています。
label()
UI に表示するための日本語ラベルを返します。ほぼすべての Enum が実装しています。
UserStatus::ACTIVE->label(); // '利用中'
PlanType::TRIAL->label(); // 'トライアルプラン'group()
ActivityLogType のみが実装しています。ログをグループ分けするための文字列('admin' / 'tenant' / 'common')を返します。管理画面でのフィルタリングに使用されます。
ActivityLogType::ADMIN_LOGIN->group(); // 'admin'
ActivityLogType::TENANT_LOGIN->group(); // 'tenant'
ActivityLogType::COMMON_LOGIN->group(); // 'common'toSql()
AnalyticsAggregation のみが実装しています。集計方法に対応する SQL 関数文字列を生成します。
AnalyticsAggregation::SUM->toSql('amount'); // 'SUM(amount)'
AnalyticsAggregation::COUNT->toSql('id'); // 'COUNT(id)'アプリ側での拡張
PHP の enum は継承できないため、Lase の Enum を直接継承して拡張することはできません。アプリ側で独自の値を追加する必要がある Enum は、アプリ側に別の Enum を定義して config('lase.enums.*') で差し替えます。
権限チェックやログ記録は文字列値の比較で行うため、型(クラス)が異なっていても値が一致すれば正しく動作します。
書き写しは不要
tenant_permission と activity_type は Lase の値をアプリ側の Enum に書き写す必要がありません。解決を担うクラスが「アプリ側の Enum → Lase の Enum」の順に解決するため、Lase に値が追加されてもアプリ側の追従は不要です。
| Enum | 解決するクラス | cast |
|---|---|---|
tenant_permission | CodebaseJp\Lase\Auth\TenantPermissionResolver | Casts\TenantPermissionCast |
activity_type | CodebaseJp\Lase\Utils\ActivityLogTypeResolver | Casts\ActivityLogTypeCast |
アプリ側の Enum には自分の値だけを定義してください。
解決の仕組みが無い Enum
上記以外の Enum を差し替えた場合は、Lase 側に追加された値を追従してください。独自の値が必要ないアプリは config('lase.enums.*') を上書きしないでください(既定値は Lase の Enum なので、追加された値がそのまま使えます)。
activity_type を拡張する
アプリ側の Enum は CodebaseJp\Lase\Contracts\HasActivityLogGroup を実装してください。管理画面の操作ログはグループ(common / tenant / admin)で絞り込むため、これを実装していない Enum のケースは絞り込みに出てきません(例外にはなりません)。
use CodebaseJp\Lase\Contracts\HasActivityLogGroup;
// アプリ側の enum(例)。Lase のケースは書き写さない
enum MyActivityLogType: string implements HasActivityLogGroup
{
case MY_CUSTOM_ACTION = 'MY_CUSTOM_ACTION';
public function group(): string
{
return 'admin';
}
}// config/lase.php
'enums' => [
'activity_type' => \App\Enums\MyActivityLogType::class,
],$log->type は、アプリ側と Lase のどちらの Enum にも無い値のときだけ記録された文字列のまま返ります。監査の記録を消さないためで、JSON に出したときの表現は Enum のときと同じです。型が値によって変わるため、比較は ->value で行ってください。
付帯情報(metadata)
activity_logs.metadata に任意の付帯情報を JSON で残せます。種別だけでは「何に対して」「なぜ」が残らないため、対象の識別子や理由を入れてください。
$this->activityLogService->recordWithMetadata(
MyActivityLogType::MY_CUSTOM_ACTION,
auth()->id(),
$tenant->id,
['messageId' => $message->id, 'note' => $note],
$request,
);付帯情報が要らない場合は、これまでどおり record() を使います。record() の引数は増やしていないため、ActivityLogService を継承して record() を上書きしているコードはそのまま動きます。
検索の主軸は type / user_id / tenant_id のままで、metadata は表示と調査のための付帯情報として扱います(索引は張っていません)。
組織の操作ログに残す
組織の画面での操作は recordForTenant() で残します。操作した人と組織は、リクエスト(ログイン中のユーザーと、IdentifyTenant が決めた組織)から取ります。何に対して行ったかを、人が読める文(summary)で渡してください。組織の操作ログの画面には、付帯情報のうち summary だけを出します。
app(ActivityLogService::class)->recordForTenant(
MyActivityLogType::TASK_EXPORT,
'「開発」のタスク 120件',
['operationIds' => $operationIds],
);組織の操作ログの画面の種別の選択肢には、グループが tenant の種別(Lase とアプリの両方)が並びます。アプリの種別は、フロントエンドでも ActivityLogGroups.TENANT を付けて登録してください(下の「フロントエンドの拡張」)。
フロントエンド(TypeScript)の拡張
TS の Enum はクラスなので継承できますが、values() は Object.values() で自身のプロパティだけを列挙します。継承しただけでは Lase の値が一覧に出ないため、エントリーポイントで registerAll() を使って Lase 側の Enum にマージします。
アプリ側の Enum には自分の値だけを定義します。Lase の値を書き写す必要はありません。
// resources/js/enums/TenantPermission.ts(アプリ側)
import { Enum } from '@codebase-jp/vase/enums';
export default class TenantPermission extends Enum<string> {
static MESSAGE_READ = new TenantPermission('message:read', 'メッセージの閲覧');
}// resources/js/tenant.ts(エントリーポイント)
import { TenantPermission as LaseTenantPermission } from '@codebase-jp/lase/enums';
import TenantPermission from './enums/TenantPermission.ts';
LaseTenantPermission.registerAll(TenantPermission.entries());これで LaseTenantPermission.values() が Lase の権限とアプリの権限の両方を返すようになります。Lase 側に権限が追加された場合も、アプリ側の変更は不要です。
Enum 一覧
ユーザー・認証
UserStatus
テナントユーザーのステータス。User モデルで使用されます。
| ケース | 値 | ラベル |
|---|---|---|
PENDING | PENDING | 仮登録 |
ACTIVE | ACTIVE | 利用中 |
SUSPENDED | SUSPENDED | 利用停止中 |
WITHDRAWN | WITHDRAWN | 退会済 |
AdminUserStatus
管理者ユーザーのステータス。AdminUser モデルで使用されます。
| ケース | 値 | ラベル |
|---|---|---|
ACTIVE | ACTIVE | 利用中 |
SUSPENDED | SUSPENDED | 利用停止中 |
AdminStatus
管理者(Admin)エンティティのステータス。
| ケース | 値 | ラベル |
|---|---|---|
INTERIM | INTERIM | 仮登録 |
ACTIVE | ACTIVE | 利用中 |
INACTIVE | INACTIVE | 利用停止中 |
ARCHIVED | ARCHIVED | アーカイブ済 |
AdminType
管理者ユーザーの種別。
| ケース | 値 | ラベル |
|---|---|---|
SUPERUSER | SUPERUSER | スーパーユーザー |
NORMAL | NORMAL | 通常 |
TenantUserStatus
テナントへの所属ステータス。TenantUser モデルで使用されます。
| ケース | 値 | ラベル |
|---|---|---|
ACTIVE | ACTIVE | 利用中 |
SUSPENDED | SUSPENDED | 利用停止中 |
招待
AdminUserInvitationStatus
管理者ユーザーの招待ステータス。AdminUserInvitation モデルで使用されます。
| ケース | 値 | ラベル |
|---|---|---|
PENDING | PENDING | 招待中 |
ACCEPTED | ACCEPTED | 参加済 |
DECLINED | DECLINED | 辞退済 |
REVOKED | REVOKED | 招待取消済 |
TenantUserInvitationStatus
テナントユーザーの招待ステータス。TenantUserInvitation モデルで使用されます。
| ケース | 値 | ラベル |
|---|---|---|
PENDING | PENDING | 招待中 |
ACCEPTED | ACCEPTED | 参加済 |
DECLINED | DECLINED | 辞退済 |
REVOKED | REVOKED | 招待取消済 |
権限
AdminPermission
管理者ロールの権限値。AdminRolePermission モデルで使用されます。
| ケース | 値 | ラベル |
|---|---|---|
ROOT | * | 全権限 |
TenantPermission
テナントユーザーのロール権限値。TenantRolePermission モデルで使用されます。
アプリ側で独自の権限を追加する場合は、アプリ側での拡張を参照してください。
| ケース | 値 | 用途 |
|---|---|---|
ROOT | * | 全権限(オーナー) |
USER_READ | user:read | ユーザー・役割の閲覧 |
USER_WRITE | user:write | ユーザーの招待・更新・削除、役割の割り当て |
MCP_SERVICE_TOKEN_MANAGE | mcp.service-tokens:manage | MCP Service Token の管理 |
CONTRACT_READ | contract:read | 契約情報(プラン・請求・支払方法)の閲覧 |
CONTRACT_WRITE | contract:write | プラン変更・追加購入・支払方法の変更 |
ROOT(*)を持つ役割はオーナーとして扱われます。オーナーの付与・降格・削除はオーナーだけが行えます (TenantUserPolicy::changeRole / delete、TenantRolePolicy::assign)。
役割(tenant_roles)の登録
Lase が登録する役割はオーナー(* を持つ役割)だけです。マイグレーション 2026_01_19_100958_lase_insert_tenant_user_data で登録されます(ファイル名からは分かりにくいので注意)。
このオーナーの役割は削除しないでください。 Lase のオーナー保護(TenantRolePolicy::assign)はオーナーの役割を付与できるのをオーナーだけに限定するため、テナント内のオーナーが0人になると誰もオーナーの役割を付与できなくなります。テナント登録時のオーナー付与も役割の名前ではなく権限 * で解決するため、名前は自由に変更できますが、権限 * は外さないでください。
それ以外の役割は、名前と権限の組み合わせが製品ごとに異なるためアプリ側の責務です。シーダーではなくマイグレーションで登録してください(本番でシーダーを実行しない運用では、役割が存在せずアカウント管理の選択肢に「オーナー」しか出てこなくなります)。あとから権限を追加した場合も、既存の役割へ足すマイグレーションはアプリ側で用意します。
アプリがコードから役割を参照する場合(ユーザー登録時に付与する等)は、マイグレーションで code を付けて登録し、TenantRole::findByCode() で引いてください。名前は運用で変更できるため、名前で引かないでください。code を持つ役割は運営管理画面から削除できません(422)。code はアプリ名を前置して衝突を避けます(例: snaps.admin)。
// アプリ側のマイグレーション(例)
// 権限は Enum を参照せず、その時点の値を文字列で書き写す
$this->syncRole('配信担当', ['message:read', 'message:write']);マイグレーションから Enum を参照しない
過去のマイグレーションが Enum を参照していると、あとから case を消したり改名したときに そのマイグレーションが落ちます(新しい環境や migrate:fresh では必ず実行されるため)。 また TenantPermissionResolver::values() のように「その時点の全権限」を使うと、 実行した時期によって結果が変わり、環境間で役割の内容が食い違います。
なお TenantRoleSeeder は lase-dev で画面を動かすための開発用データです。アプリ側の役割の正としては使わないでください。
プラン・サブスクリプション
PlanStatus
プランのステータス。Plan モデルで使用されます。
| ケース | 値 | ラベル |
|---|---|---|
ACTIVE | ACTIVE | 利用中 |
INACTIVE | INACTIVE | 利用停止中 |
ARCHIVED | ARCHIVED | アーカイブ済 |
PlanType
プランの種別。Plan モデルで使用されます。
| ケース | 値 | ラベル |
|---|---|---|
TRIAL | TRIAL | トライアルプラン |
NORMAL | NORMAL | 通常プラン |
SPECIAL | SPECIAL | 特別プラン |
RegistrationPlanRuleStatus
登録時のプランの規則の状態。RegistrationPlanRule モデルで使用されます。
| ケース | 値 | ラベル |
|---|---|---|
ACTIVE | ACTIVE | 有効 |
INACTIVE | INACTIVE | 停止中 |
コンテンツ
AnnouncementStatus
お知らせのステータス。Announcement モデルで使用されます。
| ケース | 値 | ラベル |
|---|---|---|
DRAFT | DRAFT | 下書き |
PUBLISHED | PUBLISHED | 公開 |
ARCHIVED | ARCHIVED | アーカイブ済 |
AnnouncementType
お知らせの種別。Announcement モデルで使用されます。
| ケース | 値 | ラベル |
|---|---|---|
DEFAULT | DEFAULT | NEWS |
RELEASE | RELEASE | リリース |
TROUBLE | TROUBLE | 障害情報 |
InquiryStatus
お問い合わせの対応ステータス。Inquiry モデルで使用されます。
| ケース | 値 | ラベル |
|---|---|---|
OPEN | OPEN | 未対応 |
IN_PROGRESS | IN_PROGRESS | 対応中 |
CLOSED | CLOSED | 対応済 |
MailStatus
管理者メールの送信ステータス。AdminMail モデルで使用されます。
| ケース | 値 | ラベル |
|---|---|---|
DRAFT | DRAFT | 下書き |
SCHEDULED | SCHEDULED | 予約済 |
SENDING | SENDING | 送信中 |
SENT | SENT | 送信済 |
ERROR | ERROR | エラー |
MailDeliveryStatus
メール配信レコードのステータス。AdminMailDelivery モデルで使用されます。
| ケース | 値 | ラベル |
|---|---|---|
SENT | SENT | 送信済 |
MailTargetType
メール送信対象の種別。AdminMail モデルで使用されます。
| ケース | 値 | ラベル |
|---|---|---|
ALL | ALL | 全員 |
TENANT | TENANT | テナント |
USER | USER | ユーザー |
アクティビティログ
ActivityLogType
操作ログの種別。ActivityLog モデルで使用されます。拡張メソッドとして group() と label() を持ちます。
アプリ側で独自の種別を追加する場合は、アプリ側での拡張を参照してください。
| ケース | 値 | グループ | ラベル |
|---|---|---|---|
COMMON_LOGIN | COMMON_LOGIN | common | 共通:ログイン |
ADMIN_LOGIN | ADMIN_LOGIN | admin | 管理者:ログイン |
TENANT_LOGIN | TENANT_LOGIN | tenant | テナント:ログイン |
ADMIN_IMPERSONATE_START | ADMIN_IMPERSONATE_START | admin | 管理者:代理ログイン |
ADMIN_CREATE_TENANT | ADMIN_CREATE_TENANT | admin | 管理者:テナント作成 |
ADMIN_UPDATE_TENANT | ADMIN_UPDATE_TENANT | admin | 管理者:テナント更新 |
ADMIN_DELETE_TENANT | ADMIN_DELETE_TENANT | admin | 管理者:テナント削除 |
ADMIN_SUSPEND_TENANT | ADMIN_SUSPEND_TENANT | admin | 管理者:テナント緊急停止 |
ADMIN_RESUME_TENANT | ADMIN_RESUME_TENANT | admin | 管理者:テナント緊急停止の解除 |
ADMIN_REVIEW_TENANT_SCREENING | ADMIN_REVIEW_TENANT_SCREENING | admin | 管理者:登録審査の確認(metadata に tenantScreeningId と note) |
ADMIN_CREATE_SUBSCRIPTION | ADMIN_CREATE_SUBSCRIPTION | admin | 管理者:サブスクリプション作成 |
ADMIN_UPDATE_USAGE | ADMIN_UPDATE_USAGE | admin | 管理者:利用数の修正 |
ADMIN_CREATE_PLAN | ADMIN_CREATE_PLAN | admin | 管理者:プラン作成 |
ADMIN_UPDATE_PLAN | ADMIN_UPDATE_PLAN | admin | 管理者:プラン更新 |
ADMIN_UPDATE_USER | ADMIN_UPDATE_USER | admin | 管理者:ユーザー更新 |
ADMIN_DELETE_USER | ADMIN_DELETE_USER | admin | 管理者:ユーザー削除 |
ADMIN_UPDATE_ADMIN_USER | ADMIN_UPDATE_ADMIN_USER | admin | 管理者:管理者更新 |
ADMIN_DELETE_ADMIN_USER | ADMIN_DELETE_ADMIN_USER | admin | 管理者:管理者削除 |
ADMIN_INVITE_ADMIN_USER | ADMIN_INVITE_ADMIN_USER | admin | 管理者:管理者招待 |
ADMIN_REVOKE_ADMIN_USER_INVITATION | ADMIN_REVOKE_ADMIN_USER_INVITATION | admin | 管理者:管理者招待取り消し |
ADMIN_CREATE_ADMIN_ROLE | ADMIN_CREATE_ADMIN_ROLE | admin | 管理者:管理者ロール作成 |
ADMIN_UPDATE_ADMIN_ROLE | ADMIN_UPDATE_ADMIN_ROLE | admin | 管理者:管理者ロール更新 |
ADMIN_DELETE_ADMIN_ROLE | ADMIN_DELETE_ADMIN_ROLE | admin | 管理者:管理者ロール削除 |
ADMIN_CREATE_BLOCKED_DOMAIN | ADMIN_CREATE_BLOCKED_DOMAIN | admin | 管理者:ブロックドメイン追加 |
ADMIN_DELETE_BLOCKED_DOMAIN | ADMIN_DELETE_BLOCKED_DOMAIN | admin | 管理者:ブロックドメイン削除 |
ADMIN_CREATE_BLOCKED_TENANT_CODE | ADMIN_CREATE_BLOCKED_TENANT_CODE | admin | 管理者:禁止テナントコード追加 |
ADMIN_DELETE_BLOCKED_TENANT_CODE | ADMIN_DELETE_BLOCKED_TENANT_CODE | admin | 管理者:禁止テナントコード削除 |
ADMIN_CREATE_BLOCKED_IP | ADMIN_CREATE_BLOCKED_IP | admin | 管理者:禁止IPアドレス追加 |
ADMIN_DELETE_BLOCKED_IP | ADMIN_DELETE_BLOCKED_IP | admin | 管理者:禁止IPアドレス削除 |
ADMIN_CREATE_REGISTRATION_PLAN_RULE | ADMIN_CREATE_REGISTRATION_PLAN_RULE | admin | 管理者:登録時のプランの規則作成(metadata に registrationPlanRuleId) |
ADMIN_UPDATE_REGISTRATION_PLAN_RULE | ADMIN_UPDATE_REGISTRATION_PLAN_RULE | admin | 管理者:登録時のプランの規則更新(metadata に registrationPlanRuleId) |
ADMIN_DELETE_REGISTRATION_PLAN_RULE | ADMIN_DELETE_REGISTRATION_PLAN_RULE | admin | 管理者:登録時のプランの規則削除(metadata に registrationPlanRuleId) |
TENANT_REGISTER_WITH_PLAN_RULE | TENANT_REGISTER_WITH_PLAN_RULE | admin | 組織:登録時のプランの規則による登録(申込みフォームから登録した人の操作として残す。metadata に registrationPlanRuleId・registrationPlanRuleName・planId・planCode) |
登録審査
TenantScreeningVerdict
テナント登録の審査の判定。requiresReview() は PASS 以外で true を返します(審査できなかったものも運営の確認に回す)。
| ケース | ラベル |
|---|---|
PASS | 問題なし |
REVIEW | 要確認 |
ERROR | 審査できず |
TenantScreeningCategory
テナント登録の審査で見つかった疑わしさの観点。
| ケース | ラベル |
|---|---|
BRAND_IMPERSONATION | ブランドの騙り |
DISPOSABLE_EMAIL | 使い捨てメール |
NAME_DOMAIN_MISMATCH | 名称とドメインの不一致 |
MEANINGLESS_NAME | 実在性の乏しい名称 |
PROMPT_INJECTION | 審査への指示の埋め込み |
アナリティクス
AnalyticsAggregation
統計の集計方法。toSql(field) メソッドで SQL 関数文字列を生成できます。
| ケース | 値 | ラベル | SQL 関数 |
|---|---|---|---|
COUNT | COUNT | 件数 | COUNT(field) |
SUM | SUM | 合計 | SUM(field) |
AVERAGE | AVERAGE | 平均 | AVG(field) |
MAX | MAX | 最大値 | MAX(field) |
MIN | MIN | 最小値 | MIN(field) |
AnalyticsDateUnit
統計の日付単位。
| ケース | 値 | ラベル |
|---|---|---|
DAY | DAY | 日 |
WEEK | WEEK | 週 |
MONTH | MONTH | 月 |
YEAR | YEAR | 年 |