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

发布时间 - 2020-10-29 00:00:00    点击率:

下面由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 = '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,简单创建一个模板:

Registered Users

    @forelse ($users as $user)
  • {{ $user->name }} ({{ $user->email }})
  • @empty
  • No registered users
  • @endforelse

展示的是所有用户的信息。这显然必须拥有较高的权限。所以我们在给数据之前,要识别用户是否管理员:

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  # sql  # mysql  # restful  # 中间件  # 命名空间  # auto  # break  # Namespace  # display  # position  # overflow  # margin  # padding  # border  # !important  # background  # ul  # table  # td  # tr  # th  # li  # 数据库  # http  # word  # 的是  # 普通用户  # 这是  # 也会  # 又是  # 较高  # 要在  # 却又  # 给大家  # 还需要 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 原生JS获取元素集合的子元素宽度实例  Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  如何在企业微信快速生成手机电脑官网?  Java垃圾回收器的方法和原理总结  b2c电商网站制作流程,b2c水平综合的电商平台?  微信小程序 闭包写法详细介绍  LinuxShell函数封装方法_脚本复用设计思路【教程】  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程  如何挑选优质建站一级代理提升网站排名?  Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives  如何在新浪SAE免费搭建个人博客?  实例解析angularjs的filter过滤器  Python自动化办公教程_ExcelWordPDF批量处理案例  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  Swift中switch语句区间和元组模式匹配  如何快速完成中国万网建站详细流程?  Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布  Laravel如何配置任务调度?(Cron Job示例)  网站制作壁纸教程视频,电脑壁纸网站?  Laravel如何实现API资源集合?(Resource Collection教程)  如何用景安虚拟主机手机版绑定域名建站?  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  QQ浏览器网页版登录入口 个人中心在线进入  高防服务器如何保障网站安全无虞?  Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】  Python并发异常传播_错误处理解析【教程】  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  Laravel如何实现一对一模型关联?(Eloquent示例)  Laravel如何记录自定义日志?(Log频道配置)  Android中AutoCompleteTextView自动提示  php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】  如何有效防御Web建站篡改攻击?  浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  如何在建站之星绑定自定义域名?  如何用虚拟主机快速搭建网站?详细步骤解析  如何在阿里云香港服务器快速搭建网站?  如何在阿里云部署织梦网站?  iOS中将个别页面强制横屏其他页面竖屏  如何在Windows服务器上快速搭建网站?  Laravel如何生成API文档?(Swagger/OpenAPI教程)  打开php文件提示内存不足_怎么调整php内存限制【解决方案】  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  浅谈redis在项目中的应用  Linux系统命令中tree命令详解