Heim > PHP-Framework > Laravel > Ernennen Sie einen Administrator und erweitern Sie die Berechtigungen für normale Laravel-Benutzer

Ernennen Sie einen Administrator und erweitern Sie die Berechtigungen für normale Laravel-Benutzer

藏色散人
Freigeben: 2020-10-29 14:48:12
nach vorne
2675 Leute haben es durchsucht

Die folgende Tutorial-Kolumne von Laravel zeigt Ihnen, wie Sie die Berechtigungen für normale Laravel-Benutzer erhöhen können. Ich hoffe, dass es für Freunde hilfreich ist, die es benötigen!

Ernennen Sie einen Administrator und erweitern Sie die Berechtigungen für normale Laravel-Benutzer

Einführung

Das System verwendet die Benutzertabelle, um die Attribute des Benutzers aufzuzeichnen, und jedes verwaltet die eigenen zugeordneten Daten des Benutzers. Einige Frontend-Seiten müssen auch je nach Identität unterschiedliche Inhaltsebenen anzeigen.

In dieser Ausgabe werden wir darüber sprechen, wie man normale Benutzer zu Administratoren hochstufen kann.

Datenvorbereitung

Wir hoffen, die Identität des Benutzers in der Benutzertabelle angeben zu können, z. B. ihn zum Administrator zu ernennen, damit mehr Datenressourcen angezeigt werden können.

Wir hängen ein Feld is_admin an die Benutzertabelle an, um den Administratorstatus des Benutzers zu markieren. Verwenden Sie den Befehl, um die Migrationsdatei zu erstellen:

php artisan make:migration add_is_admin_to_user_table --table=users复制代码
Nach dem Login kopieren

Füllen Sie zunächst die up-Methode für die Migrationsausführungslogik aus:

public function up(){
    Schema::table('users', function(Blueprint $table)    {
    	$table->boolean('is_admin')->default(false);
    });
}
Nach dem Login kopieren

Wenn die Die Migration schlägt fehl. Verwenden Sie die down-Methode für das Rollback:

public function down() 
{
    Schema::table('users', function(Blueprint $table)    {
    	$table->dropColumn('is_admin');
    }
}
Nach dem Login kopieren

Speichern Sie nach Abschluss der Bearbeitung und führen Sie die Migrationsanweisungen aus:

php artisan migrate复制代码
Nach dem Login kopieren

Zum Testen verwenden wir den MySQL-Client, um eine direkte Verbindung zur Datenbank herzustellen und manuell einen Administrator anzugeben. unter Verwendung der folgenden SQL-Anweisung:

update users set is_admin = true where email = 'admin@admin.com';
Nach dem Login kopieren

Routing

Um die Frontend-Seite von normalen Benutzern zu unterscheiden, verwenden wir den neuen Namespace Admin, um Administrator-bezogenen Code zu platzieren. Erstellen Sie zuerst den Controller:

php artisan make:controller Admin/UsersController复制代码
Nach dem Login kopieren

Fügen Sie dann die Route hinzu, bearbeiten Sie die Datei routes/web.php und fügen Sie den folgenden Inhalt hinzu:

Route::group(['prefix' => 'admin', 'namespace' => 'Admin'], function(){
	Route::resource('user', 'UsersController');
});
Nach dem Login kopieren

Beachten Sie, dass wir zwei Schlüsselparameter verwenden,

  • Präfix: das heißt, innerhalb der Gruppe Allen Routing-Adressen wird das Präfix
  • namespace: namespace vorangestellt, was angibt, dass sich alle Controller in der Gruppe unter diesem Namespace befinden.

Controller

Im Routing im vorherigen Abschnitt haben wir das Ressourcenrouting mithilfe von Restful-Style-Deklarationen definiert. Erstellen Sie unten die Datei app/Http/Controllers/admin/UsersController.php und implementieren Sie die Indexmethode. Der Codeinhalt lautet wie folgt:

public function index(){
    $users = User::orderBy('created_at', 'desc')->get();    return view('admin.users.index')->withUsers($users);
}
Nach dem Login kopieren

Wir benötigen außerdem eine Ansichtsdatei, um die oben genannten Daten zu übertragen. Erstellen Sie das Verzeichnis resources/views/admin/users/index.blade.php und erstellen Sie einfach eine Vorlage:

<h1>Registered Users</h1>
<ul>
    @forelse ($users as $user)
    	<li>{{ $user->name }} ({{ $user->email }})</li>
    @empty
    	<li>No registered users</li>
    @endforelse
</ul>
Nach dem Login kopieren

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

if (Auth::user()->is_admin != true) {	return redirect()->route('home')->withMessage('Access denied!');
}
Nach dem Login kopieren

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

中间件

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

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

php artisan make:middleware AdminAuthentication复制代码
Nach dem Login kopieren

生成的文件位于 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('/'));
    }
}
Nach dem Login kopieren

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

protected $routeMiddleware = [	'admin' => \App\Http\Middleware\AdminAuthentication::class,
];复制代码
Nach dem Login kopieren

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

Route::group(
[    'prefix' => 'admin',    'namespace' => 'admin',    'middleware' => 'admin'], function(){
	Route::resource('users', 'UsersController');
});
Nach dem Login kopieren

写在最后

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

通过注册路由到中间件的使用,又一次体验了laravel各个组件协同作用的能力!


Das obige ist der detaillierte Inhalt vonErnennen Sie einen Administrator und erweitern Sie die Berechtigungen für normale Laravel-Benutzer. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:juejin.im
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage