L02 教程中, 用户授权 部分我没有看懂是什么意思,怎么在控制器中判断是否具有权限?

我们将使用授权策略的 策略过滤器 机制来实现统一授权的目的。我们只需在策略中定义一个 before() 方法。before 方法会在策略中其它所有方法之前执行,这样提供了一种全局授权的方案。在 before 方法中存在三种类型的返回值:

其中,提到的 策略过滤器 我去看过,好像是说绑定策略到模型上面,或者绑定到中间件上面,我想的是绑定的控制器上面。虽然8.1章节末尾提供了一些方法,但是我还是想尝试一下策略过滤器这个东西,毕竟我是来学习的.希望大佬解答一下!

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
Epona
最佳答案

before 是在 对应的policy之前生效的,如果这个为true,那么后面的policy也不会去检查了。表示已经授权通过了。

假设一个博客除了作者之外,还有管理员可以进行更改。那么有下面的两种方式进行处理。

普通方法

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

before方法

public function before($user)
{
   return $user->is_admin;
}

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

before 方法可以将通用的admin判断移除到共有的方法中。

4年前 评论
hana (楼主) 4年前
Epona (作者) 4年前
Epona (作者) 4年前
hana (楼主) 4年前
Epona (作者) 4年前
zhouzishu 4年前
hana (楼主) 4年前
hana (楼主) 4年前
hana (楼主) 4年前
Epona (作者) 4年前
hana (楼主) 4年前
讨论数量: 4
Epona

before 是在 对应的policy之前生效的,如果这个为true,那么后面的policy也不会去检查了。表示已经授权通过了。

假设一个博客除了作者之外,还有管理员可以进行更改。那么有下面的两种方式进行处理。

普通方法

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

before方法

public function before($user)
{
   return $user->is_admin;
}

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

before 方法可以将通用的admin判断移除到共有的方法中。

4年前 评论
hana (楼主) 4年前
Epona (作者) 4年前
Epona (作者) 4年前
hana (楼主) 4年前
Epona (作者) 4年前
zhouzishu 4年前
hana (楼主) 4年前
hana (楼主) 4年前
hana (楼主) 4年前
Epona (作者) 4年前
hana (楼主) 4年前

Post模型对应你的文章表。就是你当前要修改的文章

4年前 评论
hana (楼主) 4年前

我要弄的是一个控制后台,首先得是Role = Development 才能进行访问,如果不是的就不让访问,包括之后的所有动作,然后再根据后面的动作GET/POST 按照权限来划分,请问如何实现?按照官方的L02 的书籍中介绍,我需要给控制器的每个动作crate show ····· 等等 全部都写上 $this->authorize('create', $Admin); 吗?
为什么 权限控制需要携带一个模型当做参数呢?判断用户受否具备权限还指定模型是干什么用的?
我个人觉得L02 这本书 写的有点问题,权限控制章节草草结束。

4年前 评论
hana (作者) (楼主) 4年前
4年前 评论
hana (楼主) 4年前
轻描淡写 (作者) 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!