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

2022-05-15 0 226

下面由Laravel教程栏目给大家介绍如何给Laravel普通用户提权,希望对需要的朋友有所帮助!

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

.markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-size:15px;overflow-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;padding: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 solid #f6f6f6}.markdown-body thead{background:#f6f6f6;color:#000;text-align:left}.markdown-body tr:nth-child(2n){background-color:#fcfcfc}.markdown-body td,.markdown-body th{padding: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 (max-width:720px){.markdown-body h1{font-size:24px}.markdown-body h2{font-size:20px}.markdown-body h3{font-size:18px}}

引言

系统内使用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,简单创建一个模板:

<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各个组件协同作用的能力!

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

【声明:根据2013年1月30日《计算机软件保护条例》2次修订第17条规定: 为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存 储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬! 鉴于此,也希望大家按此说明研究软件!】
本站所有源码尽量保证原汁原味,如有特殊情况会作出声明及标注,网站资源不做任何二次加密(原版加密除外,不影响程序使用的不会做解密处理),方便您更好的学习参考。 在您的能力范围内,为了大环境的良性发展,请尽可能的选择正版资源。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

即刻码站__国内靠谱的站长资源下载平台 php教程 任命管理员,给Laravel普通用户提权 https://www.jike1995.com/36410.html

常见问题
  • 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度
查看详情

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务