>  기사  >  PHP 프레임워크  >  관리자를 지정하고 일반 Laravel 사용자에게 권한을 부여합니다.

관리자를 지정하고 일반 Laravel 사용자에게 권한을 부여합니다.

藏色散人
藏色散人앞으로
2020-10-29 14:48:122582검색

다음 튜토리얼 칼럼은 Laravel에서 일반 Laravel 사용자의 권한을 높이는 방법을 소개할 예정입니다. 필요한 친구들에게 도움이 되길 바랍니다!

관리자를 지정하고 일반 Laravel 사용자에게 권한을 부여합니다.

소개

시스템은 사용자 테이블을 사용하여 사용자의 속성을 기록하고 각 테이블은 사용자 자신의 관련 데이터를 유지 관리합니다. 일부 프런트 엔드 페이지는 ID에 따라 다양한 수준의 콘텐츠를 표시해야 합니다.

이번 호에서는 일반 사용자를 관리자로 업그레이드하는 방법에 대해 이야기하겠습니다.

데이터 준비

사용자 테이블에 사용자를 관리자로 지정하는 등 사용자의 신원을 지정하여 더 많은 데이터 리소스가 표시될 수 있기를 바랍니다.

사용자 테이블에 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';

Routing

프론트 엔드 페이지를 일반 사용자와 구별하기 위해 새로운 네임스페이스 Admin을 사용하여 관리자 관련 코드를 배치합니다. 먼저 컨트롤러를 만듭니다:

php artisan make:controller Admin/UsersController复制代码

그런 다음 경로를 추가하고 routes/web.php 파일을 편집하고 다음 콘텐츠를 추가합니다.

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

우리는 두 가지 주요 매개 변수인

  • 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 juejin.im에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제