ホームページ  >  記事  >  PHPフレームワーク  >  管理者を任命し、通常の Laravel ユーザーに権限を昇格させます

管理者を任命し、通常の Laravel ユーザーに権限を昇格させます

藏色散人
藏色散人転載
2020-10-29 14:48:122579ブラウズ

Laravel の次のチュートリアル コラムでは、一般の Laravel ユーザーの権利を昇格する方法を紹介します。

管理者を任命し、通常の Laravel ユーザーに権限を昇格させます

.markdown-body{単語区切り:単語区切り;行の高さ:1.75;フォントの太さ:400;フォントサイズ:15px;オーバーフロー-x:hidden;color:#333}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{line-height: 1.5;margin-top:35px;margin-bottom:10px;padding-bottom:5px}.markdown-body h1{font-size:30px;margin-bottom:5px}.markdown-body h2{padding-bottom:12px; font-size:24px;border-bottom:1px Solid #ececec}.markdown-body h3{font-size:18px;padding-bottom:0}.markdown-body h4{font-size:16px}.markdown-body h5 {font-size:15px}.markdown-body h6{margin-top:5px}.markdown-body p{line-height:inherit;margin-top:22px;margin-bottom:22px}.markdown-body img{max -width:100%}.markdown-body hr{border:none;border-top:1px Solid #ddd;margin-top:32px;margin-bottom:32px}.markdown-body code{word-break:break-word ;border-radius:2px;overflow-x:auto;background-color:#fff5f5;color:#ff502c;font-size:.87em;padding:.065em .4em}.markdown-body code,.markdown-body pre {font-family:Menlo,Monaco,Consolas,Courier New,monospace}.markdown-body pre{overflow:auto;position:relative;line-height:1.75}.markdown-body pre>code{font-size:12px;パディング:15px 12px;margin:0;word-break:normal;display:block;overflow-x:auto;color:#333;background:#f8f8f8}.markdown-body a{text-decoration:none;color:# 0269c8;border-bottom:1px Solid #d1e9ff}.markdown-body a:active,.markdown-body a:hover{color:#275b8c}.markdown-body table{display:inline-block! important;font-size: 12px;width:auto;max-width:100%;overflow:auto;border:1pxソリッド#f6f6f6}.markdown-body thead{background:#f6f6f6;color:#000;text-align:left}.markdown-body tr:nth-child(2n){背景色:#fcfcfc}.markdown-body td,.markdown-body th{パディング:12px 7px;line-height:24px}.markdown-body td{min-width:120px }.markdown-body blockquote{color:#666;padding:1px 23px;margin:22px 0;border-left:4px Solid #cbcbcb;background-color:#f8f8f8}.markdown-body blockquote:after{display:block; content:""}.markdown-body blockquote>p{margin:10px 0}.markdown-body ol,.markdown-body ul{padding-left:28px}.markdown-body ol li,.markdown-body ul li{ margin-bottom:0;list-style:inherit}.markdown-body ol li .task-list-item,.markdown-body ul li .task-list-item{list-style:none}.markdown-body ol li .task-list-item ol,.markdown-body ol li .task-list-item ul,.markdown-body ul li .task-list-item ol,.markdown-body ul li .task-list-item ul{ margin-top:0}.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-top:3px}.markdown-body ol li{padding-left :6px}@media (最大幅:720px){.markdown-body h1{font-size:24px}.markdown-body h2{font-size:20px}.markdown-body h3{font-size:18px}}

はじめに

User テーブルはシステムでユーザー属性を記録するために使用され、それぞれがユーザー独自の関連データを保持します。 一部のフロントエンド ページでは、ID に基づいてさまざまなレベルのコンテンツを表示する必要があります。

今回は、一般ユーザーの権限を

administrator に昇格する方法について説明します。

データの準備

より多くのデータ リソースを表示できるように、管理者として任命されるなど、ユーザー テーブルでユーザーの ID を指定したいと考えています。

ユーザー テーブル

is_admin にフィールドを追加して、ユーザーの管理者 ID をマークします。コマンドを使用して移行ファイルを作成します:

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';
Routing

区別のため、一般ユーザー向けのフロントエンド ページでは、新しい名前空間

Admin を使用して管理者関連のコードを配置します。まずコントローラーを作成します:

php artisan make:controller Admin/UsersController复制代码
次にルートを追加し、

routes/web.php ファイルを編集して次の内容を追加します:

Route::group(['prefix' => 'admin', 'namespace' => 'Admin'], function(){
	Route::resource('user', 'UsersController');
});
2 つのキーを使用することに注意してください。パラメータ、

    prefix: つまり、グループ内のすべてのルーティング アドレス。接頭辞として prefix を使用します。
  • namespace: 名前空間。グループ内のすべてのコントローラがこの名前に配置されることを指定します。宇宙の下。
Controller

前のセクションのルーティングでは、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 を作成し、テンプレートを作成するだけです:

<h1>Registered Users</h1>
<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');
});

写在最后

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

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


以上が管理者を任命し、通常の Laravel ユーザーに権限を昇格させますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.imで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。