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 !
https://github.com/spatie/laravel- autorisation
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 !
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
$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 < '5.4') { 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('Authorization@CreateRoleTask', ['admin', 'Administrator', 'Administrator Role', 999,'admin']);
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.
$ 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 !
//可以授予任何用户权限: $ 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 ');
//角色可以分配给任何用户: $ user - > assignRole(' writer '); //你也可以一次赋值多个角色 $ user - > assignRole( ' writer ', ' admin ');
//或者作为一个数组 $ user - > assignRole([ ' writer ', ' admin ' ]);
//角色可以从用户中删除: $ user - > removeRole(' writer ');
//角色也可以同步: //所有当前角色将被从用户中删除,而由传入的数组取代 $ user - > syncRoles([ ' writer ', ' admin ' ]);
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 ');
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!