资讯专栏INFORMATION COLUMN

laravel5.1 -- ACL(Access Control List) Policies篇

instein / 257人阅读

摘要:在中,提供了管理授权逻辑以便控制对资源的访问权限。例如,我们可以利用来确定当前的是否有修改一篇文章的权限。

Introduction

laravel中,Policies提供了管理授权逻辑以便控制对资源的访问权限。例如,我们可以利用poslicies来确定当前的user是否有修改一篇文章的权限。

生成一个PostPolicy
$ php artisan make:policy PostPlicy

生成的App/Policies/PostPolicy.php如下


注册PostPolicy

PostPolicy注册到App/Providers/AuthServiceProvider中,注意要加上注释的编号部分(I,II,III)

 "AppPoliciesModelPolicy",
        Post::class => PostPolicy::class,  // III
    ];

    /**
     * Register any application authentication / authorization services.
     *
     * @param  IlluminateContractsAuthAccessGate  $gate
     * @return void
     */
    public function boot(GateContract $gate)
    {
        parent::registerPolicies($gate);

        //
    }
}
定义change方法

App/Policies/PostPolicy.php中,定义change方法

user()->id === $post->user_id;
    }
}

注意:
1.因为laravel5.1的多用户验证用的是Kbwebs/MultiAuth的,所以,在所有的$user->后面都要加上user(),包括Auth::
2.官方文档中是这样写的

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

update方法中写上了User和Post类,其实写上反而提示错误,不写是对的

3.如果想给adminstrator所有的权限,只需要在PostPolicy.php中添加before方法
如上面所示

控制器验证Policies
user_gestion = $user_gestion;
        $this->blog_gestion = $blog_gestion;

        $this->middleware("admin", ["only" => "updateSeen"]);
        $this->middleware("ajax", ["only"=> ["updateSeen", "updateActive"]]);
    }
    
    /**
    * Update "active" for the specified resource in storage
    *
    * @param IlluminateHttpRequest $request
    * @param int $id
    * @return Response
    */
    public function updateActive(Request $request, $id){
        
        $post = $this->blog_gestion->getById($id);

        // authorize验证当前用户是否有修改此文章的权限,如果没有,则返回403 Forbidden
        $this->authorize("change", $post);  

        $this->blog_gestion->updateActive($request->all(), $id);

        return response()->json();

    }

App/Repositories/BlogRepository.php中部分代码

/**
    * Update "active" in a post
    * 
    * @param array $data
    * @param int $id
    * @return void
    */
    public function updateActive($data, $id){
        $post = $this->getById($id);

        $post->active = $data["active"] == "true";

        $post->save();
    }

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22620.html

相关文章

  • Luthier CI 简单的认证 SimpleAuth

    摘要:访问控制列表的配置与访问控制列表使用的类别和权限类别组的名称和的关联排列。 简单的认证 SimpleAuth 内容 Contents 介绍 Introduction 安装 Installation 第1步:复制所需的文件 Step 1: Copy the required files 第2步:安装数据库 Step 2: Install the database 第3步:定义...

    Scorpion 评论0 收藏0
  • 如何使用 HTTP 响应头字段来提高 Web 安全性?

    摘要:在服务器做出响应时,为了提高安全性,在响应头中可以使用的各种响应头字段。用于防止等跨站脚本攻击。用于防止跨站脚本攻击或数据注入攻击但是,如果设定不当,则网站中的部分脚本代码有可能失效。用于指定所有子域名同样使用该策略。 在 Web 服务器做出响应时,为了提高安全性,在 HTTP 响应头中可以使用的各种响应头字段。 X-Frame-Options 该响应头中用于控制是否在浏览器中显示 f...

    xiyang 评论0 收藏0
  • PHP框架Phalcon 之 ACL

    摘要:一般至少要在执行路由前要判断用户是否具有权限一般在中,所以应该在它之前获得填充。以下代码可参考这里的方法就是重点。参考这里把对象保存在中。 showImg(https://segmentfault.com/img/bVkdih); 使用如下图解释这个组件: showImg(https://segmentfault.com/img/bVkdii); 实际最终真正要使用的是access_l...

    mikyou 评论0 收藏0
  • 关于WEB前后端分离的要点总结(上)

    摘要:前言对于前后端分离大家可能在网上可以找到很多的文章。但是,我们今天分享的文章的英文我们的老师对于前后端的分离问题的多年工作经验的总结。今天,我们把这些经验总结知识点分享给大家,希望可以帮助到大家。添加开启黑白名单,任选其一。 前言 对于前后端分离大家可能在网上可以找到很多的文章。但是,我们今天分享的文章的英文我们的老师对于前后端的分离问题的多年工作经验的总结。今天,我们把这些经验总结知...

    FullStackDeveloper 评论0 收藏0

发表评论

0条评论

instein

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<