Laravel Nova索引按钮未出现

时间:2018-08-23 03:00:49

标签: php laravel laravel-nova

我正在构建我的Laravel Nova界面,并将必要的字段添加到每个资源中。但是,我注意到索引视图中没有显示“编辑/详细信息/废纸buttons”按钮。

是否需要将某些内容添加到我的资源类中,或者它与我的控制器的构建方式有关?

这是我的字段方法的样子:

/**
 * Get the fields displayed by the resource.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return array
 */
public function fields(Request $request)
{
    return [
        ID::make()->sortable(),

        Gravatar::make(),

        Text::make('First Name')
            ->sortable()
            ->rules('required', 'max:255'),

        Text::make('Last Name')
            ->sortable()
            ->rules('required', 'max:255'),

        Text::make('Email')
            ->sortable()
            ->rules('required', 'email', 'max:255')
            ->creationRules('unique:users,email')
            ->updateRules('unique:users,email,{{resourceId}}'),

        Text::make('Administrator', 'is_admin')
            ->sortable()
            ->rules('required', 'max:255'),

        Password::make('Password')
            ->onlyOnForms()
            ->creationRules('required', 'string', 'min:6')
            ->updateRules('nullable', 'string', 'min:6'),

        HasMany::make('Configuration'),
    ];
}

List view image

2 个答案:

答案 0 :(得分:3)

由于已经为用户设置了策略,因此必须在UserPolicy类中包括以下功能:

viewAny
view
create
update
delete
restore
forceDelete

您可以将它们设置为return true,它们将出现。例如:

public function update(User $user){
    return true;
}

然后将显示您的更新按钮。

  

如果存在策略,但缺少用于特定操作的方法,则将不允许用户执行该操作。因此,如果您已定义策略,请不要忘记定义其所有相关授权方法。

有关策略的更多信息:https://nova.laravel.com/docs/1.0/resources/authorization.html#policies

答案 1 :(得分:1)

您可能想让所有这些内容都由您自己编辑,因此您想引入一种管理功能。

向您的用户表中添加一个is_admin布尔值,默认为0。

Schema::table('users', function($table) {
    $table->boolean('is_admin')->nullable()->default(false);
});

接下来,在您希望管理员能够编辑的每个资源上设置策略。 https://laravel.com/docs/5.6/authorization#creating-policies

然后为每个视图添加策略,创建,更新,编辑,删除例如这将允许管理员或授权用户更新用户。

public function update(User $user, User $userBeingEdited)
{
    return $user->is_admin === 1 or $user->id === $userBeingEdited->id;
}

类似地,这将只允许您的管理员创建用户

public function create(User $user)
{
    return $user->is_admin === 1;
}

Nova会自动使用这些功能,因此只需刷新页面,您应该会看到每一行上的按钮。