【问题标题】:Can't Assign Role to User无法为用户分配角色
【发布时间】:2016-03-09 10:53:01
【问题描述】:

我尝试在我的 laravel 应用程序上使用 spatie(laravel-permission),但我无法为用户分配角色。我面临的错误是

调用未定义的方法 Illuminate\Database\Query\Builder::assignRole()

AdminsContoller.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\User;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Traits\HasRoles;
class AdminsController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $users = User::all();

        return view('admin.dashboard', compact('users'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        $user = User::whereId($id)->firstOrFail();
        // $user->hasAllRoles(Role::all());
        return view('admin.show', compact('user'));
    }

    public function assignRole($id){
        $user = User::whereId($id)->firstOrFail()->assignRole('Staff');
        redirect('/dashboard');

    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
         $user = User::whereId($id)->firstOrFail();
         $user->destroy();

         redirect('/dashboard');
    }
}

【问题讨论】:

  • 你在你的用户模型中定义了assignRole方法吗?
  • laravel.com/api/5.0/Illuminate/Database/Eloquent/…。您将构建器作为返回类型。确保 $id 存在。
  • 如果可能的话,您能否发布您的用户模型和空间的配置?我怀疑您的用户模型中缺少Spatie\Permission\Traits\HasRoles
  • 是的。我忘记在用户模型中添加特征。谢谢@Tezla
  • 很高兴您已修复它。

标签: php laravel laravel-5 laravel-5.1


【解决方案1】:

在你的用户模型中添加特征use HasRoles;

在模型文件顶部使用use Spatie\Permission\Traits\HasRoles; 导入它。

【讨论】:

  • 2019年依然有效。别忘了加use Spatie\Permission\Traits\HasRoles;,否则会报错。
【解决方案2】:

将 Spatie\Permission\Traits\HasRoles 特征添加到您的用户模型:

<?php
    namespace App\Models;
    use Illuminate\Foundation\Auth\User as Authenticatable;
    use Spatie\Permission\Traits\HasRoles;

    class User extends Authenticatable
    {
        use HasRoles;
        // …
    }

这是Spatie Permissions的完整示例

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    • 2020-10-16
    • 2018-08-21
    • 2022-01-08
    • 2019-04-04
    • 2021-11-08
    相关资源
    最近更新 更多