Почему моя политика просмотра работает, а моя политика просмотра отсутствует? - PullRequest
1 голос
/ 25 июня 2019

Я создал политику с помощью php artisan make: policy StudentPolicy --model = Student. В этой политике у вас есть метод view и viewAny. Когда я проверяю это, обычно viewAny применяется к index () и view к show (), но работает только политика представления, viewAny не имеет никакого эффекта. Мы все еще можем получить доступ к странице localhost / student

Если мы устанавливаем возвращаемое значение в viewAny в false или true. Это не имеет никакого эффекта. Вывод из php artisan route: список, как показано ниже.

|        | 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,

    ];

StudentPolicy

   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());
    }

Studentcontroller

class StudentController extends Controller
{

    public function __construct()
    {
        $this->authorizeResource(Student::class);
    }

Если пользователь не авторизован для viewAny, он может не иметь доступа к localhost / student, ему нужно показать неавторизованную страницу.

1 Ответ

0 голосов
/ 26 июня 2019

Существует несоответствие в Laravel.Если вы создаете с помощью Artisan политику, она генерирует метод viewAny.Этот метод viewAny не отображается в признаке AuthorizesRequests в разделе resourceAbilityMap.Если вы измените это отображение, добавьте 'index' => 'viewAny' к нему.Единственная проблема заключается в том, что когда я делаю обновление композитора, оно перезаписывается, поэтому мне нужно сделать запрос на извлечение самого Laravel.

...