【问题标题】:Laravel Nova index buttons not appearingLaravel Nova 索引按钮没有出现
【发布时间】:2019-01-29 08:36:34
【问题描述】:

我正在构建我的 Laravel Nova 界面,并为每个资源添加必要的字段。但是我注意到编辑/详细信息/回收站按钮没有出现在我的索引视图中。

有什么东西需要添加到我的资源类中,还是与我的控制器的构建方式有关?

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

/**
 * 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'),
    ];
}

【问题讨论】:

  • 您是否为您的模型设置了任何策略,例如用户模型?
  • 我只为用户模式设置了一个策略,但我只在我的应用程序的某些视图中使用此策略。

标签: php laravel laravel-nova


【解决方案1】:

由于您为用户设置了策略,因此您必须在 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

【讨论】:

    【解决方案2】:

    您可能希望所有这些都可以由您而不是其他人编辑,因此您想引入管理员功能。

    在您的用户表中添加一个 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 会自动处理这些,因此只需刷新您的页面,您就会看到每一行的按钮。

    【讨论】:

      猜你喜欢
      • 2019-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-20
      • 1970-01-01
      • 2020-02-28
      相关资源
      最近更新 更多