sr9*_*yar 3 php laravel laravel-5
我试图允许用户在 Laravel 5.4 中查看他们自己的个人资料。
用户策略.php
public function view(User $authUser, $user)
{
return true;
}
Run Code Online (Sandbox Code Playgroud)
在 AuthServiceProvider.php 中注册的策略
protected $policies = [
App\Task::class => App\Policies\TaskPolicy::class,
App\User::class => App\Policies\UserPolicy::class
];
Run Code Online (Sandbox Code Playgroud)
路线
Route::group(['middleware' => 'auth'], function() {
Route::resource('user', 'UserController');
} );
Run Code Online (Sandbox Code Playgroud)
刀片模板
@can ( 'view', $user )
// yes
@else
// no
@endcan
Run Code Online (Sandbox Code Playgroud)
用户控制器.php
public function profile()
{
return $this->show(Auth::user()->id);
}
public function show($id)
{
$user = User::find($id);
return view('user.show', array( 'user'=>$user,'data'=>$this->data ) );
}
Run Code Online (Sandbox Code Playgroud)
返回总是“假”。从控制器调用策略也是如此。我哪里出错了?
回答我自己的问题感觉很奇怪,但是当我遇到没有跟进的问题时,我讨厌它。
所以经过仔细检查后发现,如果我从构造函数中删除authorizeResource:
public function __construct()
{
$this->authorizeResource(User::class);
}
Run Code Online (Sandbox Code Playgroud)
并检查控制器功能中的授权:
$this->authorize('view',$user);
Run Code Online (Sandbox Code Playgroud)
一切正常。当我$user在策略函数中作为参数添加时,我一定错过了这一部分。所以要查看的用户永远不会在authorizeResource方法中传递。
感谢大家花时间帮助我。
| 归档时间: |
|
| 查看次数: |
7371 次 |
| 最近记录: |