recherche

Maison  >  Questions et réponses  >  le corps du texte

Vous recherchez un code complet sur l'application réelle de la politique de Laravel

Bonjour à tous, je suis coincé dans le processus d'apprentissage de la politique de Laravel. Je connais la différence entre la politique de Laravel et le middleware, mais je ne sais toujours pas comment appliquer la politique. Le modérateur peut-il fournir un petit programme complet ? beaucoup,
Il s'agit d'une réponse image sur la politique que j'ai trouvée sur stackoverflow, http://stackoverflow.com/ques...

Ensuite, c'est le code que j'ai stocké sur github lorsque je m'entraînais. Si quelqu'un est prêt à ajouter la fonction de politique à mon code, je serais très reconnaissant. Vous pouvez utiliser la politique pour n'importe quelle fonction, à condition d'y ajouter la politique
https://github.com/GoogleYY/s...

黄舟黄舟2778 Il y a quelques jours493

répondre à tous(2)je répondrai

  • PHP中文网

    PHP中文网2017-05-16 16:50:50

    Policy et Gate peuvent être utilisés ensemble, ce n'est pas compliqué. Policy est enregistré dans AuthServiceProvider. Si vous enregistrez un AccountPolicy::class => Account::class, cela signifie si l'User actuel a autorisations. Ajouter, supprimer, modifier et vérifier le Modèle du Compte. PolicyGate结合起来使用就行,不复杂。Policy的注册在AuthServiceProvider里,如注册一个AccountPolicy::class => Account::class,就表示当前User是否有权限对Account这个Model进行增删改查。

    AccountPolicy针对增删改查操作写上授权逻辑,如针对Delete操作写上$user->id === $account->user_id授权逻辑。

    如何触发这个授权逻辑呢?可以使用Model Event触发,如在EventServiceProvider::boot()

    Event::listen('eloquent.deleting: *', function (Model $model) {
        if(Gate::denies('delete', $object)) {
            throw new ForbiddenHttpException("You donot have permission delete {get_class($model)}.");
        }
    })

    Gate与Policy的关系类似于Route与Controller的关系。

    Dans AccountPolicy, écrivez la logique d'autorisation pour les opérations d'ajout, de suppression, de modification et de vérification, telles que $user->id === $account-> code> opération. user_idLogique d'autorisation. 🎜 🎜Comment déclencher cette logique d'autorisation ? Il peut être déclenché à l'aide de Model Event, comme dans EventServiceProvider::boot()🎜 rrreee 🎜La relation entre Gate et Policy est similaire à la relation entre Route et Controller. 🎜

    répondre
    0
  • 巴扎黑

    巴扎黑2017-05-16 16:50:50

    Après l'aide par e-mail du maître étranger du stackoverflow Amit Gupta, le problème est maintenant résolu.
    Étape 1 : Enregistrez d'abord la stratégie et établissez la relation de connexion entre le modèle et la stratégie dans AuthServiceProvider.php sous le dossier Providers, comme suit :

    protected $policies = [
            \App\Models\Role::class => \App\Policies\RolePolicy::class,
            \App\Models\Permission::class => \App\Policies\PermissionPolicy::class,
        ];

    La deuxième étape consiste à créer une nouvelle PermissionPolicy via la commande php artisan make:policy et à écrire le contrôle d'autorisation approprié dans les deux politiques via des fonctions, comme indiqué ci-dessous :

    class PermissionPolicy
    {
    public function before($user, $ability) {
            if ($user->hasRole('admin')) {
                return true;
            }
        }
        
    public function create(\App\Models\User $user, \App\Models\Permission $permission)
        {
            return $user->hasPermission('permission.create');
        }
    }

    La dernière étape consiste à utiliser les fonctions associées définies par cette politique dans le contrôleur, comme suit :

    class PermissionController extends Controller {
        public function create() {
            $this->authorize('create', new \App\Models\Permission);
            return view('permissions.create');
        }
    }

    répondre
    0
  • Annulerrépondre