Laravel 使用中间件进行权限控制

飞凡的陀螺 关注

2018.01.24 17:45 字数 264 阅读 1138评论 0喜欢 1

先看 文档
Laravel 中间件提供了一种方便的机制来过滤进入应用的 HTTP 请求。
这里实现一个只有admin角色才能访问特定路由的功能

  1. 新建middleware
    php artisan make:middleware MustBeAdmin
  2. 打开生成的 \app\Http\Middleware\MustBeAdmin.php 修改handle方法
    关于hasRole方法上一篇有讲解
    这里在请求前判断用户角色是否是admin,如果条件满足进到下一个中间件。不满足返回首页。
    public function handle($request, Closure $next)
{
// 前置
if ($request->user()->hasRole('admin')) {
return $next($request);
}
return redirect('/');
}
  1. 让系统识别中间件。打开 \app\Http\Kernel
    在 $routeMiddleware 数组里追加
    'mustAdmin' => \App\Http\Middleware\MustBeAdmin::class,

  2. 关于中间件的调用非常灵活,比如

  • 在 routes\web.php 中
    Route::resource('posts', 'PostsController')->middleware('mustAdmin');
  • 在控制器中
class PostsController extends Controller
{ public function __construct()
{
$this->middleware('mustAdmin', ['only' => 'show']);
}
...
  1. 项目中用到过的中间件

例1

在route中定义哪些角色可以访问,通过 role:ADMIN,TEACHER 知,role是中间件名字,后面的 ADMIN,TEACHER 是参数。
routes.php

Route::group(['middleware' => ['web', 'auth', 'role:ADMIN,TEACHER'], 'namespace' => '\StudentTrac\Guides\Controllers'],
function () {
Route::resource('guides', 'GuidesController', ['only' => ['index']]);
Route::resource('guides/admin', 'AdminController', ['only' => ['index', 'edit']]);
}
);

/app/Http/Middleware/Role.php

    public function handle($request, Closure $next, $role)
{
// ['ADMIN', 'TEACHER']
$roles = func_get_args();
$roleIds = [];
// 根据role名字拿到对应的id
foreach ($roles as $index => $role) {
// 为什么这么判断我也忘了
if ($index < 2) continue;
$roleIds[] = config('roles.' . trim($role));
} // 判断当前用户的roleId是否存在
if (! in_array((int)$this->auth->user()->RoleId, $roleIds)) {
return response('Unauthorized', 403);
} return $next($request);
}

config/roles.php

return [
/*
* Role id for role.
*/
'ADMIN' => 1,
'STUDENT' => 2,
'GUARDIAN' => 3,
'TEACHER' => 4,
'SUPPORTSTAFF' => 5,
'AUDITOR' => 6,
'CURRICULUM' => 7,
'CLIENTADMINISTRATOR' => 8,
];

Laravel 使用中间件进行权限控制的更多相关文章

  1. Laravel 5.1 ACL权限控制 二 之策略类

    随着应用逻辑越来越复杂,要处理的权限越来越多,将所有权限定义在AuthServiceProvider显然不是一个明智的做法,因此Laravel引入了策略类,策略类是一些原生的PHP类,和控制器基于资源 ...

  2. Laravel 5.1 ACL权限控制 三 之权限准备及实现权限管理

    请自动参照到上上篇文章 1.创建控制器 php artisan make:model Permission php artisan make:model Role 2.创建表 php artisan ...

  3. Laravel 5.1 ACL权限控制 一

    请自行添加命名空间,代码下载地址 https://github.com/caoxt/learngit 1.所需要用到的数据表 users(用户表).roles(角色表).role_user(用户角色对 ...

  4. Laravel 5.1 ACL权限控制 四 之middleware

    1.创建Middleware php artisan make:middleware MustBeAnAdmin 2.实现 MustBeAnAdmin.php中的handle方法,判断登录的用户是否为 ...

  5. Laravel 5 中间件、路由群组、子域名路由、 权限控制的基本使用方法

    创建控制器: php artisan make:controller Admin/IndexController 创建Middleware: php artisan make:middleware T ...

  6. Xianfeng轻量级Java中间件平台:基于RBAC模型实现权限控制的原理

    首先,白话一下RBAC模型.RBAC是基于角色的访问控制(Role-Based Access Control)的简称.RBAC认为权限授权实际上是Who.What.How的问题.在RBAC模型中,wh ...

  7. ThinkPHP框架下基于RBAC的权限控制模式详解

    这几天因为要做一个项目,需要可以对Web应用中通用功能进行封装,其中一个很重要的涉及到了对用户.角色和权限部分的灵活管理.所以基于TP框架自己封装了一个对操作权限和菜单权限进行灵活配置的可控制模式. ...

  8. 浅谈Yii-admin的权限控制

    说到CMS,最需要有的东西就是权限控制,特别是一些复杂的场景,多用户,多角色,多部门,子父级查看等等.最近在开发一个线下销售的东东,这个系统分为管理员端,省代端,客户端,门店端,销售端, 部门端,部门 ...

  9. asp.net core mvc权限控制:权限控制介绍

    在进行业务软件开发的时候,都会涉及到权限控制的问题,asp.net core mvc提供了相关特性. 在具体介绍使用方法前,我们需要先了解几个概念: 1,claim:英文翻译过来是声明的意思,一个cl ...

随机推荐

  1. FOUNDATION OF ASYNCHRONOUS PROGRAMMING

    The async and await keywords are just a compiler feature. The compiler creates code by using the Tas ...

  2. mysql17---增量备份

    mysql增量备份: 全备份是: (增量备份一定要看日志的时间和位置节点) mysql数据库会以二进制的形式,把用户对mysql数据库的操作记录到文件中,不用使用定时器了.当用户希望恢复的时候,可以使 ...

  3. beego07----web博客

    conf/app.conf appname = blog1 httpport = 8080 runmode = dev name=admin pwd=admin controllersmy/attac ...

  4. tcp与socket关系

    套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元.

  5. C# mouse keyboard monitor

    /*********************************************************************************** * C# mouse keyb ...

  6. Redis: Redis Desk Manager Setup

    ylbtech-Redis: Redis Desk Manager Setup 1.返回顶部 1. redis-desktop-manager-0.8.1.3847 2. 2. 安装返回顶部 1. 2 ...

  7. 【WIP】Ruby JSON

    创建: 2018/03/22 以后有空补上 注: JSON.generate 参数只能是Obejct或者Array, 不可以是Hash https://docs.ruby-lang.org/ja/la ...

  8. mybatis基础学习5---懒加载和缓存

    1:懒加载 1)在主配置文件设置(要放在配置文件最前面) 1 <!-- 延迟加载配置,两个都必须同时有 --> <settings> 3 <!-- lazyLoading ...

  9. bzoj 3329: Xorequ【数位dp+矩阵乘法】

    注意第一问不取模!!! 因为a+b=a|b+a&b,a^b=a|b-a&b,所以a+b=a^b+2(a&b) x^3x==2x可根据异或的性质以转成x^2x==3x,根据上面的 ...

  10. 51nod 1188 最大公约数之和 V2

    第二个\( O(T\sqrt(n)) \)复杂度T了..T了..T了...天地良心,这能差多少?! 于是跑去现算(. \[ \sum_{i=1}^{n-1}\sum_{j=i+1}^{n}gcd(i, ...