任命管理员,给Laravel普通用户提权

任命管理员,给Laravel普通用户提权,第1张

概述任命管理员,给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 = '[email protected]';
路由

为了区别于普通用户的前端页面,我们使用新的命名空间 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/@R_301_6822@/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/@R_301_6822@/MIDdleware/ 目录下,编辑 adminAuthentication 文件,并实现代码逻辑:

namespace App\@R_301_6822@\MIDdleware;use Closure;use Illuminate\Contracts\Auth\Guard;use Illuminate\@R_301_6822@\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/@R_301_6822@/Kernel.PHP 文件内注册该中间件,并命名:

protected $routeMIDdleware = [	'admin' => \App\@R_301_6822@\MIDdleware\adminAuthentication::class,];复制代码

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

Route::group([    'prefix' => 'admin',    'namespace' => 'admin',    'mIDdleware' => 'admin'], function(){	Route::resource('users', 'UsersController');});
写在最后

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

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

总结

以上是内存溢出为你收集整理的任命管理员,给Laravel普通用户提权全部内容,希望文章能够帮你解决任命管理员,给Laravel普通用户提权所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1227734.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存