Привет друзья,

Прочтите эту сторону, и в этой статье мы узнаем, как использовать роли и разрешения в Laravel.

Это пакет, который позволяет вам устанавливать роли и разрешения в вашем приложении Laravel, предоставляемом Spatie. Например: если вы создаете приложение, в котором вам нужно управлять несколькими пользователями, такими как супер-администратор, администратор, пользователи, менеджер и т. д. Тогда это хороший способ использовать пакет разрешений Laravel. Потому что он предоставляет вам простой в использовании синтаксис для выполнения желаемой функциональности.

Например, вы можете просто использовать директиву «can», с помощью которой вы можете проверить, есть ли у пользователя определенные разрешения, тогда это будет работать в соответствии с примененным условием.

@can('manage posts')
<a href="#" class="btn btn-primary">Manage</a>
@endcan

Войти в полноэкранный режим

Выйти из полноэкранного режима

Итак, теперь вопрос в том, как использовать этот удивительный пакет.

Вы можете проверить этот пакет на главном веб-сайте Spatie. Laravel-разрешение


Как установить пакет разрешений Laravel

Итак, давайте перейдем к основному обсуждению того, как установить пакет. Прежде всего, настройте свой проект с базой данных, а затем откройте командную строку vs code.

composer require spatie/laravel-permission
Войти в полноэкранный режим

Выйти из полноэкранного режима

Этот код установит этот пакет, и теперь у вас будет другая работа. Вы должны зарегистрировать поставщика услуг в config/app.php так что он может работать хорошо.

'providers' => [
    // ...
    Spatie\Permission\PermissionServiceProvider::class,
];
Войти в полноэкранный режим

Выйти из полноэкранного режима

Опубликуйте файл миграции, а до этого у нас был бы файл в config/permission.php поэтому мы также должны опубликовать это, и для этого мы должны запустить эту команду.

php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"

php artisan:migrate
Войти в полноэкранный режим

Выйти из полноэкранного режима

Если вы получите какую-либо ошибку в этом процессе, с которой я столкнулся, я получил сообщение об ошибке: ” 1071 Указан слишком большой ключ

длинная; максимальная длина ключа составляет 1000 байт (SQL: изменить таблицу permissions добавить уникальный permissions_name_guard_name_unique(name, guard_name))» для этого можно сделать одно решение, как я использовал. Перейдите в каталог приложений в этом App/Providers/AppServiceProvider.php и добавить что-то вроде этого.

  public function boot()
    {
       Schema::defaultStringLength(125);
    }
Войти в полноэкранный режим

Выйти из полноэкранного режима

Я надеюсь, что это может помочь вам там. Кстати вернемся к основной теме.

После миграции у вас будет несколько таблиц в базе данных. Смотрите на изображении ниже.


роли и таблицы разрешений


Как создавать роли и разрешения

Теперь создадим сидер, если вы не знаете, что такое сидер и как им пользоваться. Позвольте мне сказать вам. Мы можем создать сидер, используя php artisan make:seeder PermissionSeeder он создаст файл заполнения в database/seeders/PermissionSeeder.У него уже есть функция под названием «запуск», в которой вы можете просто поместить в базу данных все, что хотите.

РазрешениеSeeder.php

class PermissionSeeder extends Seeder
{
    /**
     * Create the initial roles and permissions.
     *
     * @return void
     */
     public function run()
    {
        // Reset cached roles and permissions
        app()[PermissionRegistrar::class]->forgetCachedPermissions();

        // create permissions
        $permission1=Permission::create(['name' => 'SuperAdmin']);
        $permission2=Permission::create(['name' => 'ServiceProvider']);
        $permission3=Permission::create(['name' => 'BaseClient']);

        // create roles and assign permissions
        $role1 = Role::create(['name' => 'superadmin']);
        $role1->givePermissionTo($permission1);

        $role2 = Role::create(['name' => 'serviceprovider']);
        $role2->givePermissionTo($permission2);

        $role3 = Role::create(['name' => 'baseclient']);
        $role3->givePermissionTo($permission3);
        // gets all permissions via Gate::before rule; see AuthServiceProvider

    }
}
Войти в полноэкранный режим

Выйти из полноэкранного режима

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

Таблица разрешений


разрешение таблицы

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


Таблица Роли

Теперь у нас также будет таблица, в которой будет определено, какая роль имеет какое разрешение, а также какая модель имеет роли.


Какая роль имеет какую таблицу разрешений — roles_has_permissions

Теперь взгляните на modal_has_roles стол.


таблица modal_has_roles

Теперь мы все настроили. Давайте посмотрим на использование ролей и разрешений


Использование ролей и разрешений

Например, как я объяснил в предыдущем параграфе, если у вас есть несколько ролей, которые могут быть администратором, суперадминистратором, менеджером или кем-то еще. Тогда нам, очевидно, нужны некоторые разрешения, чтобы мы могли поддерживать отношения между суперадминистратором и администратором. Таким образом, они могут получить доступ к своим маршрутам, которые они назначили в соответствии со своими ролями.


Как назначить роль пользователю в разрешении Laravel

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

UserController Сохранение пользователя

 public function store(StoreClientRequest $req)
    {
        $parentId = Auth::User()->id;
        $parentName = Auth::User()->name;
        $password = Hash::make($req->password);
        $created = User::create($validatedData);
        $created->assignRole(2) or assignRole('serviceprovider');
//this is how you can assign a role to a user
    }
Войти в полноэкранный режим

Выйти из полноэкранного режима

Когда вы сможете создать пользователя, вы сможете добавить промежуточное ПО также на основе созданных ролей. Давайте посмотрим, как вы можете создать промежуточное ПО в routes/web.php.


Использование ПО промежуточного слоя ролей в разрешениях Laravel

Если вы не знаете о промежуточном программном обеспечении, прочтите о промежуточном программном обеспечении. Laravel-промежуточное ПО

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

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


Как использовать промежуточное ПО через роли

Route::group(['middleware' => 'role:serviceprovider'], function () {
//use any get or post route here.....
}
Route::group( ['middleware' => 'role:superadmin'], function () {
//use your superadmin routes here...
}
Войти в полноэкранный режим

Выйти из полноэкранного режима


Как использовать блейд-директивы в Laravel Permissione

Этот пакет предоставляет вам некоторые блейд-директивы, которые вы можете использовать для той же цели. Например: у вас есть разные страницы на одной боковой панели, некоторые из них для администратора, а некоторые для суперадминистратора, тогда вы можете использовать это так.

<ul>
<li> Admin page</li>
<li> Admin page</li>
<li> Admin page</li>

//then you can use @can directive here e.g
@can('manage everything') 
<li> super admin page</li>
<li> super admin page</li>
@endcan
/it will check if logged in user has this permission then it will show these two pages to user.
</ul>
Войти в полноэкранный режим

Выйти из полноэкранного режима

Точно так же вы можете использовать и другой способ.

@if(auth()->user()->can('edit articles') && $anyothercondition)
  //
@endif
Войти в полноэкранный режим

Выйти из полноэкранного режима

То же условие, которое вы можете использовать, используя директиву роли. Который будет выглядеть так.

@role('superadmin')
    I am a superadmin!
@else
    I am not a superadmin , I am else user or admin...
@endrole
Войти в полноэкранный режим

Выйти из полноэкранного режима

Некоторые другие директивы, которые вы можете использовать, перечислены ниже.

  • @hasroles
  • @hasanyroles
  • @hasallroles
  • @hasallroles

Если вы хотите узнать больше об этом, вы можете перейти на страницу пакета spatie — laravel-разрешения (директивы блейда)


Вывод

Если мы посмотрим в целом, это отличный пакет для использования без дополнительной нагрузки на аутентификацию, вы можете просто использовать этот пакет для определения ролей и разрешений. Самым простым способом это поможет вам определить, какая роль должна иметь какое разрешение. Я надеюсь, что эта статья поможет вам.

Я узнал из этой статьи/блога, надеюсь, вы тоже узнаете.

Спасибо за чтение ☺

Пост Как использовать пакет разрешений Laravel впервые появился на larachamp.com.

Пост Как использовать пакет разрешений Laravel появился первым на larachamp.com.