【发布时间】:2018-03-30 09:33:20
【问题描述】:
我尝试使用 Laravel 的访问策略,但是,我一遍又一遍地收到相同的错误,我看不到我需要在函数或模型中导入和/或使用什么。
首先我向你展示我的 AuthServiceProvider
use Illuminate\Support\Facades\Gate;
use App\User;
use App\Policies\UserPolicy;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as
ServiceProvider;
class AuthServiceProvider extends ServiceProvider
{
protected $policies = [
User::class => UserPolicy::class,
];
public function boot()
{
$this->registerPolicies();
//
}
}
现在我的用户策略
namespace App\Policies;
use App\User;
use Illuminate\Auth\Access\HandlesAuthorization;
class UserPolicy
{
use HandlesAuthorization;
public function __construct()
{
//
}
public function edit(User $authUser, User $user)
{
return $authUser === $user;
}
}
最后是我的 UsersControllers 的编辑功能
use App\User;
use Illuminate\Http\Request;
use App\Http\Requests\UpdateUserRequest;
public function edit($id)
{
$user = User::findOrFail($id);
$this->authorize($user);
return view('users.edit', compact('user'));
}
使用我的 UpdateUserRequest 和授权
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UpdateUserRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'name' => 'required',
'email' => 'required|unique:users,email,'.$this->route('usuario')
];
}
}
当我尝试访问它时,它总是告诉我我没有授权,即使我修改了 UserPolicy 的编辑功能。
【问题讨论】:
-
你已经声明了一个
UpdateUserRequest,但不要在你的控制器动作中使用它。 -
我这样做了,现在我没有收到错误,但它不会重定向我或继续执行代码,它只是让我留在原来的地方。也许在退货的时候atuhorize带我出去,但它不应该是唯一应该退货的东西?
-
有什么错误吗?
$this->route('usuario')看起来很可疑