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 を直接継承して拡張することはできません。ActivityLogType や TenantPermission のように、アプリ側で独自の値を追加する必要がある Enum は、以下の手順で拡張します。
- アプリ側に新しい Enum を定義する(Lase の Enum とは別の型)
- Lase が提供するケースの値を、アプリ側の Enum にそのまま含める
- 同じ拡張メソッドをアプリ側の Enum に実装する
権限チェックやログ記録は文字列値の比較で行うため、型(クラス)が異なっていても値が一致すれば正しく動作します。
TenantPermission は書き写し不要
tenant_permission は例外で、Lase の値をアプリ側の Enum に書き写す必要はありません。権限の解決は CodebaseJp\Lase\Auth\TenantPermissionResolver が「アプリ側の Enum → Lase の Enum」の順に行い、役割の権限のバリデーションと TenantRolePermission の cast もこれを経由します。Lase に権限が追加されてもアプリ側の追従は不要です。
アプリ側の Enum には自分の権限だけを定義してください(ROOT は判定に使うため定義しておくと便利です)。
WARNING
activity_type など他の Enum には解決の仕組みがないため、差し替えた場合は Lase 側に追加された値を追従してください。独自の値が必要ないアプリは config('lase.enums.*') を上書きしないでください(既定値は Lase の Enum なので、追加された値がそのまま使えます)。
// アプリ側の enum(例)
enum MyActivityLogType: string
{
// Lase のケースをそのまま含める
case ADMIN_LOGIN = 'ADMIN_LOGIN';
case TENANT_LOGIN = 'TENANT_LOGIN';
case COMMON_LOGIN = 'COMMON_LOGIN';
// ... 他の Lase ケース ...
// アプリ独自のケース
case MY_CUSTOM_ACTION = 'MY_CUSTOM_ACTION';
public function group(): string
{
return match ($this) {
self::COMMON_LOGIN => 'common',
self::TENANT_LOGIN => 'tenant',
default => 'admin',
};
}
public function label(): string
{
return match ($this) {
self::MY_CUSTOM_ACTION => 'カスタム操作',
// ...
};
}
}フロントエンド(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::changeRoles / delete、TenantRolePolicy::assign)。
役割(tenant_roles)の登録
Lase が登録する役割はオーナー(* を持つ役割)だけです。マイグレーション 2026_01_19_100958_lase_insert_tenant_user_data で登録されます(ファイル名からは分かりにくいので注意)。
このオーナーの役割は削除しないでください。 Lase のオーナー保護(TenantRolePolicy::assign)はオーナーの役割を付与できるのをオーナーだけに限定するため、テナント内のオーナーが0人になると誰もオーナーの役割を付与できなくなります。テナント登録時のオーナー付与も役割の名前ではなく権限 * で解決するため、名前は自由に変更できますが、権限 * は外さないでください。
それ以外の役割は、名前と権限の組み合わせが製品ごとに異なるためアプリ側の責務です。シーダーではなくマイグレーションで登録してください(本番でシーダーを実行しない運用では、役割が存在せずアカウント管理の選択肢に「オーナー」しか出てこなくなります)。あとから権限を追加した場合も、既存の役割へ足すマイグレーションはアプリ側で用意します。
// アプリ側のマイグレーション(例)
$this->syncRole('配信担当', [
MyTenantPermission::MESSAGE_READ->value,
MyTenantPermission::MESSAGE_WRITE->value,
]);なお TenantRoleSeeder は lase-dev で画面を動かすための開発用データです。アプリ側の役割の正としては使わないでください。
プラン・サブスクリプション
PlanStatus
プランのステータス。Plan モデルで使用されます。
| ケース | 値 | ラベル |
|---|---|---|
ACTIVE | ACTIVE | 利用中 |
INACTIVE | INACTIVE | 利用停止中 |
ARCHIVED | ARCHIVED | アーカイブ済 |
PlanType
プランの種別。Plan モデルで使用されます。
| ケース | 値 | ラベル |
|---|---|---|
TRIAL | TRIAL | トライアルプラン |
NORMAL | NORMAL | 通常プラン |
SPECIAL | SPECIAL | 特別プラン |
コンテンツ
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_CREATE_TENANT | ADMIN_CREATE_TENANT | admin | 管理者:テナント作成 |
ADMIN_UPDATE_TENANT | ADMIN_UPDATE_TENANT | admin | 管理者:テナント更新 |
ADMIN_CREATE_SUBSCRIPTION | ADMIN_CREATE_SUBSCRIPTION | 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 | 管理者:ブロックドメイン削除 |
アナリティクス
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 | 年 |