Maison > cadre php > Laravel > le corps du texte

contrôle des autorisations du rôle laravel-permission [explication détaillée du code]

藏色散人
Libérer: 2020-06-20 13:35:58
avant
8218 Les gens l'ont consulté

Ce qui suit est une introduction au contrôle des autorisations de rôle laravel-permission de la colonne du didacticiel Laravel. J'espère que cela sera utile aux amis dans le besoin !

contrôle des autorisations du rôle laravel-permission [explication détaillée du code]

Tout d'abord, postez l'adresse GitHub

https://github.com/spatie/laravel- autorisation

Parlons ensuite de l'expérience d'utilisation

Parlons d'abord de la structure des tables de la base de données. Il y a un total de 6 tables. ajoutez, modifiez et supprimez également des tableaux selon vos préférences. Mais faisons d'abord la liste !

La première est la table des utilisateurs (users) Inutile de dire qu'elle contient quelques informations de base, notamment le nom, l'adresse e-mail, etc. !

Le tableau des autorisations est un tableau qui stocke toutes les autorisations. Il peut s'agir d'autorisations d'accès au contrôleur, d'autorisations d'accès à l'interface et d'autorisations d'accès au modèle. Ici, nous discutons uniquement des autorisations d'accès à l'interface !

Table des rôles (rôles) La table des rôles stocke tous vos personnages, et le nom du personnage est l'index !

Maintenant que nous avons les tables de base, comment sont-elles liées ? Veuillez continuer à lire !

L'utilisateur a une table d'autorisations (model_has_permissions). Cette table enregistre la table de relation plusieurs-à-plusieurs de user_id, permission_id. Les utilisateurs obtiennent directement les autorisations.

L'utilisateur a une table de rôles (model_has_roles). Cette table enregistre les autorisations dont dispose l'utilisateur. La table contient user_id et role_id. Il s'agit également d'une table de relations plusieurs-à-plusieurs qui enregistre les utilisateurs et les rôles. peut aussi être compris comme une table intermédiaire !

Le rôle a une table d'autorisations (role_has_permissions). Cette table enregistre les autorisations dont dispose un rôle. Il n'y a que deux champs dans la table : role_id et permission_id ! Il peut également être étendu selon les besoins !

Une image est donnée ci-dessous pour voir visuellement chaque relation :


Les utilisateurs ont des autorisations directes, model_has_permissions, si le l'utilisateur a un rôle, puis c'est model_has_role puis allez dans la table des rôles role_has_permission

Comment ajouter un rôle (le package de dépendances fournit une méthode)

$role = Role::Create(['name' => 'add_title']);
Copier après la connexion

Combien de paramètres Create a-t-il ? Il y a un nom et un guard_name dans la méthode d'origine, comme indiqué dans le code suivant

use Spatie\Permission\Models\Role;
public static function create(array $attributes = [])
{
    $attributes['guard_name'] = $attributes['guard_name'] ?? config('auth.defaults.guard');

    if (static::where('name', $attributes['name'])->where('guard_name', $attributes['guard_name'])->first()) {
        throw RoleAlreadyExists::create($attributes['name'], $attributes['guard_name']);
    }

    if (isNotLumen() && app()::VERSION < &#39;5.4&#39;) {
        return parent::create($attributes);
    }

    return static::query()->create($attributes);
}
Copier après la connexion

Nous pouvons également utiliser cette méthode au lieu d'appeler sa tâche d'origine. Par exemple, la tâche

est appelée dans le. seeder fourni avec l'initialisation du projet.
namespace App\Containers\Authorization\Data\Seeders;
Apiato::call(&#39;Authorization@CreateRoleTask&#39;, [&#39;admin&#39;, &#39;Administrator&#39;, &#39;Administrator Role&#39;, 999,&#39;admin&#39;]);
Copier après la connexion

Vous pouvez trouver le seeder en suivant l'adresse de l'espace de noms. Cette tâche se trouve également dans la tâche sous Autorisation.

Comment ajouter des autorisations (les packages de dépendances fournissent également des méthodes)

$ permission  =  Permission :: create([ &#39; name &#39;  =>  &#39; edit articles &#39; ]);
Copier après la connexion

Comme un rôle, vous pouvez également trouver une tâche écrite et sa méthode de création ! Pas grand chose à dire ici !

Comment ajouter directement des autorisations aux utilisateurs, supprimer des autorisations et déterminer s'ils disposent d'autorisations

//可以授予任何用户权限:
$ user - > givePermissionTo(&#39; edit articles &#39;);

//你也可以一次给多个权限
$ user - > givePermissionTo( &#39; edit articles &#39;, &#39; delete articles &#39;);

//你也可以传递数组
$ user - > givePermissionTo([ &#39; edit articles &#39;, &#39; delete articles &#39; ]);
Copier après la connexion
//权限可以从用户撤销:
$ user - > revokePermissionTo(&#39; edit articles &#39;);
Copier après la connexion
//或者一次性撤消并添加新的权限:
$ user - > syncPermissions([ &#39; edit articles &#39;,&#39; delete articles &#39; ]);
Copier après la connexion
//您可以测试用户是否有权限:
$ user - > hasPermissionTo(&#39; edit articles &#39;);
Copier après la connexion
//测试用户有多个权限:
$ user - > hasAnyPermission([ &#39; edit articles &#39;,&#39; publish articles &#39;,&#39; unpublish articles &#39; ]);
Copier après la connexion
//您可以使用Laravel的默认can功能测试用户是否具有权限:
$ user - > can(&#39; edit articles &#39;);
Copier après la connexion

Comment utiliser les autorisations via des rôles

RREREE
//角色可以分配给任何用户:
$ user - > assignRole(&#39; writer &#39;);

//你也可以一次赋值多个角色
$ user - > assignRole( &#39; writer &#39;, &#39; admin &#39;);
Copier après la connexion
RREERREERREERREERREERREERREERREERREERREERREERREEE
//或者作为一个数组
$ user - > assignRole([ &#39; writer &#39;, &#39; admin &#39; ]);
Copier après la connexion
//角色可以从用户中删除:
$ user - > removeRole(&#39; writer &#39;);
Copier après la connexion
RREERREERREERREERREERE
//角色也可以同步:
//所有当前角色将被从用户中删除,而由传入的数组取代
$ user - > syncRoles([ &#39; writer &#39;, &#39; admin &#39; ]);
Copier après la connexion

où restreindre et où utiliser

Tout d'abord, vous pouvez vérifier si l'utilisateur a cette permission dans l'action!

Vous pouvez également l'utiliser en requête. Lorsque l'utilisateur demande une interface, le système déterminera si l'utilisateur dispose des autorisations et des rôles pour passer cette interface !

Bien sûr cette requête doit être injectée lorsque l'interface appelle la méthode !

L'emplacement est indiqué ci-dessous

//您可以确定用户是否具有某个角色:
$ user - > hasRole(&#39; writer &#39;);
Copier après la connexion

Résumé :

Laravel a plusieurs contrôles d'autorisation de rôle, mais je choisis celui-ci, laravel-permission est facile chercher, ce n’est pas qui est meilleur ou qui est pire ! En général, les autorisations de rôle se composent de tables de rôles et de tables d'autorisations, sans oublier la maintenance des relations entre les utilisateurs, les rôles et les autorisations ! En fait, vous n’êtes pas obligé d’utiliser ses propres méthodes !

La relation entre les tables de base est plusieurs à plusieurs. Vous pouvez utiliser attach, detch et sync pour maintenir la relation entre elles !

Si vous connaissez suffisamment le jeu, vous n'avez pas besoin de son tableau de relations. Vous pouvez l'écrire vous-même pour réaliser cette relation à 10 % !

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