Laravel 中的权限问题
Permission issue in Laravel
我遇到有关权限的问题
传递给 App\Providers\AuthServiceProvider::App\Providers{closure}() 的参数 1 必须是 App\Providers\User 的实例,给定的 App\User 实例,在中调用C:\xampp\htdocs\Tweety\vendor\laravel\framework\src\Illuminate\Auth\Access\Gate.php 第 473 行(查看:C:\xampp\htdocs\Tweety\resources\views\tweet.blade.php)
我正在努力仅在经过身份验证的用户发布的推文上显示删除按钮
我的控制器
public function destroy(Tweet $tweet)
{
$tweet->delete();
Session::flash('success');
return redirect()->route('tweets.index')->with(['message' => 'Tweet Deleted']);
}
我的用户模型
public function tweets()
{
return $this->hasMany(Tweet::class)->latest();
}
我的blade
@can('delete',$tweet)
<form action="{{ route('tweets.destroy',$tweet->id) }}" method="POST">
@csrf
@method('DELETE')
<button type="submit" class="btn btn-danger">Delete</button>
</form>
@endcan
AuthServiceProvider
public function boot()
{
$this->registerPolicies();
Gate::define('delete', function (User $user , Tweet $tweet){
return $tweet->user->is($user);
});
}
任何帮助将不胜感激
看起来像是命名空间问题,没有正确导入用户模型的命名空间。
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use App\User; // looks like you're missing this line.
use App\Tweet;
class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*
* @var array
*/
protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy',
];
/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();
Gate::define('delete', function (User $user , Tweet $tweet){
return $tweet->user->is($user);
});
}
}
您需要更改:
@can('delete', $tweet)
至:
@can('delete')
我遇到有关权限的问题
传递给 App\Providers\AuthServiceProvider::App\Providers{closure}() 的参数 1 必须是 App\Providers\User 的实例,给定的 App\User 实例,在中调用C:\xampp\htdocs\Tweety\vendor\laravel\framework\src\Illuminate\Auth\Access\Gate.php 第 473 行(查看:C:\xampp\htdocs\Tweety\resources\views\tweet.blade.php)
我正在努力仅在经过身份验证的用户发布的推文上显示删除按钮
我的控制器
public function destroy(Tweet $tweet)
{
$tweet->delete();
Session::flash('success');
return redirect()->route('tweets.index')->with(['message' => 'Tweet Deleted']);
}
我的用户模型
public function tweets()
{
return $this->hasMany(Tweet::class)->latest();
}
我的blade
@can('delete',$tweet)
<form action="{{ route('tweets.destroy',$tweet->id) }}" method="POST">
@csrf
@method('DELETE')
<button type="submit" class="btn btn-danger">Delete</button>
</form>
@endcan
AuthServiceProvider
public function boot()
{
$this->registerPolicies();
Gate::define('delete', function (User $user , Tweet $tweet){
return $tweet->user->is($user);
});
}
任何帮助将不胜感激
看起来像是命名空间问题,没有正确导入用户模型的命名空间。
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use App\User; // looks like you're missing this line.
use App\Tweet;
class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*
* @var array
*/
protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy',
];
/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();
Gate::define('delete', function (User $user , Tweet $tweet){
return $tweet->user->is($user);
});
}
}
您需要更改:
@can('delete', $tweet)
至:
@can('delete')