• Laravel5.1 Policy


    上篇文章中我们理解了ACL权限控制的作用,但是 我们的站点的所有权限不可能都放在AuthServiceProvider中,这时候我们需要使用到Policy。

    第一步 创建policy

    我们使用artisan命令来创建:

    php artisan make:policy PostPolicy 

    进入路径打开这个policy,apppolicy:

    class PostPolicy
    {
        use HandlesAuthorization;
    
        /**
         * Create a new policy instance.
         *
         * @return void
         */
        public function __construct()
        {
            //
        }
    }

    第二步 添加一个权限方法:

    我们在创建的policy文件中 新建一个方法:

        public function update(User $user, Post $post)
        {
            return $user->owns($post);
        }

    User的owns方法是这样的:

        public function owns(Post $post)
        {
            return $post->user_id == $this->id;
        }

    第三步 使用这个policy

    进入到AuthServiceProvider中 修改policies数组进行注册:

        protected $policies = [
            'AppPost' => 'AppPoliciesPostPolicy',
        ];

    之后我们就可以在PostsController中使用了:

        public function index()
        {
            Auth::loginUsingID(1);
            $post = Post::findOrFail(1);
            if (Gate::denies('update', $post)){
                abort(403, 'sorry');
            }
            return $post->title;
    //        return view('show', compact('post'));
        }

    当然可以使用authorize方法:

        public function index()
        {
            Auth::loginUsingID(1);
            $post = Post::findOrFail(1);
    //        if (Gate::denies('update', $post)){
    //            abort(403, 'sorry');
    //        }
            $this->authorize('update', $post);
            return $post->title;
    //        return view('show', compact('post'));
        }

    在view中使用

    只需要在@can中修改成我们在policy中定义的方法名就可以了:

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
    </head>
    <body>
        <h1>{{ $post->title }}</h1>
        @can('update', $post)
        <a href="#">编辑</a>
        @endcan
    </body>
    </html>
  • 相关阅读:
    c++错误:不允许使用抽象类类型 "Employee" 的对象
    C++ error C2027:使用了未定义类型 类的调用顺序
    PyCharm 2020.1 激活教程
    mysql组内排序
    XGBoost
    React学习——Hello, React
    Lambda表达式
    plsql链接远程oracle服务器,以及常用配置
    静态网站 H5 跳小程序 (短信跳小程序)
    更新(D-U-N-S)邓白氏码公司信息(注册勿看)
  • 原文地址:https://www.cnblogs.com/Alex-sk/p/6608172.html
Copyright © 2020-2023  润新知