Laravel 同一用户模型的 Nova 多个资源

Laravel Nova multiple resources for same user model

我有一个 laravel + nova 项目。

目前我有一个 USER 模型,有 'admin' 列,值为 0 或 1。

我使用此模型登录 nova 仪表板。

现在,我想在 nova 仪表板中将管理员用户和普通用户分开。就像在 nova 仪表板左侧显示两个资源 1) 管理员 2) 用户。

我可以为两个资源使用相同的用户模型吗?

目前显示的是名为 Admins 和 Users 的两个资源,但两者都始终打开管理员列表。根本不是用户列表。

谢谢

由于管理员和用户在您的案例中不是独立的用户,请考虑使用 Filters 代替您的 User 资源。

为了回答您的问题,如果您想坚持分别为管理员和用户实施 2 个 Nova 资源,您可以添加覆盖对 Nova 资源进行的 index 查询。要覆盖此行为,请将以下代码添加到 Nova 资源:

App\Nova\Admin.php

/**
 * Build an "index" query for the given resource.
 *
 * @param  \Laravel\Nova\Http\Requests\NovaRequest  $request
 * @param  \Illuminate\Database\Eloquent\Builder  $query
 * @return \Illuminate\Database\Eloquent\Builder
 */
public static function indexQuery(NovaRequest $request, $query)
{
    return $query->where('admin', 1);
}

而下面的代码为

App\Nova\User.php

/**
 * Build an "index" query for the given resource.
 *
 * @param  \Laravel\Nova\Http\Requests\NovaRequest  $request
 * @param  \Illuminate\Database\Eloquent\Builder  $query
 * @return \Illuminate\Database\Eloquent\Builder
 */
public static function indexQuery(NovaRequest $request, $query)
{
    return $query->where('admin', 0);
}

注意: 使用上述解决方案的用户仍然可以手动导航到 yourwebsite.test/nova/resource/admins/{id}。考虑添加 Authorization,例如用户无法查看管理员(取决于您的用例)。