Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#2 Re: Laravel 5.x » Вышла версия Laravel 5.4 » 29.01.2017 08:15:15

А в июне выйдет 5.5 на php7. За ними не угонишься ...

#4 Re: Веб-разработка » Выборка из БД ... » 29.12.2016 18:23:58

AlexeyMezenin пишет:

Проверка ведь каждого пользователя будет идти?

С какой стати пользователем переться в админку? Этот посредник работает только для админки. Проверка админ\не админ меня не устраивает. Для этого вообще ничего не надо сочинять ...

#5 Re: Laravel 5.x » Обновить миграцию без потери данных. » 29.12.2016 18:07:29

Почитайте про миграции в доках. Там же есть как вносить изменения в таблицу добавляя, удаляя столбцы и более ничего не трогая.
Добавление столбца в таблицу:
Schema::table('users', function ($table) {
    $table->string('email');
});

#6 Re: Веб-разработка » Выборка из БД ... » 29.12.2016 17:59:06

AlexeyMezenin пишет:

Присвой пользователю 3-4 роли и несколько пермитов и посмотри сколько запросов в БД создаст код.

Присвоил. Четыре роли, у каждой по четыре права. Запросов 20, время 90 ms. В том числе запросы самого фреймворка (5 запросов).
В общем: разных админов не будет очень много (да хоть 100) и толпой они не ходят. Если в админку полезут хакеры, отработает трейт по ограничению запросов с одного Ip. Конечно запросов много, но или универсальность, или оптимальность. Почему я и вынес вопрос - "как сделать проще ...".

#7 Re: Веб-разработка » Выборка из БД ... » 28.12.2016 18:07:29

Grumm пишет:

Я не путаю, системы авторизации не имеет, верно, но с auth и ролями работает легко.

Аха, работает. Админ, не админ. Это всё.
Скажите как по вашему разрешить к примеру смотреть и банить юзеров, но не удалять их и не править им профиль? И не лезть в другие разделы админки?

#8 Re: Веб-разработка » Выборка из БД ... » 28.12.2016 17:48:43

AlexeyMezenin пишет:
Grumm пишет:

Может кому надо будет:

Присвой пользователю 3-4 роли и несколько пермитов и посмотри сколько запросов в БД создаст код.

Сегодня мозги уже кипят. Завтра буду гонять тестами ...

#9 Re: Веб-разработка » Выборка из БД ... » 28.12.2016 17:41:26

Может кому надо будет:
// получаем права пользователя в виде массива
        $roles_id = Auth::user()->roles->pluck('id');
        $result = array();
// перебираем полученные id
        foreach ($roles_id as $item)
        {
            $permits = Role::find($item)->permits()->pluck('slug');
            $permits_array = json_decode($permits, true);
// результирующий массив, в котором собраны все права закрепленные за юзером, исключая повторяющиеся.
            $result = array_unique(array_merge($result, $permits_array));
        }
/**
* Таким образом можно проверять юзера на право что либо совершать в админке,
* присваивая ему любое количество ролей, с любым набором прав.
*/

#10 Re: Веб-разработка » Выборка из БД ... » 28.12.2016 17:34:47

Androbim пишет:
Grumm пишет:

Вот и использую пакет "Совы", но он не имеет проверок, кто может туда переться, а кто нет.

Разве не имеет? "Сова", вроде, с ролями неплохо работает, или я не так Вас понял?

Это админка. Она не имеет системы авторизации. Возможно вы путаете с Sentinel.

#11 Re: Веб-разработка » Выборка из БД ... » 28.12.2016 17:33:13

AlexeyMezenin пишет:

Grumm, когда всем этим будешь заниматься, создай много ролей и пермитов для тестирования и смотри на количество запросов, которые создает Laravel. В этом тебе поможет Laravel Debugbar.

Эта панелька внизу уже стала родной на локали! smile)

#12 Re: Laravel » Новая (?) Админка, конкурент (?) SleepingOwl » 28.12.2016 17:30:54

AlexeyMezenin пишет:
Grumm пишет:

Да, надо. Но это не костылить чужой пакет.

А сова - не чужой пакет?

sleepingOwl это каркас. И наполнять его вам. Вояджер это воплощенные чьи то идеи и мечты. Вам нада? Да ради бога! Мне нет.

#14 Re: Веб-разработка » Выборка из БД ... » 27.12.2016 08:23:34

AlexeyMezenin пишет:

Я бы роли сделал отдельным полем в users в виде smallint. Иначе на более менее сложном проекте упрешься в кучу ограничений. На очень сложном, я бы и от permit избавился.

А вообще, не лучше использовать готовый популярный пакет, к которому в сети можно найти много готовых рецептов?

Я забыл написать что не нужно менять структуру таблиц которые создают Laravel и SleepingOwl.
Вот и использую пакет "Совы", но он не имеет проверок, кто может туда переться, а кто нет. Далее прикручу Sentinel вместо Auth.
Мой вопрос связан с middleware для админки ...
Всем спасибо. (Для многих ролей не обойтись видно без foreach с последующим объединением массивов ...)

#15 Веб-разработка » Выборка из БД ... » 26.12.2016 18:55:08

Grumm
Ответов: 36

(Laravel 5.3 и базовая auth)
Есть три таблицы: users, roles и permits.
Первая и вторая, вторая и третья связаны отношениями "многие ко многим".
Задача: для юзера, через назначенные ему роли, выбрать права, которыми он обладает (права назначаются роли).
Делаю так:
// получаем id в таблице roles для пользователя
        $roles_id = Auth::user()->roles->pluck('id');
// получаем все права в виде json-массива
        $permits = Role::find($roles_id)->permits()->pluck('slug');
// получаем нужный простой массив прав
        $permits_array = json_decode($permits, true);
Вопрос:
- можно ли реализовать проще?
- что будет, если ролей у юзера будет несколько? (Пока я прописывал только одну)

#16 Re: Laravel » Новая (?) Админка, конкурент (?) SleepingOwl » 26.12.2016 18:39:35

Необходимость "пилить" пакет под себя не нравится. На основе SleepingOwl лучше свою админку забацать ...

#17 Re: Laravel 5.x » Роли пользователей 5.3 » 26.12.2016 18:34:51

Вы проверяете только авторизован ли юзер и админ ли он? Тогда пропускаете его куда он шел.
Всех остальных редиректите на /news.
Вашего посредника нужно зарегистрировать в kernel.php и либо роуты обернуть им, либо прописать в config.auth.php (guards, с ними я не знаю как работать).
Для создания других ролей, нужно добавлять их в таблицу Roles и добавить проверку в посредника.
В документации все описано.

#19 Re: Laravel 5.x » Почему именно Laravel? » 25.12.2016 19:06:45

Прежде чем браться за Laravel, нужно хотя бы в основах знать ООП, концепцию MVC, маршрутизацию, ...
Далее документация и пример решения конкретной задачи на фреймворке. Мне очень помогло. По крайней мере "php artisan make: ..." не вызывает ужаса smile)

#20 Re: Laravel 5.x » Авторизировал ли пользователь » 25.12.2016 18:37:42

Если аутентификация из "коробки", то зареганный юзер Auth:check();

if(Auth::check()) return redirect ...;

Замените содержание вида register.blade.php сообщением "Регистрация закрыта".

Подвал раздела