任命管理員給Laravel普通用戶提權(quán)的示例

這篇文章主要介紹任命管理員給Laravel普通用戶提權(quán)的示例,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了古交免費(fèi)建站歡迎大家使用!

引言

系統(tǒng)內(nèi)使用User表記錄用戶的屬性,各自維護(hù)用戶自身的關(guān)聯(lián)數(shù)據(jù)。 有一些前端頁面也會(huì)需要分別根據(jù)身份展示不同級別的內(nèi)容。

本期為大家說一說給普通用戶提權(quán)為管理員。

數(shù)據(jù)準(zhǔn)備

我們希望在users表內(nèi)指定用戶的身份,比如任命為管理員,則可以展示更多的數(shù)據(jù)資源。

我們在users表內(nèi)追加一個(gè)字段 is_admin用于標(biāo)記用戶的管理員身份,使用命令創(chuàng)建遷移文件:

php artisan make:migration add_is_admin_to_user_table --table=users復(fù)制代碼

首先填充 up方法用于遷移執(zhí)行的邏輯:

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

如果遷移失敗,進(jìn)行回滾使用的 down方法:

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

完成編輯后保存,并執(zhí)行遷移指令:

php artisan migrate復(fù)制代碼

為了測試,我們使用MySQL客戶端直接連接數(shù)據(jù)庫,并手動(dòng)指定一個(gè)管理員,使用下面的SQL語句:

update users set is_admin = true where email = 'admin@admin.com';

路由

為了區(qū)別于普通用戶的前端頁面,我們使用新的命名空間 Admin放置管理員相關(guān)的代碼。首先創(chuàng)建控制器:

php artisan make:controller Admin/UsersController復(fù)制代碼

然后添加路由,編輯 routes/web.php文件并添加以下內(nèi)容:

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

注意我們使用了兩個(gè)關(guān)鍵的參數(shù),

  • prefix : 也就是該組內(nèi)的所有路由地址,使用 prefix 最為前綴

  • namespace : 命名空間,指定該組內(nèi)所有的控制器,均位于該命名空間下。

控制器

上一節(jié)的路由我們定義的是資源路由,使用restful風(fēng)格聲明。下面創(chuàng)建 app/Http/Controllers/admin/UsersController.php文件,并實(shí)現(xiàn) index 方法。代碼內(nèi)容如下:

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

我們還需要一個(gè)視圖文件,承載上述的數(shù)據(jù)。創(chuàng)建目錄 resources/views/admin/users/index.blade.php,簡單創(chuàng)建一個(gè)模板:

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

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

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

如果不是就路由到首頁。這樣的判斷,如果頁面多了起來之后,每次都要在控制器內(nèi)敲寫,著實(shí)麻煩。所以,必須使用更靠前的驗(yàn)證,也就是 中間件

中間件

中間件可以注冊給路由文件,在命中路由后,調(diào)用中間件進(jìn)行身份識(shí)別,這是不錯(cuò)的選擇。

使用命令行創(chuàng)建中間件文件:

php artisan make:middleware AdminAuthentication復(fù)制代碼

生成的文件位于 app/Http/Middleware/目錄下,編輯 AdminAuthentication文件,并實(shí)現(xiàn)代碼邏輯:

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);
    		}
    	}        // 驗(yàn)證不通過
        return new RedirectResponse(url('/'));
    }
}

然后在 app/Http/Kernel.php文件內(nèi)注冊該中間件,并命名:

protected $routeMiddleware = [	'admin' => \App\Http\Middleware\AdminAuthentication::class,
];復(fù)制代碼

修改 路由一節(jié)中聲明的路由組,引入中間件:

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

以上是“任命管理員給Laravel普通用戶提權(quán)的示例”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

文章名稱:任命管理員給Laravel普通用戶提權(quán)的示例
轉(zhuǎn)載注明:http://muchs.cn/article32/jejgpc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google建站公司、網(wǎng)站設(shè)計(jì)、網(wǎng)站維護(hù)、網(wǎng)站收錄關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)