【问题标题】:Authorization from model模型授权
【发布时间】:2017-07-07 04:04:38
【问题描述】:

我有一个带有 checkViewAccess() 方法的 Board.php 模型

@if($board->checkViewAccess())
    render board
@endif

它会进行一些检查,在最后一次检查时,它需要调用策略方法来确定用户的授权。

  • 在刀片中,@can('view', $board) 有效
  • 在控制器中,$this->authorize('view', $board) 有效

但我终其一生都找不到任何方法来调用 Board 模型的策略授权

我尝试过的:

  • Gate::check('view', $this) // 非静态方法,挺好的,没想到居然能工作
  • auth()->user()->can('view', $this) // 无论我从策略中返回什么,这甚至都没有达到策略并返回 false。即使我只是在 before() 策略方法中返回 true,它也是 false。 Laravel 文档声称 can() 方法可用于用户对象
  • $user->can('view', $this); // 认为是 auth 门面的问题,我直接从数据库中获取了用户,它仍然没有达到策略

那么我该如何实现呢?如何从模型访问 laravel 授权?

【问题讨论】:

  • 您需要问自己的一个问题是“为什么我在模型中需要这个?”然后“我可以把它放在更好的地方吗?”

标签: laravel laravel-5


【解决方案1】:

原来是 Laratrust 包在 trait 中使用了 can() 方法,所以我无法将自己的 Authorizable trait 添加到我的用户模型中

修复:

use LaratrustUserTrait;
use Authorizable {
    LaratrustUserTrait::can insteadof Authorizable;
    Authorizable::can as authorize;
}

【讨论】:

  • 如果你已经解决了你的问题,你可能想接受你自己的答案;)
  • 必须等几天才能允许我
猜你喜欢
  • 1970-01-01
  • 2013-07-28
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 2013-10-15
  • 2021-04-24
  • 2016-02-08
  • 1970-01-01
相关资源
最近更新 更多