laravel权限管理类

本文介绍了如何在Laravel框架中实现权限管理,包括创建中间件、授权策略以及在实际应用中的部署和使用,帮助开发者更好地控制用户的访问权限。
摘要由CSDN通过智能技术生成

1. 新建中间件

<?php

namespace App\Base\Middleware;

use App\AuthRule;
use App\Base\Exceptions\ApiException;
use Illuminate\Support\Facades\Route;
use Closure;

class PermissionMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  \Closure $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {


        define("UID", is_login());  //判断是否登陆,定义用户常量
        if (!UID) {
            return redirect("admin/public/login"); //跳转登陆页面
        }
        define("IS_ROOT", is_administrator()); //定义超级管理员
        //定义一个前缀,操作前缀
        $route = Route::current();
        $path = $request->path();
        $rmodel = $route->action["prefix"];
        //前加
        if (!empty($rmodel)) {
            $rmodel = substr($rmodel, 1);
        } else {
            $rmodel = "";
        }
        define("MODULE_NAME", $rmodel); //定义一个前缀
        if (!IS_ROOT) {
            $access = $this->accessControl();
            if (false === $access) {
                throw  new  ApiException(ApiException::ERROR_ACCESS_NOT_ENABLE);
            } elseif (null === $access) {
                //检测访问权限
                $rule = $path;

                if (!$this->checkRule($rule, array(1, 2))) {
                    throw  new  ApiException(ApiException::ERROR_UNAUTHORIZE_ACCESS);
                } else {
                    // 检测分类及内容有关的各项动态权限
                    $dynamic = $this->checkDynamic();
                    if (false === $dynamic) {
                        throw  new  ApiException(ApiException::ERROR_UNAUTHORIZE_ACCESS);
                    }
                }
            }
        }
        return $next($request);
    }

    final protected function accessControl()
    {
        $route = Route::current();
        $route_name = Route::currentRouteName();
        $rmodel = $route->action["prefix"];
        $allow = config('lzy.ALLOW_VISIT');
        $deny = config('lzy.DENY_VISIT');
        $check = strtolower($rmodel . '/' . $route_name);
        if (!empty($deny) && in_array_case($check, $deny)) {
            return false; //非超管禁止访问deny中的方法
        }
        if (!empty($allow) && in_array_case($check, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值