通过中间件Middleware、策略Policy控制权限

24 篇文章 1 订阅

通过中间件限制未登录用户

Laravel框架中,在“app/Http/Middleware”文件夹中内置了一些中间件,例如身份验证、CSRF保护等。

而中间件MiddleWare为我们提供了一种非常棒的过滤机制来过滤进入应用的HTTP请求。当我们使用Auth中间件来验证用户的身份时,如果用户未通过身份验证,则Auth中间件会把用户重定向到登录页面;如果用户通过了身份验证,则Auth中间件会通过此请求并接着往下执行。

因为当一个类对象被创建之前会先调用__construct()方法进行初始化,所以我们可以在控制器的构造方法__construct()中调用中间件,从而实现过滤。except设定show动作不适用Auth中间件进行过滤,其他动作都会被过滤,即除show方法外其他所有方法只有登录用户才可以访问。

...
class UsersController extends Controller
{
    public function __construct()
    {
        //第一个参数为中间件名称,第二个参数为过滤的动作,except黑名单,only白名单
        $this->middleware('auth', ['except' => ['show']]);
    }
...

通过授权策略限制登录用户的操作权限

1、创建授权策略

授权策略在app/Policies/文件夹下。

<?php

namespace App\Policies;

use App\Models\User;
use Illuminate\Auth\Access\HandlesAuthorization;

class UserPolicy
{
    use HandlesAuthorization;

    //第一个参数为当前登录用户实例,第二个参数为要进行授权的用户实例。
    //id相同则代表是同一个用户,则通过授权,可以进行下一个操作,否则抛出403异常,拒绝访问。
    public function update(User $currentUser, User $user)
    {
        return $currentUser->id === $user->id;
    }
}

2、注册授权策略

旧版laravel需要手动注册,但laravel5.8之后会自动授权注册,方便了很多。

可以直接在控制器中使用authorize()方法来检验用户是否授权。

authorize()方法的第一个参数为授权策略的名称,第二个参数为进行授权验证的数据。控制器中哪个方法需要判断是否需要授权就在哪个方法中添加此方法进行判断即可。

public function show(User $user)
{
    $this->authorize('update', $user);
    return view('users.show', compact('user'));
}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值