laravel-权限:assignRole 在 Tinker 中有效,但在应用程序中无效
laravel-permission: assignRole works in Tinker but not in application
请参阅下面我的 AdministrationController.php:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;
use Illuminate\Foundation\Auth\User;
class AdministrationController extends Controller
{
public function index() {
$user = User::find(1);
$role = Role::where('name', 'owner')->get()->first();
$user->assignRole($role);
}
}
这是我的用户模型的重要部分:
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable
{
use HasRoles;
use Notifiable;
...
}
奇怪的是,AdministrationController.php 中的行 $user->assignRole($role);
引发了以下错误:
BadMethodCallException
Method Illuminate\Database\Query\Builder::assignRole does not exist.
但是,在 Tinker 中,此命令序列可以正常工作并产生预期的结果:
>>> $user=User::find(1)
>>> $role=Spatie\Permission\Models\Role::where('name', 'owner')->get()->first()
>>> $user->assignRole($role)
我用谷歌搜索了这个问题,尝试了一些修复建议,但没有任何帮助。我的 AdministrationController.php / User.php 有什么问题?
好的,我刚好可以解决它。当你知道的时候很简单。在 AdministrationController.php
中,我将 use Illuminate\Foundation\Auth\User;
替换为 use App\User;
。就是这样...
请参阅下面我的 AdministrationController.php:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;
use Illuminate\Foundation\Auth\User;
class AdministrationController extends Controller
{
public function index() {
$user = User::find(1);
$role = Role::where('name', 'owner')->get()->first();
$user->assignRole($role);
}
}
这是我的用户模型的重要部分:
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable
{
use HasRoles;
use Notifiable;
...
}
奇怪的是,AdministrationController.php 中的行 $user->assignRole($role);
引发了以下错误:
BadMethodCallException
Method Illuminate\Database\Query\Builder::assignRole does not exist.
但是,在 Tinker 中,此命令序列可以正常工作并产生预期的结果:
>>> $user=User::find(1)
>>> $role=Spatie\Permission\Models\Role::where('name', 'owner')->get()->first()
>>> $user->assignRole($role)
我用谷歌搜索了这个问题,尝试了一些修复建议,但没有任何帮助。我的 AdministrationController.php / User.php 有什么问题?
好的,我刚好可以解决它。当你知道的时候很简单。在 AdministrationController.php
中,我将 use Illuminate\Foundation\Auth\User;
替换为 use App\User;
。就是这样...