为什么我的 view-policy 有效,但我的 viewAny-policy 无效?
Why does my view-policy work, but my viewAny-policy not?
我用 php artisan make:policy StudentPolicy --model=Student 生成了一个策略。在此策略中,您有一个 view 和 viewAny 方法。当我正常测试它时,viewAny 应用于 index() 和 view 应用于 show(),但只有视图策略有效,viewAny 无效。我们仍然可以访问页面 localhost/student
如果我们将viewAny中的return值设置为false或true。它没有效果。
php artisan route:list 的输出如下所示。
| | POST | student | student.store | App\Http\Controllers\StudentController@store | web,can:create,App\Models\Student
| | GET|HEAD | student | student.index | App\Http\Controllers\StudentController@index | web
| | GET|HEAD | student/create | student.create | App\Http\Controllers\StudentController@create | web,can:create,App\Models\Student
| | GET|HEAD | student/{student} | student.show | App\Http\Controllers\StudentController@show | web,can:view,student
| | PUT|PATCH | student/{student} | student.update | App\Http\Controllers\StudentController@update | web,can:update,student
| | DELETE | student/{student} | student.destroy | App\Http\Controllers\StudentController@destroy | web,can:delete,student
| | GET|HEAD | student/{student}/edit | student.edit | App\Http\Controllers\StudentController@edit | web,can:update,student
AuthServiceProvider
protected $policies = [
// 'App\Model' => 'App\Policies\ModelPolicy',
Student::class => StudentPolicy::class,
];
学生政策
public function viewAny(User $user)
{
//
return in_array('view.student.all', $user->rights()->pluck('description')->toArray());
}
/**
* Determine whether the user can view the student.
*
* @param \App\Models\User $user
* @param \App\Models\Student $student
* @return mixed
*/
public function view(User $user, Student $student)
{
//
return in_array('view.student.all', $user->rights()->pluck('description')->toArray());
}
学生控制器
class StudentController extends Controller
{
public function __construct()
{
$this->authorizeResource(Student::class);
}
如果用户无权查看Any,则可能无法访问localhost/student,需要显示未经授权的页面。
laravel 不匹配。
如果您使用 Artisan 创建一个策略,它会生成一个 viewAny 方法。
此 viewAny 方法未映射到 resourceAbilityMap 下的 AuthorizesRequests 特征中。如果您更改此映射,请向其添加 'index' => 'viewAny'。
唯一的问题是,当我进行作曲家更新时,它会被覆盖,所以我需要对 Laravel 本身进行拉取请求。
我用 php artisan make:policy StudentPolicy --model=Student 生成了一个策略。在此策略中,您有一个 view 和 viewAny 方法。当我正常测试它时,viewAny 应用于 index() 和 view 应用于 show(),但只有视图策略有效,viewAny 无效。我们仍然可以访问页面 localhost/student
如果我们将viewAny中的return值设置为false或true。它没有效果。 php artisan route:list 的输出如下所示。
| | POST | student | student.store | App\Http\Controllers\StudentController@store | web,can:create,App\Models\Student
| | GET|HEAD | student | student.index | App\Http\Controllers\StudentController@index | web
| | GET|HEAD | student/create | student.create | App\Http\Controllers\StudentController@create | web,can:create,App\Models\Student
| | GET|HEAD | student/{student} | student.show | App\Http\Controllers\StudentController@show | web,can:view,student
| | PUT|PATCH | student/{student} | student.update | App\Http\Controllers\StudentController@update | web,can:update,student
| | DELETE | student/{student} | student.destroy | App\Http\Controllers\StudentController@destroy | web,can:delete,student
| | GET|HEAD | student/{student}/edit | student.edit | App\Http\Controllers\StudentController@edit | web,can:update,student
AuthServiceProvider
protected $policies = [
// 'App\Model' => 'App\Policies\ModelPolicy',
Student::class => StudentPolicy::class,
];
学生政策
public function viewAny(User $user)
{
//
return in_array('view.student.all', $user->rights()->pluck('description')->toArray());
}
/**
* Determine whether the user can view the student.
*
* @param \App\Models\User $user
* @param \App\Models\Student $student
* @return mixed
*/
public function view(User $user, Student $student)
{
//
return in_array('view.student.all', $user->rights()->pluck('description')->toArray());
}
学生控制器
class StudentController extends Controller
{
public function __construct()
{
$this->authorizeResource(Student::class);
}
如果用户无权查看Any,则可能无法访问localhost/student,需要显示未经授权的页面。
laravel 不匹配。 如果您使用 Artisan 创建一个策略,它会生成一个 viewAny 方法。 此 viewAny 方法未映射到 resourceAbilityMap 下的 AuthorizesRequests 特征中。如果您更改此映射,请向其添加 'index' => 'viewAny'。 唯一的问题是,当我进行作曲家更新时,它会被覆盖,所以我需要对 Laravel 本身进行拉取请求。