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
Libérer: 2022-06-06 19:42:39
avant
3971 Les gens l'ont consulté

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"
Copier après la connexion
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
Copier après la connexion
Générer des informations de configuration :

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

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

class User extends Authenticatable
{

    use HasRoles;  // 加载角色相关信息
    .....
Copier après la connexion
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']);// 创建权限
Copier après la connexion

Utiliser


Ajouter des autorisations aux utilisateurs

$user->givePermissionTo('edit articles');
Copier après la connexion
Ajouter rôles aux utilisateurs

$user->assignRole('writer');

$user->assignRole(['writer', 'admin']);
Copier après la connexion
Supprimer les autorisations des utilisateurs

$user->revokePermissionTo('edit articles');
Copier après la connexion
Ajouter des autorisations aux rôles

$role->givePermissionTo('edit articles');
Copier après la connexion
Copier après la connexion
Ajouter des autorisations à un rôle

$role->givePermissionTo('edit articles');
Copier après la connexion
Copier après la connexion
Révoquer une autorisation et en ajouter une nouvelle

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

$user->getRoleNames();
Copier après la connexion
Synchroniser plusieurs rôles aux autorisations

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

$permission->syncRoles($roles);
Copier après la connexion
Supprimer les autorisations d'un rôle

$role->revokePermissionTo($permission);
$permission->removeRole($role);
Copier après la connexion
Obtenir l'utilisateur actuel La liste des autorisations

$permissions = $user->permissions;
Copier après la connexion
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();
Copier après la connexion
Obtient la collection de collections de rôles de l'utilisateur

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

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

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

$user->hasRole('writer');
Copier après la connexion

Classe de validation


Vérifiez s'il existe une certaine autorisation

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

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

$user->hasRole('writer');

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

$user->hasAllRoles(Role::all());
Copier après la connexion
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);
Copier après la connexion
S'il dispose d'un ensemble d'autorisations

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

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

$role->revokePermissionTo('edit articles'); // 删除
Copier après la connexion

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
Copier après la connexion

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());
    }
}
Copier après la connexion

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');
Copier après la connexion

[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!

Étiquettes associées:
source:csdn.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal