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

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,
];

原文地址:https://www.cnblogs.com/guiyishanren/p/10741914.html

时间: 2024-11-09 02:27:24

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

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

随着应用逻辑越来越复杂,要处理的权限越来越多,将所有权限定义在AuthServiceProvider显然不是一个明智的做法,因此Laravel引入了策略类,策略类是一些原生的PHP类,和控制器基于资源对路由进行分组类似,策略类基于资源对权限进行分组管理. 1.生成策略类 php artisan make:policy PostPolicy 2.在AuthServiceProvider的policies属性中注册策略类: 'App\Post' => 'App\Policies\PostPolicy

浅谈Yii-admin的权限控制

说到CMS,最需要有的东西就是权限控制,特别是一些复杂的场景,多用户,多角色,多部门,子父级查看等等.最近在开发一个线下销售的东东,这个系统分为管理员端,省代端,客户端,门店端,销售端, 部门端,部门老大下面分子部门等等,恶心的需求.我们这个项目使用yii框架开发,yii在php届还是比较流行的,虽然说laravel现在横行,但是一些部门一些团队还是采用了yii框架,比如我们. 我是刚接触yii这个框架,开始的时候对这种面向组件的框架甚是别扭.当时打算自己写权限的,自己创建权限表,关联表等,但是

Django——权限控制进阶

一.一级菜单的排序 我们用字典存放菜单信息,而字典是无序的,当一级菜单过多时可能会出现乱序情况,因此需要给一级菜单排序 1.给一级菜单表的model中加一个weight权重的字段 ,权重越大越靠前 weight = models.IntegerField(default=1, verbose_name='权重') 2.应用有序字典存放菜单信息 引用: from collections import OrderedDict 排序: # sorted 按照权重的大小对字典的key进行排序 for i

RABC权限控制(二级菜单实现)

目前大部分系统由于用户体验,基本上菜单不会做的很深,以二级菜单为例,做了一个简单的权限控制实现,可精确到按钮级别(基于django),下面具体看看实现 1.表结构的设计 无论开发什么都需要先梳理清楚需求,然后再考虑表结构,这里先来说说大致的表结构组成,注意,我的权限控制是通过url做的,所以控制的核心就在于控制url 表字段介绍设计如下: 权限表 url # 权限 title #权限的标题,左侧展示,代表的功能(因为不可能展示url吧) menu # 所属的一级菜单,外键关联一级菜单 paren

RABC权限控制(页面操作角色,权限和进行分配)

上一节主要说的是如何通过url进行权限控制,这一节就说一下如何开发一个权限控制的界面,这样我们就能很方便的创建角色,并分配给用户不同角色和不同权限. 1.编写角色管理页面 这个编写较为简单,主要是通过modelform快速实现的,下面代码比较简单,我就不多说了 效果图如下: 代码如下: def role_list(request): """角色列表""" roles_list = Role.objects.all() # 分页 current_p

gin-jwt对API进行权限控制

前言 之前文章简单介绍了如何运行gin+vue的前后端分离开源项目,该项目是学习了Gin实践教程后结合vue-element-admin写的,该教程讲得很详细,适合入门Gin.本篇文章将介绍gin+vue的前后端分离开源项目中如何使用gin-jwt对API进行权限验证. 安装gin-jwt 在GOPATH目录下运行 go get github.com/appleboy/gin-jwt 初始化jwt中间件 gin-jwt已经帮我们封装成中间件了,我们只需要设置并实例化它就可以直接用了. 现在来看看

rbac 权限控制

RBAC 的控制,大致是通过将角色的权限控制,来控制用户的权限. 需要构建的表为 用户表(user) ,角色表(role),节点表(node),三张主表 , 节点表内记录的是所有的权限和方法. 2张关联表,是为了关联3张数据表的,分别未 角色用户表(user_role),角色权限表(role_node),也可将两张表写成字段分别加入到用户表和权限表内; 废话不多说看下,键表语句如下 用户表: CREATE TABLE `wj_admin` ( `id` int(11) NOT NULL AUTO

译-BMC Remedy Action Request System权限控制概述

原文链接:Access control overview 说明: BMC Remedy Action Request System是BMC ITSM产品平台,简称AR 或者Remedy,可实现基于ITIL标准的整个IT管理流程的实施定制.该平台可实现多种权限级别的管理,包括人员.组.角色,以及表.字段.行级别等.本文可以用作其他对权限要求比较精细的系统参考. 为了便于理解,部分名词翻译如下: Server:服务器Form (or table):表单Field (or column):字段Acti

基于MVC4+EasyUI的Web开发框架形成之旅--权限控制

我在上一篇随笔<基于MVC4+EasyUI的Web开发框架形成之旅--框架总体界面介绍>中大概介绍了基于MVC的Web开发框架的权限控制总体思路.其中的权限控制就是分为"用户登录身份验证"."控制器方法权限控制"."界面元素权限控制"三种控制方式,可以为Web开发框架本身提供了很好用户访问控制和权限控制,使得用户界面呈现菜单.Web界面的按钮和内容.Action的提交控制,均能在总体权限功能分配和控制之下. 本篇文章主要细化这三个方面