Maison >cadre php >Laravel >contrôle des autorisations du rôle laravel-permission [explication détaillée du code]

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

藏色散人
藏色散人avant
2020-06-20 13:33:178381parcourir

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']);

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);
}

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;]);

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([ ' name '  =>  ' edit articles ' ]);

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(' 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 - > hasAnyPermission([ ' edit articles ',' publish articles ',' unpublish articles ' ]);
//您可以使用Laravel的默认can功能测试用户是否具有权限:
$ user - > can(' edit articles ');

Comment utiliser les autorisations via des rôles

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

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

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(' writer ');

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!

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