中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

任命管理員給Laravel普通用戶提權的示例

發布時間:2021-03-05 16:15:06 來源:億速云 閱讀:126 作者:小新 欄目:編程語言

這篇文章主要介紹任命管理員給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,簡單創建一個模板:

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

展示的是所有用戶的信息。這顯然必須擁有較高的權限。所以我們在給數據之前,要識別用戶是否管理員:

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

以上是“任命管理員給Laravel普通用戶提權的示例”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

雅江县| 盘山县| 瓦房店市| 扎兰屯市| 龙陵县| 乾安县| 泰和县| 九龙坡区| 洪湖市| 晴隆县| 固原市| 土默特左旗| 平顶山市| 修文县| 新丰县| 眉山市| 黄梅县| 梓潼县| 杨浦区| 邛崃市| 徐汇区| 大兴区| 彭山县| 扎兰屯市| 城市| 武穴市| 霍城县| 浏阳市| 汉阴县| 闽侯县| 昭通市| 新营市| 北票市| 烟台市| 东源县| 拉萨市| 新和县| 塘沽区| 岢岚县| 肥西县| 三明市|