分享一种另类的控制器权限验证方法

后台基本上都得用到权限控制,现在已经有很多成熟的权限认证,例如框架自带的中间件,Gate,Passport等
下面就分享一种另类的控制器权限方法
新建一个基础的控制器

<?php

namespace App\Http\Controllers;

use Auth;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class BaseController extends Controller {

    // 自定义方法调度
    public function callAction($method, $parameters) {
        $request = app(Request::class);
        $route = $request->route();

        // 例子一
        $route_name = $route->getName();
        // 这里根据路由名称去做权限判断
        if ( !checkRole(Auth::user(), $route_name) ) {
            throw new AuthFailException('认证失败');
        }

        // 例子二
        $action_name = $route->getActionName();
        // 这里根据控制器名字去做权限判断
        if ( !checkRole(Auth::user(), $action_name) ) {
            throw new AuthFailException('认证失败');
        }

        // ......
        // 以上只是一些例子,具体逻辑自行实现

        return $this->{$method}(...array_values($parameters));
    }
}

注意,上面的checkRole,和AuthFailException自行定义。

新建的控制器只需要继承基础的控制器即可。

虽说扩展性不大(还得看内部权限判断逻辑),某些特定情况下或者做一些特定的权限判断还是有点用的。

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 5
Ryan

直接写到一个中间件里面就可以了

6年前 评论

@Ryan 说的好像很有道理

6年前 评论

我就是通过给每个路由设置别名, 然后分配权限 控制权限.

6年前 评论

@Ryan 开头已经说过可以用中间件等方式去做,这个只是另外一种方法

6年前 评论

构造方法和中间件都是不错的办法?

6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!