在Laravel中创建具有角色的用户时需要帮助

问题描述

我遵循了一个不错的教程,关于如何创建角色以及如何在Laravel中使用Gates。

我可以为用户添加角色并进行编辑,但是我希望能够创建用户并为他/她分配一个或多个角色,而且我不知道从哪里开始(我不是专业人士,但我需要完成此应用)。

这是到目前为止我可以向您显示的所有代码

用户控制器:

public function edit(User $user,$id)
{
    $user = User::findOrFail($id);
    $roles = Role::all();

    return view('admin.users.edit',compact('user','roles'));
}

/**
 * Update the specified resource in storage.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \App\User  $user
 * @return \Illuminate\Http\Response
 */
public function update(Request $request,User $user,$id)
{
    $user = User::findOrFail($id);
    $user->roles()->sync($request->roles);

    $user->name = $request->name;
    $user->email = $request->email;

    $user->save();

    return redirect()->route('admin.utilisateurs.index');
}

角色表:

public function up()
{
    Schema::create('roles',function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->timestamps();
    });
}

数据透视表:

public function up()
{
    Schema::create('role_user',function (Blueprint $table) {
        $table->id();
        $table->BigInteger('role_id')->unsigned()->onDelete('cascade');
        $table->BigInteger('user_id')->unsigned()->onDelete('cascade');
        $table->timestamps();
    });
}

使用复选框编辑刀片文件

<div class="block-content">
    <div class="form-group">
        @foreach ($roles as $role)
            <div class="form-group form-check">
                <input type="checkBox" class="form-check-input" name="roles[]"
                    value="{{ $role->id }}" id="{{ $role->id }}" 
                    @if ($user->roles->pluck('id')->contains($role->id)) checked @endif>
                <label class="" for="{{ $role->id }}">{{ $role->name }}</label>
            </div>
        @endforeach
    </div>
</div>

问题是我真的不知道如何在“创建刀片文件”上编写代码

这是控制器上的create方法(不确定它是否正确):

public function store(Request $request,User $user)
{
    $user = new User();

    $user->roles()->sync($request->roles);

    $user->name = $request->name;
    $user->email = $request->email;

    $user->save();

    return redirect()->route('admin.utilisateurs.index')->with('success','Utilisateur ajouté');
}

感谢您阅读这则长消息!

和平

解决方法

在创建刀片时,几乎与编辑刀片相同。您只需要检查现有角色即可。

//rest of the form first like user name and email
<div class="block-content">
    <div class="form-group">
        @foreach ($roles as $role)
            <div class="form-group form-check">
                <input type="checkbox" class="form-check-input" name="roles[]" value="{{ $role->id }}" id="{{ $role->id }}">
                <label class="" for="{{ $role->id }}">{{ $role->name }}</label>
            </div>
        @endforeach
    </div>
</div>

然后在控制器而不是sync中使用attach

public function store(Request $request)
{
    $user = new User();
    $user->name = $request->name;
    $user->email = $request->email;

    $user->save();
    $user->roles()->attach($request->roles);

    return redirect()->route('admin.utilisateurs.index')->with('success','Utilisateurajouté');
}

外观我已删除存储功能中的模型绑定。在这里没有必要。和保存用户后的附加角色。 hereattachsync上的文档。