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 を直接継承して拡張することはできません。アプリ側で独自の値を追加する必要がある Enum は、アプリ側に別の Enum を定義して config('lase.enums.*') で差し替えます。

権限チェックやログ記録は文字列値の比較で行うため、型(クラス)が異なっていても値が一致すれば正しく動作します。

書き写しは不要

tenant_permission と activity_type は Lase の値をアプリ側の Enum に書き写す必要がありません。解決を担うクラスが「アプリ側の Enum → Lase の Enum」の順に解決するため、Lase に値が追加されてもアプリ側の追従は不要です。

Enum解決するクラスcast
tenant_permissionCodebaseJp\Lase\Auth\TenantPermissionResolverCasts\TenantPermissionCast
activity_typeCodebaseJp\Lase\Utils\ActivityLogTypeResolverCasts\ActivityLogTypeCast

アプリ側の Enum には自分の値だけを定義してください。

解決の仕組みが無い Enum

上記以外の Enum を差し替えた場合は、Lase 側に追加された値を追従してください。独自の値が必要ないアプリは config('lase.enums.*') を上書きしないでください(既定値は Lase の Enum なので、追加された値がそのまま使えます)。

activity_type を拡張する ​

アプリ側の Enum は CodebaseJp\Lase\Contracts\HasActivityLogGroup を実装してください。管理画面の操作ログはグループ(common / tenant / admin)で絞り込むため、これを実装していない Enum のケースは絞り込みに出てきません(例外にはなりません)。

php
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';
    }
}
php
// config/lase.php
'enums' => [
    'activity_type' => \App\Enums\MyActivityLogType::class,
],

$log->type は、アプリ側と Lase のどちらの Enum にも無い値のときだけ記録された文字列のまま返ります。監査の記録を消さないためで、JSON に出したときの表現は Enum のときと同じです。型が値によって変わるため、比較は ->value で行ってください。

付帯情報(metadata) ​

activity_logs.metadata に任意の付帯情報を JSON で残せます。種別だけでは「何に対して」「なぜ」が残らないため、対象の識別子や理由を入れてください。

php
$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 だけを出します。

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

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::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)。

php
// アプリ側のマイグレーション(例)
// 権限は Enum を参照せず、その時点の値を文字列で書き写す
$this->syncRole('配信担当', ['message:read', 'message:write']);

マイグレーションから Enum を参照しない

過去のマイグレーションが Enum を参照していると、あとから case を消したり改名したときに そのマイグレーションが落ちます(新しい環境や migrate:fresh では必ず実行されるため)。 また TenantPermissionResolver::values() のように「その時点の全権限」を使うと、 実行した時期によって結果が変わり、環境間で役割の内容が食い違います。

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

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

PlanStatus ​

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

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

PlanType ​

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

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

RegistrationPlanRuleStatus ​

登録時のプランの規則の状態。RegistrationPlanRule モデルで使用されます。

ケース値ラベル
ACTIVEACTIVE有効
INACTIVEINACTIVE停止中

コンテンツ ​

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_IMPERSONATE_STARTADMIN_IMPERSONATE_STARTadmin管理者:代理ログイン
ADMIN_CREATE_TENANTADMIN_CREATE_TENANTadmin管理者:テナント作成
ADMIN_UPDATE_TENANTADMIN_UPDATE_TENANTadmin管理者:テナント更新
ADMIN_DELETE_TENANTADMIN_DELETE_TENANTadmin管理者:テナント削除
ADMIN_SUSPEND_TENANTADMIN_SUSPEND_TENANTadmin管理者:テナント緊急停止
ADMIN_RESUME_TENANTADMIN_RESUME_TENANTadmin管理者:テナント緊急停止の解除
ADMIN_REVIEW_TENANT_SCREENINGADMIN_REVIEW_TENANT_SCREENINGadmin管理者:登録審査の確認(metadata に tenantScreeningId と note)
ADMIN_CREATE_SUBSCRIPTIONADMIN_CREATE_SUBSCRIPTIONadmin管理者:サブスクリプション作成
ADMIN_UPDATE_USAGEADMIN_UPDATE_USAGEadmin管理者:利用数の修正
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管理者:ブロックドメイン削除
ADMIN_CREATE_BLOCKED_TENANT_CODEADMIN_CREATE_BLOCKED_TENANT_CODEadmin管理者:禁止テナントコード追加
ADMIN_DELETE_BLOCKED_TENANT_CODEADMIN_DELETE_BLOCKED_TENANT_CODEadmin管理者:禁止テナントコード削除
ADMIN_CREATE_BLOCKED_IPADMIN_CREATE_BLOCKED_IPadmin管理者:禁止IPアドレス追加
ADMIN_DELETE_BLOCKED_IPADMIN_DELETE_BLOCKED_IPadmin管理者:禁止IPアドレス削除
ADMIN_CREATE_REGISTRATION_PLAN_RULEADMIN_CREATE_REGISTRATION_PLAN_RULEadmin管理者:登録時のプランの規則作成(metadata に registrationPlanRuleId)
ADMIN_UPDATE_REGISTRATION_PLAN_RULEADMIN_UPDATE_REGISTRATION_PLAN_RULEadmin管理者:登録時のプランの規則更新(metadata に registrationPlanRuleId)
ADMIN_DELETE_REGISTRATION_PLAN_RULEADMIN_DELETE_REGISTRATION_PLAN_RULEadmin管理者:登録時のプランの規則削除(metadata に registrationPlanRuleId)
TENANT_REGISTER_WITH_PLAN_RULETENANT_REGISTER_WITH_PLAN_RULEadmin組織:登録時のプランの規則による登録(申込みフォームから登録した人の操作として残す。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 関数
COUNTCOUNT件数COUNT(field)
SUMSUM合計SUM(field)
AVERAGEAVERAGE平均AVG(field)
MAXMAX最大値MAX(field)
MINMIN最小値MIN(field)

AnalyticsDateUnit ​

統計の日付単位。

ケース値ラベル
DAYDAY日
WEEKWEEK週
MONTHMONTH月
YEARYEAR年