任命管理員,給Laravel普通用戶權

藏色散人
發布: 2020-10-29 14:48:12
轉載
2550 人瀏覽過

以下由Laravel教學專欄跟大家介紹如何給Laravel一般使用者提權,希望對需要的朋友有幫助!

任命管理員,給Laravel普通用戶權

引言

系統內使用User表記錄使用者的屬性,各自維護使用者本身的關聯資料。 有一些前端頁面也會需要分別根據身分展示不同程度的內容。

本期為大家說一說給一般使用者提權為管理員

資料準備

我們希望在users表內指定使用者的身份,例如任命為管理員,則可以展示更多的資料資源。

我們在users表內追加一個欄位is_admin用於標記使用者的管理員身份,使用指令建立遷移檔案:

php artisan make:migration add_is_admin_to_user_table --table=users复制代码
登入後複製

先填入up方法用於遷移執行的邏輯:

public function up(){ Schema::table('users', function(Blueprint $table) { $table->boolean('is_admin')->default(false); }); }
登入後複製

如果遷移失敗,進行回滾使用的down方法:

public function down() { Schema::table('users', function(Blueprint $table) { $table->dropColumn('is_admin'); } }
登入後複製

完成編輯後儲存,並執行遷移指令:

php artisan migrate复制代码
登入後複製

為了測試,我們使用mysql客戶端直接連接資料庫,並手動指定一個管理員,使用下面的SQL語句:

update users set is_admin = true where email = 'admin@admin.com';
登入後複製

路由

為了區別於一般使用者的前端頁面,我們使用新的命名空間Admin放置管理員相關的程式碼。首先建立控制器:

php artisan make:controller Admin/UsersController复制代码
登入後複製

然後新增路由,編輯routes/web.php檔案並新增以下內容:

Route::group(['prefix' => 'admin', 'namespace' => 'Admin'], function(){ Route::resource('user', 'UsersController'); });
登入後複製

注意我們使用了兩個關鍵的參數,

  • prefix : 也就是該群組內的所有路由位址,使用prefix 最為前綴
  • namespace : 命名空間,指定該群組內所有的控制器,均位於該命名空間下。

控制器

上一節的路由我們定義的是資源路由,使用restful風格宣告。以下建立app/Http/Controllers/admin/UsersController.php文件,並實作 index 方法。程式碼內容如下:

public function index(){ $users = User::orderBy('created_at', 'desc')->get(); return view('admin.users.index')->withUsers($users); }
登入後複製

我們還需要一個視圖文件,承載上述的資料。建立目錄resources/views/admin/users/index.blade.php,簡單建立一個模板:

Registered Users

    @forelse ($users as $user)
  • {{ $user->name }} ({{ $user->email }})
  • @empty
  • No registered users
  • @endforelse
登入後複製

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

if (Auth::user()->is_admin != true) { return redirect()->route('home')->withMessage('Access denied!'); }
登入後複製

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

中间件

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

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

php artisan make:middleware AdminAuthentication复制代码
登入後複製

生成的文件位于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('/')); } }
登入後複製

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

protected $routeMiddleware = [ 'admin' => \App\Http\Middleware\AdminAuthentication::class, ];复制代码
登入後複製

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

Route::group( [ 'prefix' => 'admin', 'namespace' => 'admin', 'middleware' => 'admin'], function(){ Route::resource('users', 'UsersController'); });
登入後複製

写在最后

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

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


以上是任命管理員,給Laravel普通用戶權的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:juejin.im
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!