ЧИК пакета SPATIE

Основные команды по пакету SPATIE (роли и разрешения)


//все пользователи со всеми их ролями
$all_users_with_all_their_roles = User::with('roles')->get();

//все пользователи со всеми их прямыми разрешениями
$all_users_with_all_their_direct_permissions = User::with('permissions')->get();

//все роли в базе данных
$all_roles_in_database = Role::all(); // Все поля
$all_roles_in_database = Role::all()->pluck('id'); // C выводом конкретного поля

//пользователи без ролей
$users_without_any_roles = User::doesntHave('roles')->get();

//все роли, кроме a и b
$all_roles_except_a_and_b = Role::whereNotIn('name', ['role A', 'role B'])->get();

Создание роли и создание разрешения


//Создание роли и создание разрешения
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;

$role = Role::create(['name' => 'writer']);
$permission = Permission::create(['name' => 'edit articles']);

Прямые разрешения для пользователей

Разрешение может быть предоставлено любому пользователю:



$user->givePermissionTo('edit articles');

// Вы также можете предоставить несколько разрешений одновременно
$user->givePermissionTo('edit articles', 'delete articles');

// Вы также можете передать массив
$user->givePermissionTo(['edit articles', 'delete articles']);

Разрешение может быть отозвано у пользователя:


$user->revokePermissionTo('edit articles');

Или отозвать & добавьте новые разрешения за один раз:


$user->syncPermissions(['edit articles', 'delete articles']);

Вы можете проверить, есть ли у пользователя разрешение:


$user->hasPermissionTo('edit articles');

Или вы можете передать целое число, представляющее идентификатор разрешения.


$user->hasPermissionTo('1');
$user->hasPermissionTo(Permission::find(1)->id);
$user->hasPermissionTo($somePermission->id);

Вы можете проверить, есть ли у пользователя какие-либо разрешения из массива:


$user->hasAnyPermission(['edit articles', 'publish articles', 'unpublish articles']);

…или если у пользователя есть все разрешения из массива:


$user->hasAllPermissions(['edit articles', 'publish articles', 'unpublish articles']);

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


$user->hasAnyPermission(['edit articles', 1, 5]);

Как и все разрешения, назначаемые с помощью ролей, вы можете проверить, есть ли у пользователя разрешение, используя стандартную функцию can Laravel:


$user->can('edit articles');

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

Назначение ролей

Роль можно назначить любому пользователю:


$user->assignRole('writer');
// Вы также можете назначить несколько ролей одновременно
$user->assignRole('writer', 'admin');
// или как массив
$user->assignRole(['writer', 'admin']);

Роль можно удалить у пользователя:


$user->removeRole('writer');

Роли также можно синхронизировать:


// Все текущие роли будут удалены у пользователя и заменены заданным массивом
$user->syncRoles(['writer', 'admin']);

Проверка ролей

Вы можете определить, имеет ли пользователь определенную роль:


$user->hasRole('writer');

// или хотя бы одна роль из массива ролей:
$user->hasRole(['editor', 'moderator']);

Вы также можете определить, имеет ли пользователь какую-либо роль из заданного списка:


$user->hasAnyRole(['writer', 'reader']);
// или
$user->hasAnyRole('writer', 'reader');

Вы также можете определить, имеет ли пользователь все роли из заданного списка:


$user->hasAllRoles(Role::all());

Вы также можете определить, имеет ли пользователь все роли из заданного списка:


$user->hasExactRoles(Role::all());

Назначение разрешений ролям

Разрешение может быть предоставлено роли:


$role->givePermissionTo('edit articles');

Вы можете определить, имеет ли роль определенное разрешение:


$role->hasPermissionTo('edit articles');

Разрешение может быть отозвано у роли:


$role->revokePermissionTo('edit articles');

Или отозвать & добавьте новые разрешения за один раз:


$role->syncPermissions(['edit articles', 'delete articles']);

Функции givePermissionTo и revokePermissionTo могут принимать строка или объект Spatie\Permission\Models\Permission.


// Проверяем, есть ли у пользователя разрешение Direct
$user->hasDirectPermission('edit articles')

// Проверяем, есть ли у пользователя Все прямые разрешения
$user->hasAllDirectPermissions(['edit articles', 'delete articles']);

// Проверяем, есть ли у пользователя какое-либо разрешение напрямую
$user->hasAnyDirectPermission(['create articles', 'delete articles']);

Диррективы Blade

Разрешения


@can('edit articles')
  //
@endcan
//или

@if(auth()->user()->can('edit articles') && $some_other_condition)
  //
@endif

//Вы можете использовать 
@can, @cannot, @canany и @guest 
//для тестирования. для доступа, связанного с разрешениями.

//При использовании имени разрешения, связанного с разрешениями, созданными в этом пакете, вы можете использовать 
@can('permission-name', 'guard_name'), 
//если вам нужно проверить конкретную защиту.

//Вы также можете использовать 
@haspermission('permission-name') 
//или 
@haspermission('permission-name', 'guard_name') 
//аналогичным образом. С соответствующим 
@endhaspermission.

Клинок и роли

Проверьте конкретную роль:


@role('writer')
    Я писатель!
@else
    Я не писатель...
@endrole

такой же как


@hasrole('writer')
    I am a writer!
@else
    I am not a writer...
@endhasrole

что также то же самое, что


@if(auth()->user()->hasRole('writer'))
  //
@endif

Проверьте наличие любой роли в списке:


@hasanyrole($collectionOfRoles)
    У меня есть одна или несколько таких ролей!
@else
    У меня нет ни одной из этих ролей...
@endhasanyrole

// или
@hasanyrole('writer|admin')
    Я либо писатель, либо администратор, либо и то, и другое!
@else
    У меня нет ни одной из этих ролей...
@endhasanyrole

Проверьте все роли:


@hasallroles($collectionOfRoles)
    У меня есть все эти роли!
@else
    У меня нет всех этих ролей...
@endhasallroles
// или
@hasallroles('writer|admin')
    Я и писатель и администратор!
@else
    У меня нет всех этих ролей...
@endhasallroles

В качестве альтернативы @unlessrole дает обратный результат для проверки единственной роли, например:


@unlessrole('does not have this role')
    у меня нет роли
@else
    у меня есть роль
@endunlessrole

Вы также можете определить, имеет ли пользователь все роли из заданного списка:


@hasexactroles('writer|admin')
    Я и писатель, и администратор, и ничего больше!
@else
    У меня нет всех этих ролей или есть еще другие роли...
@endhasexactroles
ЧИК пакета SPATIE
Пролистать наверх