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. 解决Linux环境Oracle显示乱码

    首先查看当前的编码格式 select userenv('language') from dual; 解决方法:   一.临时解决方法   切换到Oracle用户,执行   export NLS_LAN ...

  2. sphinx 针对tedfield搜索

    query = "(user can be admin)"  -> check all fields for the given words. If all words ar ...

  3. mac系统怎么给文件夹加密?mac文件夹加密教程

    mac系统怎么给文件夹加密?目前来说,若想要对你的Mac OS下面的文件进行加密的话有三种方法可以可以做到,第一种方法,Mac自带磁盘工具:第二种方法,例如BatterZip此类Mac压缩解压工具打包 ...

  4. [Usaco2009 MAR] Earthquake Damage 2

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1585 [算法] 一个最小割的经典模型 , 详见代码 时间复杂度 : O(dinic( ...

  5. Linux设备模型 (4)

    <Linux设备模型 (2)>和<Linux设备模型 (3)>主要通过一些简单的实作介绍了kobject.kset.kobj_type.attribute等数据结构的用法,但这 ...

  6. 前端之html第二天

    一.内容

  7. snnu1120: 划分数(DP计数问题)

    1120: 划分数 Time Limit: 8 Sec  Memory Limit: 128 MBSubmit: 6  Solved: 3[Submit][Status][Web Board] Des ...

  8. 【193】◀▶ PowerShell 官方资料索引

    Microsoft.PowerShell.Core 模块 Windows PowerShell 核心 Cmdlet Windows PowerShell 核心函数 Windows PowerShell ...

  9. 返回一个集合对象,同时这个集合的对象的属性又是一个集合对象的处理方法(ViewModel)

    如果遇到需要返回一个集合对象,其中该集合中的属性又是一个集合.第一种:可在考虑用外键关联,比如在控制器中可以采用预先加载的方式加载关联的数据,比如 RoleManager.Roles.Include& ...

  10. PCB 铜皮(Surface)折线多边形扩大缩小实现(第一节)

    继续铜皮多边形的相关的算法, 如何用代码实现多边形的扩大与缩小,这部份内容准备分为四节内容来讲解, 第一节,折线多边形的扩大缩小(不包含圆弧)   此篇讲第一节 第二节,带圆弧的多边形的扩大缩小 第三 ...