如何在 Laravel 7 的 RegisterController 中将注册表单中的角色分配给新用户?

问题描述 投票:0回答:1

描述

我是 PHP/Laravel 新手,我设置了一些用户/角色管理。我只需要一个注册和登录功能。 “注册”功能仅供管理员使用。 我使用了标准身份验证设置,正如 Laravel docs 中所述。

目前每个新用户都会获得“学生”角色,正如您在这段代码中看到的:

 protected function create(array $data)
  {

    $user = User::create([
      'name' => $data['name'],
      'password' => Hash::make($data['password']),
    ]);

    // every new user gets the role "student"

    $role = Role::select("id")->where("role", "student")->first();

    $user->roles()->attach($role);

    return $user;
  }

这就是创建用户表单的相应刀片:

<h2>Benutzer Erstellen</h2>
<form method="POST" action="{{ route('register') }}" class="form-container">
  @csrf

  <h3>Neuen Benutzer anlegen</h3>
  {{-- <h4>Benutzerrechte:</h4>
  <div class="row-container">
  <div class="row-grid">

    <label for="name">{{ __('Login Name:') }}</label>

    <input id="name" type="text" class="edit-input @error('name') is-invalid @enderror" name="name"
      value="{{ old('name') }}" required autocomplete="name" autofocus placeholder="Name">

    @error('name')
    <span class="invalid-feedback" role="alert">
      <strong>{{ $message }}</strong>
    </span>
    @enderror

  </div>

  <div class="row-grid">

    <label for="password">{{ __('Passwort:') }}</label>

    <input id="password" type="password" class="edit-input @error('password') is-invalid @enderror" name="password"
      required autocomplete="new-password" placeholder="Passwort">

    @error('password')
    <span class="invalid-feedback" role="alert">
      <strong>{{ $message }}</strong>
    </span>
    @enderror


  </div>
  <div class="row-grid">
    <label for="password-confirm">{{ __('Passwort wiederholen:') }}</label>
    <input id="password-confirm" type="password" class="edit-input" name="password_confirmation" required
      autocomplete="new-password" placeholder="Passwort wiederholen">

  </div>
  <div class="form-bottom"><a class="abort-btn" href="{{route("admin.users.index")}}">Abbrechen</a>
    <button class="action-btn" type="submit">Nutzer anlegen</button>
  </div>
</form>

目标

我想实现具有可能角色的动态创建的复选框,以便管理员可以通过创建用户来分配角色。 我试过这样:

<div class="row-container">
    @foreach ($roles as $role)

<input type="checkbox" name="roles[]" value="{{ $role->id}}">
  {{Form::label("body", $role->role)}}
  @endforeach
  </div>

问题

  1. 那么如何才能默认选中其中一个复选框呢?

  2. RegisterController 中的代码应该是什么样子,用于从复选框获取值并将角色与用户连接起来?

编辑

第二个问题的答案:

在RegisterController中替换:

$role = Role::select("id")->where("role", "student")->first();

$user->roles()->attach($role);

与:

$user->roles()->attach($data['roles']);

这篇 Laravel 新闻文章中找到它。

您可以在此处找到整个存储库。

提前感谢您的宝贵时间:)

php laravel roles user-management
1个回答
0
投票

有一个更简单的方法。

return User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => Hash::make($data['password']),
        ])->assignRole('RoleYouWant');

只需勾选您要使用的角色即可。

© www.soinside.com 2019 - 2024. All rights reserved.