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>
  • 相关阅读:
    vue(21)初识Vuex
    ESCMScript6(3)Promise对象
    vue(20)生命周期函数
    vue(19)嵌套路由
    vue(18)路由懒加载
    vue(17)vue-route路由管理的安装与配置
    vue(16)vue-cli创建项目以及项目结构解析
    vue(15)vue-cli介绍与安装
    webpack(11)配置文件分离为开发配置、生成配置和基础配置
    webpack(10)webpack-dev-server搭建本地服务器
  • 原文地址:https://www.cnblogs.com/Alex-sk/p/6608172.html
Copyright © 2011-2022 走看看