Bir kullanıcının karakterini silmek/güncellemek için yetkilendirmeye çalışıyorum. Bunu yapmak için ilkeleri kullanıyordum, ancak yalnızca bir parametreyi ilke işlevine iletebiliyordum. Kullanıcıdan ve başka bir değişkenden daha fazla geçersem, değişken işleve aktarılmaz.Laravel Politikaları - Birden çok bağımsız değişkenin nasıl iletileceği
Modeller: Kullanıcının birçok karakteri vardır, bir karakter birden çok gönderi gönderebilir.
Gate::define('delete-comment', function ($user, $post, $comment) {
//
});
Ama edemedim: Yani yetkilendirme amacıyla, sana Gate Cephe daha katları geçebilir, ...- güncel karakterin kimliğine sahip yayının character_id karşılaştırmak docs Başına
olurdu Politikalarla bunu yapmak için zaten bulamıyorum. Yapmam gereken şey yetkilendirme için gereken nesneyi almak için Request nesnesini enjekte etmekti. Temelde Kullanıcı Nesnesine bile ihtiyacım olmaz.
public function update(User $user, Post $post)
{
return $user->id === $post->user_id;
}
İstek nesnesinin kullanılması işe yarıyor, ancak oldukça hacky hissediyor. Bunu başarmanın daha güzel bir yolu var mı?
düzenleme: CharacterLocationController
yılında
Ben bir yöntem show
var ve kaynak göstermeden önce harekete yetkilendirmek istiyorum.
public function show(Request $request, Character $character, Location $location)
{
$this->authorize([$location, $character]);
...
}
politikası bu gibi kayıtlıdır: 'App\Location' => 'App\Policies\LocationPolicy'
AuthServiceProvider
I politika işlevine aktarılan diziyi terk ve sadece $location
çıkarır.
public function show(User $user, $data) {
dd($data); // expecting location and character
return !$location->private || $location->authorized->contains($this->character);
}
Hala bir soru kaldım rağmen, clearification için teşekkürler. Politikanın kendisi bir sınıfa eklenir (bir elverişli model gibi), böylece kural, ikinci tür olarak uygun türden bir nesneyi geçirirken otomatik olarak çağrılır. Bir dizi iletirseniz, 'CommentController' örneğinde yaptığınız gibi, hangi politika kullanılır? Geçirilen dizideki ilk nesneyi çözmeye çalışıyor mu? – Johannes
Bazı testler yaptım ve dokümanlar geçtiğimiz her argüman için birden çok ilkeyi kullanacağını ima ediyor gibi görünüyor, ancak dizideki ilk öğe için yalnızca ilkeyi alabilmek için politikayı alabiliyordum. – user3158900
Henüz politikaların kodunu okumadım. Dikkat edilmesi gereken, dediğiniz gibi değişkenlerin sırasını ifade eder. Türüne bağlı olarak ilk değişkenin politikasını çağırır. – Johannes