zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    第一次团队作业
    第二次结对作业
    动态代理与AOP
    笔试题
    java并发面试题(带答案)
    线程问题——同步和死锁
    java线程的方法
    java实现多线程的方法
    使用java闭锁实现并发
    Java多线程——同步问题
  • 原文地址:https://www.cnblogs.com/Alex-sk/p/6608172.html
Copyright © 2011-2022 走看看