【发布时间】:2019-02-27 09:07:59
【问题描述】:
添加项目后,我会获取所有有权查看该项目的用户通知他们。
这发生在侦听器中:
use App\Models\User;
use Illuminate\Support\Facades\Gate;
// ...
$notifiables = User::all()->filter(function(User $user) use($event) {
return Gate::forUser($user)->allows('view', $event->project);
});
这行得通。但是,当我的系统中有 1000 个用户并且 5 个能够查看该项目时,我会毫无意义地迭代超过 995 个用户。
并且由于事件和监听器同步运行,添加项目的用户必须等待这一点发生。
我怎样才能加快这个速度?
编辑:好的,可以将侦听器排队。但是,改进此代码会很棒。
【问题讨论】:
-
请您出示您的保单代码吗?
-
我知道你要问这个问题了。我可以看看这个政策的逻辑,并用它来加速这个过程。但是当政策发生变化时,人们可能会忘记更新这一点。错误传入。
-
好吧,根据您的政策中的逻辑,我将提出一些建议,但如果已经知道这无济于事,那就没关系了 :)
-
项目的东西其实只是一个例子。我有多个侦听器需要找到要通知的用户。我有具有权限的组,并且大多数时候策略会检查用户是否具有权限。但正如我所说,当添加附加条件时,事情会变得很危险..
标签: php laravel authorization