Maison > Questions et réponses > le corps du texte
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...
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
. Policy
和Gate
结合起来使用就行,不复杂。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的关系。
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_id
Logique 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.
🎜巴扎黑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');
}
}