Laravel 使用中间件进行权限控制
Laravel 使用中间件进行权限控制
先看 文档
Laravel 中间件提供了一种方便的机制来过滤进入应用的 HTTP 请求。
这里实现一个只有admin角色才能访问特定路由的功能
- 新建middleware
php artisan make:middleware MustBeAdmin - 打开生成的
\app\Http\Middleware\MustBeAdmin.php修改handle方法
关于hasRole方法上一篇有讲解
这里在请求前判断用户角色是否是admin,如果条件满足进到下一个中间件。不满足返回首页。
public function handle($request, Closure $next)
{
// 前置
if ($request->user()->hasRole('admin')) {
return $next($request);
}
return redirect('/');
}
让系统识别中间件。打开
\app\Http\Kernel
在 $routeMiddleware 数组里追加'mustAdmin' => \App\Http\Middleware\MustBeAdmin::class,关于中间件的调用非常灵活,比如
- 在 routes\web.php 中
Route::resource('posts', 'PostsController')->middleware('mustAdmin'); - 在控制器中
class PostsController extends Controller
{
public function __construct()
{
$this->middleware('mustAdmin', ['only' => 'show']);
}
...
- 项目中用到过的中间件
例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 使用中间件进行权限控制的更多相关文章
- Laravel 5.1 ACL权限控制 二 之策略类
随着应用逻辑越来越复杂,要处理的权限越来越多,将所有权限定义在AuthServiceProvider显然不是一个明智的做法,因此Laravel引入了策略类,策略类是一些原生的PHP类,和控制器基于资源 ...
- Laravel 5.1 ACL权限控制 三 之权限准备及实现权限管理
请自动参照到上上篇文章 1.创建控制器 php artisan make:model Permission php artisan make:model Role 2.创建表 php artisan ...
- Laravel 5.1 ACL权限控制 一
请自行添加命名空间,代码下载地址 https://github.com/caoxt/learngit 1.所需要用到的数据表 users(用户表).roles(角色表).role_user(用户角色对 ...
- Laravel 5.1 ACL权限控制 四 之middleware
1.创建Middleware php artisan make:middleware MustBeAnAdmin 2.实现 MustBeAnAdmin.php中的handle方法,判断登录的用户是否为 ...
- Laravel 5 中间件、路由群组、子域名路由、 权限控制的基本使用方法
创建控制器: php artisan make:controller Admin/IndexController 创建Middleware: php artisan make:middleware T ...
- Xianfeng轻量级Java中间件平台:基于RBAC模型实现权限控制的原理
首先,白话一下RBAC模型.RBAC是基于角色的访问控制(Role-Based Access Control)的简称.RBAC认为权限授权实际上是Who.What.How的问题.在RBAC模型中,wh ...
- ThinkPHP框架下基于RBAC的权限控制模式详解
这几天因为要做一个项目,需要可以对Web应用中通用功能进行封装,其中一个很重要的涉及到了对用户.角色和权限部分的灵活管理.所以基于TP框架自己封装了一个对操作权限和菜单权限进行灵活配置的可控制模式. ...
- 浅谈Yii-admin的权限控制
说到CMS,最需要有的东西就是权限控制,特别是一些复杂的场景,多用户,多角色,多部门,子父级查看等等.最近在开发一个线下销售的东东,这个系统分为管理员端,省代端,客户端,门店端,销售端, 部门端,部门 ...
- asp.net core mvc权限控制:权限控制介绍
在进行业务软件开发的时候,都会涉及到权限控制的问题,asp.net core mvc提供了相关特性. 在具体介绍使用方法前,我们需要先了解几个概念: 1,claim:英文翻译过来是声明的意思,一个cl ...
随机推荐
- 织梦仿站列表页pagelist分页显示竖排,如何修改成横排?
织梦仿站列表页pagelist分页显示竖排,如何修改成横排? 织梦列表页的分页标签是采用pagelist来进行调用的,但是很多人在调用之后会出现一个列表竖着排列的问题(横排美观度好一些),还是非常不美 ...
- 【HDU 2167】 Pebbles
[题目链接] 点击打开链接 [算法] 状压DP 先搜出一行符合的情况,然后,f[i][j]表示第i行,状态为j,能够取得的最大值,DP即可 [代码] #include<bits/stdc++.h ...
- bzoj 3489 A simple rmq problem —— 主席树套线段树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3489 题解:http://www.itdaan.com/blog/2017/11/24/9b ...
- JAVA JVM 流程一
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的.Java虚拟机 ...
- 微信公众平台-文章-app:让创意变为现实,这30个小程序“凭什么”脱颖而出?
ylbtech-微信公众平台-文章-app:让创意变为现实,这30个小程序“凭什么”脱颖而出? 1.返回顶部 1. 让创意变为现实,这30个小程序“凭什么”脱颖而出? 微信公开课 昨天 创意1:为多种 ...
- js中的call和apply方法
call方法: 语法:call(thisObj,[arg1,arg2,arg3,...]); 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call 方法可以用来代替另一个对象调用 ...
- 《C-RNN-GAN: Continuous recurrent neural networks with adversarial training》论文笔记
出处:arXiv: Artificial Intelligence, 2016(一年了还没中吗?) Motivation 使用GAN+RNN来处理continuous sequential data, ...
- 二、Log4j基本使用方法
转自:https://blog.csdn.net/luohai859/article/details/52250807 Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息 ...
- ExtJS 4 MVC 创建 Viewport
http://ext4all.com/post/extjs-4-mvc-with-viewport 效果图: 结构图: 没有用到Model层,直接在view里面写上 默认的 json的数据 中间Pan ...
- wamp的手动安装
Wamp的手动安装 (http://www.cnblogs.com/homezzm/archive/2012/08/01/2618062.html) 一.Apache2.4安装 1.修改\Apache ...