Skip to content

Enum

Lase が提供する PHP Enum の一覧です。すべて CodebaseJp\Lase\Enums 名前空間に属します。

拡張メソッド

各 Enum には、ケースに対応する値を返すメソッドが定義されています。

label()

UI に表示するための日本語ラベルを返します。ほぼすべての Enum が実装しています。

php
UserStatus::ACTIVE->label(); // '利用中'
PlanType::TRIAL->label();    // 'トライアルプラン'

group()

ActivityLogType のみが実装しています。ログをグループ分けするための文字列('admin' / 'tenant' / 'common')を返します。管理画面でのフィルタリングに使用されます。

php
ActivityLogType::ADMIN_LOGIN->group();  // 'admin'
ActivityLogType::TENANT_LOGIN->group(); // 'tenant'
ActivityLogType::COMMON_LOGIN->group(); // 'common'

toSql()

AnalyticsAggregation のみが実装しています。集計方法に対応する SQL 関数文字列を生成します。

php
AnalyticsAggregation::SUM->toSql('amount'); // 'SUM(amount)'
AnalyticsAggregation::COUNT->toSql('id');   // 'COUNT(id)'

アプリ側での拡張

PHP の enum は継承できないため、Lase の Enum を直接継承して拡張することはできません。ActivityLogTypeTenantPermission のように、アプリ側で独自の値を追加する必要がある Enum は、以下の手順で拡張します。

  1. アプリ側に新しい Enum を定義する(Lase の Enum とは別の型)
  2. Lase が提供するケースの値を、アプリ側の Enum にそのまま含める
  3. 同じ拡張メソッドをアプリ側の 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 なので、追加された値がそのまま使えます)。

php
// アプリ側の 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 の値を書き写す必要はありません。

ts
// 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', 'メッセージの閲覧');
}
ts
// 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 モデルで使用されます。

ケースラベル
PENDINGPENDING仮登録
ACTIVEACTIVE利用中
SUSPENDEDSUSPENDED利用停止中
WITHDRAWNWITHDRAWN退会済

AdminUserStatus

管理者ユーザーのステータス。AdminUser モデルで使用されます。

ケースラベル
ACTIVEACTIVE利用中
SUSPENDEDSUSPENDED利用停止中

AdminStatus

管理者(Admin)エンティティのステータス。

ケースラベル
INTERIMINTERIM仮登録
ACTIVEACTIVE利用中
INACTIVEINACTIVE利用停止中
ARCHIVEDARCHIVEDアーカイブ済

AdminType

管理者ユーザーの種別。

ケースラベル
SUPERUSERSUPERUSERスーパーユーザー
NORMALNORMAL通常

TenantUserStatus

テナントへの所属ステータス。TenantUser モデルで使用されます。

ケースラベル
ACTIVEACTIVE利用中
SUSPENDEDSUSPENDED利用停止中

招待

AdminUserInvitationStatus

管理者ユーザーの招待ステータス。AdminUserInvitation モデルで使用されます。

ケースラベル
PENDINGPENDING招待中
ACCEPTEDACCEPTED参加済
DECLINEDDECLINED辞退済
REVOKEDREVOKED招待取消済

TenantUserInvitationStatus

テナントユーザーの招待ステータス。TenantUserInvitation モデルで使用されます。

ケースラベル
PENDINGPENDING招待中
ACCEPTEDACCEPTED参加済
DECLINEDDECLINED辞退済
REVOKEDREVOKED招待取消済

権限

AdminPermission

管理者ロールの権限値。AdminRolePermission モデルで使用されます。

ケースラベル
ROOT*全権限

TenantPermission

テナントユーザーのロール権限値。TenantRolePermission モデルで使用されます。

アプリ側で独自の権限を追加する場合は、アプリ側での拡張を参照してください。

ケース用途
ROOT*全権限(オーナー)
USER_READuser:readユーザー・役割の閲覧
USER_WRITEuser:writeユーザーの招待・更新・削除、役割の割り当て
MCP_SERVICE_TOKEN_MANAGEmcp.service-tokens:manageMCP Service Token の管理
CONTRACT_READcontract:read契約情報(プラン・請求・支払方法)の閲覧
CONTRACT_WRITEcontract:writeプラン変更・追加購入・支払方法の変更

ROOT*)を持つ役割はオーナーとして扱われます。オーナーの付与・降格・削除はオーナーだけが行えます (TenantUserPolicy::changeRoles / deleteTenantRolePolicy::assign)。

役割(tenant_roles)の登録

Lase が登録する役割はオーナー(* を持つ役割)だけです。マイグレーション 2026_01_19_100958_lase_insert_tenant_user_data で登録されます(ファイル名からは分かりにくいので注意)。

このオーナーの役割は削除しないでください。 Lase のオーナー保護(TenantRolePolicy::assign)はオーナーの役割を付与できるのをオーナーだけに限定するため、テナント内のオーナーが0人になると誰もオーナーの役割を付与できなくなります。テナント登録時のオーナー付与も役割の名前ではなく権限 * で解決するため、名前は自由に変更できますが、権限 * は外さないでください。

それ以外の役割は、名前と権限の組み合わせが製品ごとに異なるためアプリ側の責務です。シーダーではなくマイグレーションで登録してください(本番でシーダーを実行しない運用では、役割が存在せずアカウント管理の選択肢に「オーナー」しか出てこなくなります)。あとから権限を追加した場合も、既存の役割へ足すマイグレーションはアプリ側で用意します。

php
// アプリ側のマイグレーション(例)
$this->syncRole('配信担当', [
    MyTenantPermission::MESSAGE_READ->value,
    MyTenantPermission::MESSAGE_WRITE->value,
]);

なお TenantRoleSeeder は lase-dev で画面を動かすための開発用データです。アプリ側の役割の正としては使わないでください。

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

PlanStatus

プランのステータス。Plan モデルで使用されます。

ケースラベル
ACTIVEACTIVE利用中
INACTIVEINACTIVE利用停止中
ARCHIVEDARCHIVEDアーカイブ済

PlanType

プランの種別。Plan モデルで使用されます。

ケースラベル
TRIALTRIALトライアルプラン
NORMALNORMAL通常プラン
SPECIALSPECIAL特別プラン

コンテンツ

AnnouncementStatus

お知らせのステータス。Announcement モデルで使用されます。

ケースラベル
DRAFTDRAFT下書き
PUBLISHEDPUBLISHED公開
ARCHIVEDARCHIVEDアーカイブ済

AnnouncementType

お知らせの種別。Announcement モデルで使用されます。

ケースラベル
DEFAULTDEFAULTNEWS
RELEASERELEASEリリース
TROUBLETROUBLE障害情報

InquiryStatus

お問い合わせの対応ステータス。Inquiry モデルで使用されます。

ケースラベル
OPENOPEN未対応
IN_PROGRESSIN_PROGRESS対応中
CLOSEDCLOSED対応済

MailStatus

管理者メールの送信ステータス。AdminMail モデルで使用されます。

ケースラベル
DRAFTDRAFT下書き
SCHEDULEDSCHEDULED予約済
SENDINGSENDING送信中
SENTSENT送信済
ERRORERRORエラー

MailDeliveryStatus

メール配信レコードのステータス。AdminMailDelivery モデルで使用されます。

ケースラベル
SENTSENT送信済

MailTargetType

メール送信対象の種別。AdminMail モデルで使用されます。

ケースラベル
ALLALL全員
TENANTTENANTテナント
USERUSERユーザー

アクティビティログ

ActivityLogType

操作ログの種別。ActivityLog モデルで使用されます。拡張メソッドとして group()label() を持ちます。

アプリ側で独自の種別を追加する場合は、アプリ側での拡張を参照してください。

ケースグループラベル
COMMON_LOGINCOMMON_LOGINcommon共通:ログイン
ADMIN_LOGINADMIN_LOGINadmin管理者:ログイン
TENANT_LOGINTENANT_LOGINtenantテナント:ログイン
ADMIN_CREATE_TENANTADMIN_CREATE_TENANTadmin管理者:テナント作成
ADMIN_UPDATE_TENANTADMIN_UPDATE_TENANTadmin管理者:テナント更新
ADMIN_CREATE_SUBSCRIPTIONADMIN_CREATE_SUBSCRIPTIONadmin管理者:サブスクリプション作成
ADMIN_CREATE_PLANADMIN_CREATE_PLANadmin管理者:プラン作成
ADMIN_UPDATE_PLANADMIN_UPDATE_PLANadmin管理者:プラン更新
ADMIN_UPDATE_USERADMIN_UPDATE_USERadmin管理者:ユーザー更新
ADMIN_DELETE_USERADMIN_DELETE_USERadmin管理者:ユーザー削除
ADMIN_UPDATE_ADMIN_USERADMIN_UPDATE_ADMIN_USERadmin管理者:管理者更新
ADMIN_DELETE_ADMIN_USERADMIN_DELETE_ADMIN_USERadmin管理者:管理者削除
ADMIN_INVITE_ADMIN_USERADMIN_INVITE_ADMIN_USERadmin管理者:管理者招待
ADMIN_REVOKE_ADMIN_USER_INVITATIONADMIN_REVOKE_ADMIN_USER_INVITATIONadmin管理者:管理者招待取り消し
ADMIN_CREATE_ADMIN_ROLEADMIN_CREATE_ADMIN_ROLEadmin管理者:管理者ロール作成
ADMIN_UPDATE_ADMIN_ROLEADMIN_UPDATE_ADMIN_ROLEadmin管理者:管理者ロール更新
ADMIN_DELETE_ADMIN_ROLEADMIN_DELETE_ADMIN_ROLEadmin管理者:管理者ロール削除
ADMIN_CREATE_BLOCKED_DOMAINADMIN_CREATE_BLOCKED_DOMAINadmin管理者:ブロックドメイン追加
ADMIN_DELETE_BLOCKED_DOMAINADMIN_DELETE_BLOCKED_DOMAINadmin管理者:ブロックドメイン削除

アナリティクス

AnalyticsAggregation

統計の集計方法。toSql(field) メソッドで SQL 関数文字列を生成できます。

ケースラベルSQL 関数
COUNTCOUNT件数COUNT(field)
SUMSUM合計SUM(field)
AVERAGEAVERAGE平均AVG(field)
MAXMAX最大値MAX(field)
MINMIN最小値MIN(field)

AnalyticsDateUnit

統計の日付単位。

ケースラベル
DAYDAY
WEEKWEEK
MONTHMONTH
YEARYEAR