Laravel Gates и / или политики

Прямо сейчас я подумываю о внедрении политик в свой проект. Итак, мне нужны 3 типа ролей: пользователь, администратор и офис.

У меня есть класс Customer, который имеет следующие функции CRUD:

class CustomerController extends Controller
{

public function getAllCustomer()
{
    return Customer::get();
}

public function addNewCustomer(Request $request)
{
    $validatedData = $request->validate([
        'Title' => 'required',
        'Name' => 'required|max:255',
        'Surname' => 'required|max:255',
        'Email' => 'required',
        'Phone' => 'required',
        'Password' => 'required',
        'dateofBirth' => 'required'
    ]);

    return \app\model\Customer::create($request->all());
}


public function update (Request $request , Customer $id)
{
    $id->update($request->all());
}


public function destroy (Customer $id)
{
    $id->delete();
}

Я хочу, чтобы только администратор мог использовать функции CRUD для всех клиентов. Пользователь должен иметь возможность использовать функции CRUD только для своих собственных данных (поэтому Клиент может делать это только со своими собственными данными).

Я прочитал эту статью: https://code.tutsplus.com/tutorials/gates-and-policies-in-laravel--cms-29780

Но я до сих пор точно не знаю, как реализовать это в моем проекте и следует ли мне использовать Gates или политики (похоже, политики проще, или?).

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

вы читали официальную документацию? laravel.com/docs/5.6/authorization

Philipp Sander 09.08.2018 10:10

Да, но я не нашел решения для разных ролевых моделей.

Boby 09.08.2018 10:22
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
3 341
1

Ответы 1

Создайте политики для каждой вашей модели. Привязать политики к маршрутам https://laravel.com/docs/5.6/authorization#via-middleware

Route::post('/post/{post}', function () {
// The current user may edit post...
})->middleware('can:edit,post');

Создайте родительскую политику, которую будут расширять все другие политики, и добавьте к ней метод перед, который в основном проверяет, является ли ваш пользователь администратором, и если да, то дальнейшая проверка не требуется.

public function before(User $authenticatedUser, $ability)
{
    // super admin can access everything
    if ($authenticatedUser->role == 'super_admin') {
        return true;
    }

    return null; //fall through to the policy method
}

Создайте политику публикации, которая будет иметь проверку прав редактировать

class PostPolicy extends Policy
{

    public function edit(User $authenticatedUser, Post $post)
    {
        return $authenticatedUser->id == $post->author_id;
    }
}

Общая идея о том, как работать с политиками, очень проста.

Другие вопросы по теме