Проверка доступа пользователя внутри контроллера - PullRequest
0 голосов
/ 30 октября 2018

Я только начал изучать Laravel 5.7, и мне стало интересно, есть ли более простой способ проверить, есть ли у конкретного пользователя права на редактирование, удаление или просмотр страницы.

Сценарий

У пользователя много компаний, и он может просматривать, редактировать и удалять их. Поэтому, если они попытаются получить доступ к названию компании (id), к которой они не принадлежат, они получат «доступ ограничен» или что-то в этом роде. Моя проблема в том, что я продолжаю повторять свой код снова и снова, и это кажется очень непродуктивным.

Пример кода :

public function edit($id)
{

    // Check if the company ID exists
    if(!Company::whereId($id)->first() || !Company::whereId($id)->where('user_group',Auth::user()->user_group)->first())
    {
        return abort(404);
    }

    return view('company/edit');

}

Так что в моем примере я проверяю, существует ли идентификатор компании, и если компания и группа_пользователей имеют один и тот же идентификатор. Однако мне нужно будет повторить этот код для метода «show» и любых других методов, имеющих такой же сценарий (включая другие контроллеры).

Как я могу сделать мою жизнь проще с этим? Какая лучшая практика? Пример был бы хорош.

Ответы [ 3 ]

0 голосов
/ 30 октября 2018

Есть много способов сделать это, я считаю, что лучшим способом решения вашей проблемы является использование политики . Политики можно рассматривать как связь между Пользователем и Моделью (в вашем случае, компанией). Вы можете указать методы создания, отображения, обновления и удаления, а также указать, должен ли пользователь иметь возможность выполнять определенное действие.

Политики просвечивают через их общее использование, вам не нужно проверять, может ли пользователь просматривать конкретную компанию где-либо еще в вашем коде, только один раз, а Eloquent обрабатывает все остальное.

0 голосов
/ 30 октября 2018

Мы сделали это через промежуточное ПО. Вы можете создать таблицу доступа пользователей в базе данных и создать промежуточное программное обеспечение, которое проверяет, есть ли у пользователя доступ. затем разрешите, если доступ существует для таблицы или перенаправьте, если нет Однако этот подход работает только на уровне типа пользователя, а не на конкретном пользователе.

0 голосов
/ 30 октября 2018

Чистым способом является использование Laravel Validator

    public function store(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'title' => 'required|unique:posts|max:255',
            'body' => 'required',
        ]);

        if ($validator->fails()) {
            return redirect('post/create')
                        ->withErrors($validator)
                        ->withInput();
        }

        // Store the blog post...
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...