首页 > 解决方案 > 一种策略适用于多种模型

问题描述

是否可以对多个模型使用相同的策略?

我有一个具有 21 个关系的模型,因此,编辑任何这些模型的权限都是相同的 - 所以我将维护 22 个策略。

标签: laravel

解决方案


您不能对多个模型使用相同的策略,因为当您创建策略时,您必须注册它才能生效,在 laravel 中创建策略需要应用模型,而注册策略需要该策略的模型适用于:

// in AuthServiceProvider Class:
 protected $policies = [
        Post::class => PostPolicy::class,
    ];

这里的第一个参数是模型类....

但:

您可以使用 Gate,并尝试使您的代码尽可能通用:

 Gate::define('update-entity', function ($user, $entity) {
// your code logic

        return ....;
    });

在你的控制器中:

if (Gate::allows('update-entity', $current_entity)) {
    // The current user can update the post...
}

有关盖茨和政策的更多详细信息:

https://laravel.com/docs/7.x/authorization


推荐阅读