• laravel authorize(授权)


    1.方法一  直接在AuthServiceProvider 中定义闭包,比较灵活

    namespace AppProviders;
    ...
    class AuthServiceProvider extends ServiceProvider
    {
    ...
    
        public function boot(GateContract $gate)
        {
            parent::registerPolicies($gate);
            //使用闭包定义授权能力
            $gate->define('update-post', function($user, $post){
                return $user->id == $post->user_id;
            });
            //使用类函数定义
          $gate->define('update-post', 'PostPolicy@update'); 
        }
    }
    namespace AppHttpControllers;
    ...
    //在控制器中检验授权
    class PostController extends Controller
    {
        public function show($id)
        {
            //auth()->logout();
            auth()->loginUsingId(3);
            $post = Post::findOrFail($id);
            // if(Gate::denies('show-post', $post)){
            //     abort(403, 'sorry, not sorry!');
            // }
            //$this->authorize('update-post', $post);
            return view('posts.show', compact('post'));
        }
    }
    //在view中检验授权,如果通过才显示update链接
    <h2>{{$post->title}}</h2> @can('update-post', $post) <a href=#>update</a> @endcan

    2.方法二 ,注册策略类来实现

    建立policy

    php artisan make:policy PostPolicy

     注册  模型 =>策略

    namespace AppProviders;
    ...
    class AuthServiceProvider extends ServiceProvider
    {
    
        protected $policies = [
            // 'AppModel' => 'AppPoliciesModelPolicy',
            AppPost::class => AppPoliciesPostPolicy::class,
        ];

    定义类策略函数

    namespace AppPolicies;
    
    use AppUser;
    use AppPost;
    
    class PostPolicy
    {   //可以建立多个检验方法对应不同场景
        public function update(User $user, Post $post)
        {
            return $user->id == $post->user_id;
        }
    }

    使用方法同上。

  • 相关阅读:
    slz关于Date类
    slzJDK1.8的环境变量配置
    slz关于下载Eclipse(绿色版,无需安装)及参数的设置
    slzjdk1.8安装包的下载
    slzTomcat9.0的下载(绿色版,无需安装)及环境变量的配置
    第一个dp51程序实现拉幕效果
    tsql中的sleepwaitfor
    删除WorkSheet时不提示对话框 WorkSheet.Delete
    如何写标准的连接字符串
    如何在Foxpro中调用Win32 api函数
  • 原文地址:https://www.cnblogs.com/fenle/p/4851149.html
Copyright © 2020-2023  润新知