Maison >cadre php >Laravel >Parlons du package d'extension de gestion des autorisations dans Laravel

Parlons du package d'extension de gestion des autorisations dans Laravel

WBOY
WBOYavant
2022-05-02 09:00:163982parcourir

Cet article vous apporte des connaissances pertinentes sur laravel, qui présente principalement les problèmes liés au package d'extension de la gestion des autorisations. Examinons-le ensemble, j'espère qu'il sera utile à tout le monde.

Parlons du package d'extension de gestion des autorisations dans Laravel

【Recommandation associée : tutoriel vidéo laravel

Qu'est-ce qu'un rôle multi-utilisateurs

Par exemple, par exemple, le forum que nous utilisons habituellement

Webmaster ------- a le plus haut autorité et est le plus important C'est l'autorisation de gérer les utilisateurs

Administrateur-----Gérer certains articles, ce qui n'aura pas un grand impact sur le site Web

vip-----Avoir une autorisation de téléchargement pour certaines ressources

Les utilisateurs ordinaires ---- ne peuvent effectuer que de simples ajouts, suppressions, modifications, commentaires, etc. à leurs propres articles

Visiteurs ---- ne peuvent effectuer qu'une navigation de base

créer des tableaux


  • rôles --- ---- Informations sur le rôle : Webmaster, etc.
  • permissions ------- Informations sur les autorisations : Gestion du contenu, etc.
  • model_has_roles ------- Rôle correspondant au modèle = Rôle correspondant de l'utilisateur
  • role_has_permissions --- ---- Autorisations correspondant au rôle = Quelles autorisations le rôle possède-t-il
  • model_has_permissions ------- Autorisations correspondant au modèle = Autorisations dont dispose l'utilisateur

Trions la relation

Permissions (autorisations) et Rôles (rôles), une autorisation peut appartenir à plusieurs rôles et un rôle peut avoir plusieurs autorisations. La relation est la suivante : plusieurs à plusieurs (role_has_permissions)

user. et permissions un à plusieurs (model_has_permissions)

Utilisateur et rôle un à plusieurs (model_has_roles)

En d'autres termes, la relation est claire Lorsque l'utilisateur a quel rôle ou quoi. autorisations, l'opération correspondante est effectuée

1. Installez le package d'extension

composer require "spatie/laravel-permission:~2.7"
Générez le fichier de migration de la base de données :

php artisan supplier:publish --provider="SpatiePermissionPermissionServiceProvider" --tag="migrations"

Vous pouvez voir informations de table associées dans le répertoire de migration, exécutez la migration de la base de données

php artisan migrate
Générer des informations de configuration :

php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="config"
Charger sous le modèle utilisateur

.....
use Spatie\Permission\Traits\HasRoles;  // use

class User extends Authenticatable
{

    use HasRoles;  // 加载角色相关信息
    .....
Créer des rôles et des utilisateurs

use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;

.....
$role = Role::create(['name' => 'writer']);  // 创建角色
$permission = Permission::create(['name' => 'edit articles']);// 创建权限

Utiliser


Ajouter des autorisations aux utilisateurs

$user->givePermissionTo('edit articles');
Ajouter rôles aux utilisateurs

$user->assignRole('writer');

$user->assignRole(['writer', 'admin']);
Supprimer les autorisations des utilisateurs

$user->revokePermissionTo('edit articles');
Ajouter des autorisations aux rôles

$role->givePermissionTo('edit articles');
Ajouter des autorisations à un rôle

$role->givePermissionTo('edit articles');
Révoquer une autorisation et en ajouter une nouvelle

$user->syncPermissions(['edit articles', 'delete articles']);
Obtenir la collection de rôles de l'utilisateur actuel

$user->getRoleNames();
Synchroniser plusieurs rôles aux autorisations

$role->syncPermissions($permissions); //  @param array $permissions

$permission->syncRoles($roles);
Supprimer les autorisations d'un rôle

$role->revokePermissionTo($permission);
$permission->removeRole($role);
Obtenir l'utilisateur actuel La liste des autorisations

$permissions = $user->permissions;
Obtient toutes les autorisations de l'utilisateur, soit des autorisations directes (odel_has_permissions), soit du rôle, ou des deux

$permissions = $user->getDirectPermissions();
$permissions = $user->getPermissionsViaRoles();
$permissions = $user->getAllPermissions();
Obtient la collection de collections de rôles de l'utilisateur

$roles = $user->getRoleNames(); // Returns a collection
Renvoie les utilisateurs avec le rôle spécifié | Renvoie uniquement les utilisateurs avec le rôle 'écrivain'

$users = User::role('writer')->get(); //
Renvoie les utilisateurs avec les autorisations spécifiées

$users = User::permission('edit articles')->get();
Quels rôles l'utilisateur a-t-il ?

$user->hasRole('writer');

Classe de validation


Vérifiez s'il existe une certaine autorisation

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

$user->can('edit articles');
Vérifiez s'il existe un certain rôle|ou colonne

$user->hasRole('writer');

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

$user->hasAllRoles(Role::all());
Transmettez la valeur de l'identifiant pour déterminer s'il existe une certaine autorisation

$user->hasPermissionTo('1');
$user->hasPermissionTo(Permission::find(1)->id);
$user->hasPermissionTo($somePermission->id);
S'il dispose d'un ensemble d'autorisations

$user->hasAnyPermission(['edit articles', 'publish articles', 'unpublish articles']);
Vérifier si un rôle dispose de certaines autorisations | Supprimer certaines autorisations

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

$role->revokePermissionTo('edit articles'); // 删除

Utilisation du modèle

@role('writer')
    I am a writer!
@else
    I am not a writer...
@endrole

------------------------

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

------------------------

@can('edit articles') // 拥有某个权限 可执行操作
//
@endcan

Remplissage des données
use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;

class RolesAndPermissionsSeeder extends Seeder
{
    public function run()
    {
        // Reset cached roles and permissions
        app()['cache']->forget('spatie.permission.cache');

        // create permissions
        Permission::create(['name' => 'edit articles']);
        Permission::create(['name' => 'delete articles']);
        Permission::create(['name' => 'publish articles']);
        Permission::create(['name' => 'unpublish articles']);

        // create roles and assign created permissions

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

        $role = Role::create(['name' => 'moderator']);
        $role->givePermissionTo(['publish articles', 'unpublish articles']);

        $role = Role::create(['name' => 'super-admin']);
        $role->givePermissionTo(Permission::all());
    }
}

Conseils : Si vous modifiez le tableau d'informations relatif aux autorisations de la base de données, vous devez utiliser la méthode d'effacement le cache
// 命令删除
php artisan cache:forget spatie.permission.cache  

app()['cache']->forget('spatie.permission.cache');

[Recommandations associées :

tutoriel vidéo laravel]

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer