Maison > cadre php > Laravel > le corps du texte

Nommez un administrateur et élevez les privilèges aux utilisateurs ordinaires de Laravel

藏色散人
Libérer: 2020-10-29 14:48:12
avant
2637 Les gens l'ont consulté

La colonne tutorielle suivante de Laravel vous présentera comment élever les privilèges pour les utilisateurs ordinaires de Laravel. J'espère qu'elle sera utile aux amis qui en ont besoin !

Nommez un administrateur et élevez les privilèges aux utilisateurs ordinaires de Laravel

Introduction

La table Utilisateur est utilisée dans le système pour enregistrer les attributs de l'utilisateur, et chacun conserve le propre de l'utilisateur. données associées. Certaines pages frontales doivent également afficher différents niveaux de contenu en fonction de l'identité.

Dans ce numéro, nous parlerons de l'élévation des droits des utilisateurs ordinaires pour devenir administrateur.

Préparation des données

Nous espérons préciser l'identité de l'utilisateur dans le tableau des utilisateurs, par exemple en le désignant comme administrateur, afin que davantage de ressources de données puissent être affichées.

Nous ajoutons un champ is_admin à la table des utilisateurs pour marquer l'identité de l'administrateur de l'utilisateur. Utilisez la commande pour créer un fichier de migration :

php artisan make:migration add_is_admin_to_user_table --table=users复制代码
Copier après la connexion

Remplissez d'abord . up est utilisée pour la logique d'exécution de la migration :

public function up(){
    Schema::table('users', function(Blueprint $table)    {
    	$table->boolean('is_admin')->default(false);
    });
}
Copier après la connexion
Si la migration échoue, la méthode

down utilisée pour le rollback :

public function down() 
{
    Schema::table('users', function(Blueprint $table)    {
    	$table->dropColumn('is_admin');
    }
}
Copier après la connexion
Après avoir terminé l'édition, enregistrez-le et exécutez la migration Instructions :

php artisan migrate复制代码
Copier après la connexion
Pour les tests, nous utilisons le client mysql pour nous connecter directement à la base de données et spécifier manuellement un administrateur, en utilisant l'instruction SQL suivante :

update users set is_admin = true where email = 'admin@admin.com';
Copier après la connexion
Route

Pour la distinction Pour la page frontale destinée aux utilisateurs ordinaires, nous utilisons le nouvel espace de noms

Admin pour placer le code lié à l'administrateur. Créez d'abord le contrôleur :

php artisan make:controller Admin/UsersController复制代码
Copier après la connexion
Ajoutez ensuite la route, éditez le fichier

routes/web.php et ajoutez le contenu suivant :

Route::group(['prefix' => 'admin', 'namespace' => 'Admin'], function(){
	Route::resource('user', 'UsersController');
});
Copier après la connexion
Notez que nous utilisons deux clés paramètres ,

    préfixe : c'est-à-dire toutes les adresses de routage du groupe, utilisez le préfixe comme préfixe
  • namespace : espace de noms, spécifiant que tous les contrôleurs du groupe se trouvent dans ce nom sous l'espace.
Contrôleur

Dans le routage de la section précédente, nous avons défini le routage des ressources, à l'aide de déclarations de style RESTful. Créez le fichier

app/Http/Controllers/admin/UsersController.php ci-dessous et implémentez la méthode d'index. Le contenu du code est le suivant :

public function index(){
    $users = User::orderBy('created_at', 'desc')->get();    return view('admin.users.index')->withUsers($users);
}
Copier après la connexion
Nous avons également besoin d'un fichier de vue pour transporter les données ci-dessus. Créez le répertoire

resources/views/admin/users/index.blade.php et créez simplement un modèle :

<h1>Registered Users</h1>
<ul>
    @forelse ($users as $user)
    	<li>{{ $user->name }} ({{ $user->email }})</li>
    @empty
    	<li>No registered users</li>
    @endforelse
</ul>
Copier après la connexion

展示的是所有用户的信息。这显然必须拥有较高的权限。所以我们在给数据之前,要识别用户是否管理员:

if (Auth::user()->is_admin != true) {	return redirect()->route('home')->withMessage('Access denied!');
}
Copier après la connexion

如果不是就路由到首页。这样的判断,如果页面多了起来之后,每次都要在控制器内敲写,着实麻烦。所以,必须使用更靠前的验证,也就是 中间件

中间件

中间件可以注册给路由文件,在命中路由后,调用中间件进行身份识别,这是不错的选择。

使用命令行创建中间件文件:

php artisan make:middleware AdminAuthentication复制代码
Copier après la connexion

生成的文件位于 app/Http/Middleware/ 目录下,编辑 AdminAuthentication 文件,并实现代码逻辑:

namespace App\Http\Middleware;use Closure;use Illuminate\Contracts\Auth\Guard;use Illuminate\Http\RedirectResponse;class AdminAuthentication {    public function handle($request, Closure $next)    {    	if ($request->user())
    	{    		if ($request->user()->is_admin == true)
    		{    			return $next($request);
    		}
    	}        // 验证不通过
        return new RedirectResponse(url('/'));
    }
}
Copier après la connexion

然后在 app/Http/Kernel.php 文件内注册该中间件,并命名:

protected $routeMiddleware = [	'admin' => \App\Http\Middleware\AdminAuthentication::class,
];复制代码
Copier après la connexion

修改 路由 一节中声明的路由组,引入中间件:

Route::group(
[    'prefix' => 'admin',    'namespace' => 'admin',    'middleware' => 'admin'], function(){
	Route::resource('users', 'UsersController');
});
Copier après la connexion

写在最后

本文又是一个功能齐全却又mini小巧的短文,详细阐述了如何为users表添加管理员功能。

通过注册路由到中间件的使用,又一次体验了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:juejin.im
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